powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / FAQ. Что мы знаем про каунтеры (aka счетчики)
25 сообщений из 176, страница 7 из 8
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32504958
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если 123410 ?
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32504971
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Да ничего, я просто так спросил. Ответ-то я уже дал.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32504976
sposad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял, спасибо. Хотел поздравить с наступающими, но не знаю, насколько это уместно у вас. Но в любом случае удачи !
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32504977
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
:^))) Взаимно!
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32507983
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал я воспользоваться информацией из вашего фака для увеличения рукотворного счетчика при выполнении запроса на Insert в MDB. Сказано много, но полезного мало. Помогли код из Гетца и замечание ЛП том, что в функцию вычисления счетчика надо чего-то подавать из select-a.
В общем, вот как это примерно вышло:
таблицы
test(MyCou) - текущее значение счетчика
1(cou,value) - куда добавляем
2(cou,value) - откуда добавляем
немного переделанная функция из Гетца (не показаны обработчики ошибок)
Function ManualCou(ByVal strFieldName As String, XZ As Variant) As Long
'Вход:
'имя поля счетчика в таблице с текущими значениями счетчиков
'любой
'!!При использовании в запросе вторым параметром подставлять к-л столбец из select
On Error GoTo adhGetNextAutoNumber_Err

Dim strTableName As String
Dim wrk As DAO.Workspace
Dim db As DAO.Database
Dim rstAutoNum As DAO.Recordset
Dim lngW As Long
Dim lngX As Long
Dim intRetryCount As Integer

Randomize
DoCmd.Hourglass True
intRetryCount = 0

strTableName = "test"
Set wrk = DAO.DBEngine.Workspaces(0)
Set db = CurrentDb
Set rstAutoNum = db.OpenRecordset(strTableName, dbOpenTable, dbDenyRead)

' Increment and return the autonumber value
rstAutoNum.MoveFirst
rstAutoNum.Edit
lngNextAutoNum = rstAutoNum.Fields(strFieldName)
rstAutoNum.Fields(strFieldName) = lngNextAutoNum + 1
rstAutoNum.Update

ManualCou = lngNextAutoNum

adhGetNextAutoNumber_Exit:
DoCmd.Hourglass False
On Error Resume Next
rstAutoNum.Close
Set rstAutoNum = Nothing
db.Close
Set db = Nothing
wrk.Close
Set wrk = Nothing
Exit Function
end function
Тестовый запрос (работает!)
INSERT INTO 1 ( [value], cou )
SELECT [2].value, ManualCou("myCou",[2]![value]) AS cou
FROM 2
WITH OWNERACCESS OPTION;
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32508291
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А чего именно не хватает в факе? Там на первый вопрос есть Вариант 3 (от Гетца). Очень похож на этот.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32509401
Фотография Varan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныч,
Это этот похож на тот :-)
Конечно, дареному коню в зубы не смотрят, но, тем не менее, взять вариан 3 и без переделок применить его в запросе на добавление мне не удалось.
На мой взгляд, там надо написать, что ежели кто хочет использовать эту функцию в запросе, надо ее переделать так, чтоб она на вход принимала один фиктивный(неиспользуемый) параметр и при вызове этой функции подавать туда что-нибудь из select, а иначе функция, как справедливо заметил ЛП, один раз выполнится и все, значение счетчика будет одинаково для всех строк результата.
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32509562
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я чего-то не понимаю. А разве там сказано, что эту функцию надо вызывать из селекта?
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32621671
squid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу поднять эту замечательную тему.....
Прочитал ее с удовольствием (или нет..) но у из-за того что у меня также возникла надобность в генерации собственного счетчика. (от Акссесса отказаться низзя)
Я взял за основу гетца и дополнил пример так что в одной табице содержатся последние значения счетчиков для любой таблицы.

Выношу на суд кому интересно


********************************
Option Compare Database
Option Explicit

' Database storing autonumber values
Const adhcAutoNumDb = "Ch02Auto.Mdb"
' Number of lock retry attempts
Const adhcLockRetries = 5
' Lower bound of range of retry wait
Const adhcLockLBound = 2
' Upper bound of range of retry wait
Const adhcLockUBound = 10

'Error constants
Const adhcErrRI = 3000
Const adhcLockErrCantUpdate2 = 3260
Const adhcLockErrTableInUse = 3262


Sub DbCreate()
Dim i As Long
For i = 1 To 10
CurrentDb.Execute ("CREATE Table Table" & i & " (id int UNIQUE not null, str char(50))")
Next i
End Sub

Sub DbDelete()
Dim i As Long
On Error Resume Next
For i = 1 To 10
CurrentDb.Execute ("DROP Table Table" & i)
Next i
End Sub

