|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
А если 123410 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 17:11 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Да ничего, я просто так спросил. Ответ-то я уже дал. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 17:20 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Понял, спасибо. Хотел поздравить с наступающими, но не знаю, насколько это уместно у вас. Но в любом случае удачи ! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 17:23 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
:^))) Взаимно! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 17:24 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Попробовал я воспользоваться информацией из вашего фака для увеличения рукотворного счетчика при выполнении запроса на 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; ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2004, 18:28 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
А чего именно не хватает в факе? Там на первый вопрос есть Вариант 3 (от Гетца). Очень похож на этот. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2004, 02:22 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Владимир Саныч, Это этот похож на тот :-) Конечно, дареному коню в зубы не смотрят, но, тем не менее, взять вариан 3 и без переделок применить его в запросе на добавление мне не удалось. На мой взгляд, там надо написать, что ежели кто хочет использовать эту функцию в запросе, надо ее переделать так, чтоб она на вход принимала один фиктивный(неиспользуемый) параметр и при вызове этой функции подавать туда что-нибудь из select, а иначе функция, как справедливо заметил ЛП, один раз выполнится и все, значение счетчика будет одинаково для всех строк результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2004, 16:01 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Я чего-то не понимаю. А разве там сказано, что эту функцию надо вызывать из селекта? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2004, 16:53 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Хочу поднять эту замечательную тему..... Прочитал ее с удовольствием (или нет..) но у из-за того что у меня также возникла надобность в генерации собственного счетчика. (от Акссесса отказаться низзя) Я взял за основу гетца и дополнил пример так что в одной табице содержатся последние значения счетчиков для любой таблицы. Выношу на суд кому интересно ******************************** 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 я вписывал какая бд внесла запись. Просмотрев результаты - ни одного выпадения, ни одного сообщения об ошибке. Большое спасибо всем кто приводил свои рассуждения и большое спасибо Гетцу. Обязательно куплю его двух томник ;-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2004, 16:45 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Я новичек в access. Научите как правильно пользоваться этой формулой - Nz(DMax(...),0)+1 В форме, в свойствах цифрового поля ввожу Значение по умолчанию - Nz(DMax(...),0)+1 Access пишет: Ошибка синтаксиса во веденном выражении. Введена запятая, перед которой отсутствует значение или индентификатор. что не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2004, 12:23 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Сегодня страсть как понадобилось сказать 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 для рекордсета на клиентском курсоре. Не уверен, что вполне понимаю, что именно в той строке написано. «Обновить кэш» перед открытием рекордсета – относительно понятно. После открытия но до входа в режим редактирования – кажется, еще понятней. А тут после входа в режим редактирования записи. Возьмется кто прокомментировать этот момент – почему так надо? (с выражением лица) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2004, 21:35 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Мож кому пригодится В FAQ не нашел - наверное плохо искал MSSQL + ODBC + Акс97 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2005, 18:01 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
paparomeМож кому пригодится В FAQ не нашел - наверное плохо искал MSSQL + ODBC + Акс97 Первый сейчас добавлю в фак, спасибо. А второй - это скорее для SQL сервера... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2005, 18:15 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Владимир Саныч paparomeМож кому пригодится В FAQ не нашел - наверное плохо искал MSSQL + ODBC + Акс97 Первый сейчас добавлю в фак, спасибо. А второй - это скорее для SQL сервера... 2 Саныч а хорошо ли в "первом" MoveFirst рисовать ? (особенно, если добавляется несколько записей подряд... и еще много-много точек ) клавиша F1 в этом месте как будто такой код рекомендует. Код: plaintext
С изменением в лице ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2005, 19:11 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Victosha Да - проверил - работает Тогда даже не обязательно открывать "пустой" рекордсет Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2005, 08:44 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Шправлено. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2005, 14:24 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Я заранее извиняюсь что мой вопрос обсасывался по разному. Но может кто-нибудь вышлет пример или выложит здесь как мне сделать запрос на обновление поля таблицы счетчиком??? Просьба не кидаться камнями, FAQ я 100 раз прочитал, дайте пример работающий пожалуйста.. надо обновить в базе более 4000 записей... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2006, 06:41 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
imho в акцессе (в JET) одним запросом это не сделать не терпит от подзапросы в SET ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2006, 07:16 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
обнови из кода ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2006, 07:22 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
DenisKSЯ заранее извиняюсь что мой вопрос обсасывался по разному. Но может кто-нибудь вышлет пример или выложит здесь как мне сделать запрос на обновление поля таблицы счетчиком??? а я не понял сути проблемы ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2006, 07:28 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
я понял что трэба обновить некотрое поле последовательными числовыми значениями ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2006, 07:41 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ну тогда 2 способа 1.создать поле счетчик и сделать UPDATE t1 SET t1.id = [ПолеСчетчик]; 2./topic/190598&pg=2&hl=%ed#1610065 там проблема чуть шире, но убрать else нетрудно ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2006, 07:52 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Имеется таблица в акссессе, в ней есть числовое поле, которое нужно обновить счетчиком, т.е. по порядку с одного до 4000 расставить числа ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2006, 08:47 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Alexander GНу тогда 2 способа 1.создать поле счетчик и сделать UPDATE t1 SET t1.id = [ПолеСчетчик]; 2./topic/190598&pg=2&hl=%ed#1610065 там проблема чуть шире, но убрать else нетрудно Ваш пример подошел но я помучился и сделал через Recordset.. Вопрос как обнулить счетчик код которого вы дали по ссылке? Не могу разобраться.. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2006, 09:22 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2006, 09:25 |
|
|
start [/forum/topic.php?fid=45&msg=33051338&tid=1654065]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 123ms |
0 / 0 |