Sub StartTest()
Dim i As Long
Dim st As Date
Dim a As Long
Dim TNum As Long
st = Now
a = 100000#

For i = 1 To a
TNum = Int(10 * Rnd) + 1
CurrentDb.Execute ("INSERT INTO Table" & TNum & " (id,str) values (" & adhGetNextAutoNumber("Òàáëèöà" & CStr(TNum)) & ",'fdhfhgf')")
Next i
MsgBox a / DateDiff("s", st, Now) & " êëþ÷åé / ñåê"
End Sub
Function adhGetNextAutoNumber(ByVal strTableName As String) As Long

On Error GoTo adhGetNextAutoNumber_Err

Dim wrk As DAO.Workspace
Dim db As DAO.Database
Dim rstAutoNum As DAO.Recordset
Dim rst As Recordset
Dim lngW As Long
Dim lngX As Long
Dim intRetryCount As Integer

Randomize
DoCmd.Hourglass True
intRetryCount = 0

'Set wrk = DAO.DBEngine.Workspaces(0)
'Set db = wrk.OpenDatabase(adhCurrentDBPath() & adhcAutoNumDb, False)
Set db = CurrentDb
Set rst = db.OpenRecordset("SysTCount", dbOpenTable, dbDenyRead)
Set rstAutoNum = rst.OpenRecordset

rstAutoNum.FindFirst ("TableName='" & strTableName & "'")
If rstAutoNum.NoMatch Then ' Ñ÷åò÷èê â òàáëèöå íå çàðåãåñòðèðîâàí
rstAutoNum.AddNew
rstAutoNum!TableName = strTableName
rstAutoNum!Last_ID = 0
rstAutoNum.Update
rstAutoNum.FindFirst ("TableName='" & strTableName & "'")
End If

rstAutoNum.Edit
rstAutoNum!Last_ID = rstAutoNum!Last_ID + 1
rstAutoNum.Update

adhGetNextAutoNumber = rstAutoNum!Last_ID ' lngNextAutoNum

adhGetNextAutoNumber_Exit:
DoCmd.Hourglass False
On Error Resume Next
rstAutoNum.Close
Set rstAutoNum = Nothing
db.Close
Set db = Nothing
wrk.Close
Set wrk = Nothing
Exit Function

adhGetNextAutoNumber_Err:
Select Case Err.Number
Case adhcErrRI, adhcLockErrCantUpdate2, adhcLockErrTableInUse
intRetryCount = intRetryCount + 1
If intRetryCount > adhcLockRetries Then
adhGetNextAutoNumber = -1
Resume adhGetNextAutoNumber_Exit
Else
DAO.DBEngine.Idle
lngW = intRetryCount ^ 2 * _
Int((adhcLockUBound - adhcLockLBound + 1) * Rnd() + adhcLockLBound)
For lngW = 1 To lngW
DoEvents
Next lngW
Resume
End If
Case Else
MsgBox "Error " & Err.Number & ": " & Err.Description, _
vbOKOnly + vbCritical, "adhGetNextAutoNumber"
adhGetNextAutoNumber = -1
Resume adhGetNextAutoNumber_Exit
End Select

End Function


*********************************************
Значит запустил на пробу см верзхгние процедуру тест
+
параллельно сдлелав копию БД - клиента
(Set db = DBEngine.OpenDatabase("C:\....\db1.mdb"))

на 100 тыс записей по 10 разным таблицам все прошло на ура !!!!!
просто на отлично. в поле str я вписывал какая бд внесла запись. Просмотрев результаты - ни одного выпадения, ни одного сообщения об ошибке.

Большое спасибо всем кто приводил свои рассуждения и большое спасибо Гетцу. Обязательно куплю его двух томник ;-)))
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32681180
Dima-cp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я новичек в access. Научите как правильно пользоваться этой формулой - Nz(DMax(...),0)+1

В форме, в свойствах цифрового поля ввожу Значение по умолчанию - Nz(DMax(...),0)+1
Access пишет: Ошибка синтаксиса во веденном выражении. Введена запятая, перед которой отсутствует значение или индентификатор.
что не так?
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #32833145
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сегодня страсть как понадобилось сказать DBEngine.Idle на языке ADO.
Оказалось, что это JRO.JetEngine.RefreshCache adoConnectionObject.

В процессе поиска нашлись две реализации «клиентских» счетчиков от Microsoft.
(как оказалось – достаточно «древних»)
В рамках которых как раз рассматривается тема «сетевой синхронизации изменений в БД».
В FAQ эти реализации счетчиков точно не попали, а были ли в рамках этого топика – не
знаю. Скорее всего нет – по причине отсутствия в FAQ.

В целом, описал бы так – «похоже на Гетца, но совсем не Гетц».
Рекомендую посмотреть:

http://support.Microsoft.com/default.aspx?scid=kb;en-us;240317
http://support.microsoft.com/kb/191253/EN-US/


Кроме того (хоть это и не про счетчики, а про синхронизацию) хочется упомянуть еще две статьи
http://support.microsoft.com/default.aspx?scid=kb;en-us;200300
. http://support.microsoft.com/kb/180223/EN-US/


У меня в AccessXP оказалось, что по умолчанию выставлен как раз режим синхронной
записи транзакций.

ЗЫ
Из всего показанного в статьях кода больше всего удивило, пожалуй,
применение RefresheCache на рекордсете с серверным курсором как
аналога/заменителя Resync для рекордсета на клиентском курсоре.
Не уверен, что вполне понимаю, что именно в той строке написано.
«Обновить кэш» перед открытием рекордсета – относительно понятно.
После открытия но до входа в режим редактирования – кажется, еще понятней. А тут после входа в режим редактирования записи.

Возьмется кто прокомментировать этот момент – почему так надо?


(с выражением лица)
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #33051338
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мож кому пригодится

В FAQ не нашел - наверное плохо искал

MSSQL + ODBC + Акс97
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #33051377
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
paparomeМож кому пригодится

В FAQ не нашел - наверное плохо искал

MSSQL + ODBC + Акс97
Первый сейчас добавлю в фак, спасибо. А второй - это скорее для SQL сервера...
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #33051476
Мшсещырф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Саныч paparomeМож кому пригодится

В FAQ не нашел - наверное плохо искал

MSSQL + ODBC + Акс97
Первый сейчас добавлю в фак, спасибо. А второй - это скорее для SQL сервера...

2 Саныч
а хорошо ли в "первом" MoveFirst рисовать ?
(особенно, если добавляется несколько записей подряд...
и еще много-много точек
)

клавиша F1 в этом месте как будто такой код рекомендует.

Код: plaintext
\nWith rstTemp\n        .AddNew\n        !FirstName = strFirst\n        !LastName = strLast\n        .Update\n        .Bookmark = .LastModified\nEnd With


С изменением в лице
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #33051851
Фотография paparome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Victosha
Да - проверил - работает

Тогда даже не обязательно открывать "пустой" рекордсет

Спасибо
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #33052804
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Шправлено.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #34211863
DenisKS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я заранее извиняюсь что мой вопрос обсасывался по разному. Но может кто-нибудь вышлет пример или выложит здесь как мне сделать запрос на обновление поля таблицы счетчиком???

Просьба не кидаться камнями, FAQ я 100 раз прочитал, дайте пример работающий пожалуйста.. надо обновить в базе более 4000 записей...
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #34211886
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imho в акцессе (в JET) одним запросом это не сделать
не терпит от подзапросы в SET
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #34211890
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обнови из кода
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #34211892
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DenisKSЯ заранее извиняюсь что мой вопрос обсасывался по разному. Но может кто-нибудь вышлет пример или выложит здесь как мне сделать запрос на обновление поля таблицы счетчиком???

а я не понял сути проблемы
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #34211899
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я понял что трэба обновить некотрое поле последовательными числовыми значениями
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #34211913
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда 2 способа
1.создать поле счетчик и сделать UPDATE t1 SET t1.id = [ПолеСчетчик];
2./topic/190598&pg=2&hl=%ed#1610065
там проблема чуть шире, но убрать else нетрудно
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #34211969
DenisKS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется таблица в акссессе, в ней есть числовое поле, которое нужно обновить счетчиком, т.е. по порядку с одного до 4000 расставить числа
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #34212050
DenisKS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexander GНу тогда 2 способа
1.создать поле счетчик и сделать UPDATE t1 SET t1.id = [ПолеСчетчик];
2./topic/190598&pg=2&hl=%ed#1610065
там проблема чуть шире, но убрать else нетрудно
Ваш пример подошел но я помучился и сделал через Recordset..
Вопрос как обнулить счетчик код которого вы дали по ссылке? Не могу разобраться..
...
Рейтинг: 0 / 0
FAQ. Что мы знаем про каунтеры (aka счетчики)
    #34212054
Фотография Alexander G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public i As Long

Public Function Num(a As Integer)
    i = i +  1 
    Num = i
End Function

Public Sub lalala()
i =  0 
CurrentProject.Connection.Execute "UPDATE t10 SET id = num(nz(id))"
End Sub
...
Рейтинг: 0 / 0
25 сообщений из 176, страница 7 из 8
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / FAQ. Что мы знаем про каунтеры (aka счетчики)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]