|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Q: Как создать свой счетчик (чтобы поле было не типа счетчик)? A1: Nz(DMax(...),0)+1 Так можно нумеровать записи даже внутри группы, а не только насквозь через всю таблицу. Для этого надо правильно задать параметры DMax. Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно. A2: Заводим отдельную таблицу с одним полем типа счетчик и без данных. Приводимая ниже процедура обращается к такой таблице и возвращает очередное значение для "нашего" счетчика. Внимание - файл, в котором сидит эта таблица, запрещено сжимать. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
Q: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины? A1: Добавить в таблицу со счетчиком при помощи инсерта запись, в которой полю счетчика дается значение на 1 меньше, чем надо. Потом удалить эту запись. Способ работает только при условии, что этот счетчик этого значения еще не выдавал. A2: Сжать базу, в которой сидит таблица со счетчиком. Счетчик будет выдавать значения начиная с наибольшего из существующих +1. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:12 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно а чего забоиться? событие "до обновления" формы с условием, что эта запись newrecord и конфликтов не будет ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:33 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Дык два юзера получат одинаковый DMax и один из них упадет на нарушение ключа. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:35 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
не понял как "два юзера получат одинаковый DMax" я же тебе сказал как ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:37 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ну так двое одновременно же! 1. Первый посчитал DMax, получил 10. 2. Второй посчитал DMax, получил 10. 3. Первый добавил запись. 4. Второй попытался добавить запись и упал. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:40 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Не будет, Саныч, конфликтов. Но а если перестраховаться - можно (нужно?) обработку ошибки в форму вставить. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:42 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Где я ошибаюсь в 13:40? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:42 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Хам Трамвайный и Виктор Сенин Видимо считается, что от момента До_Обновления (при условии что новая запись) до собственно обновления промежуток времени маленький и никто не успеет помешать. Поставьте точки останова и убедитесь в обратном. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 13:46 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
A2: Заводим отдельную таблицу с одним полем типа счетчик и без данных. Приводимая ниже процедура обращается к такой таблице и возвращает очередное значение для "нашего" счетчика. Код: plaintext 1. 2. 3.
Внимание - файл, в котором сидит эта таблица, запрещено сжимать. А если изначально в табличке сделать одну запись, а потом делать так: Код: plaintext 1. 2. 3. 4. 5. 6.
Тогда файл можно спокойно жать. Q: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины? Мажно еще где-нибудь хранить смещение, которое и прибавлять/отнимать от новых значений счетчика. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:30 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Только учти, что между MoveFirst и Delete запись уже может быть удалена другим пользователем ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:36 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ну и что? Пусть удалена (при этом другой пользователь создал новую запись с очередным значением). После этого все равно в таблице остается одна запись с максимальным значением счетчика. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:38 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ну и что? Пусть удалена (при этом другой пользователь создал новую запись с очередным значением) Которая в таблице и останется Может, вообще не удалять? Подумаешь - база чуть-чуть расти будет. Не страшо. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:45 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Которая в таблице и останется Ну да. Зато после этого файл можно сжимать/восстанавливать. Может, вообще не удалять? Подумаешь - база чуть-чуть расти будет. Не страшо. Но счетчик нужен для создания записи в другой таблице. А то что там создаем записи - тоже страшно? 4 байта в таблице-счетчике против N байт в таблице с данными. По-моему, действительно не страшно. Кроме того, лично для меня еще вопрос: если в таблице постоянно живет одна запись (удаляемая и создаваемая заново), то будет ли эта таблица постоянно заставлять пухнуть весь файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:50 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
> ...то будет ли эта таблица постоянно заставлять пухнуть весь файл. Будет. Стирание ведь не освобождает места. Короче, из альтернативных вариантов остается только вариант без стирания. :^) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:53 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Короче, из альтернативных вариантов остается только вариант без стирания. :^) Нет, со стиранием лучше, имхо. Веть база нет-нет а и поломаться может. Тогда восстановление можно делать без головной боли. Да еще и поменьше на величину до 4x(rsCounter!nCounter-1) байт может стать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 14:57 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ребята, а можно вас попросить приме DMax'а, а еще лучше описать немного эту функцию. А то я ее что-то не совсем понял. Что она делает? В аксесе выдается такой код: DMax («expr»; «domain»; «criteria») Че там надо подставлять? Допустим «expr» - это поле по которому ищем максимум, а вот остальное что??? Что за критерий??? Или это должен быть критерий в котором ищем максимум? Т.е., допустим, максимальное кол-во расхода по 2-й кассе??? Ну и что такое домен вообще не всосал? P.S. Сорри за глупый вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:03 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2ЛП и Санычу >Поставьте точки останова и убедитесь в обратном. М.б. возможно, никто не спорит. Поэтому я и написал про перестраховку и обработку ошибок. Я как-тона форуме описывал свою ситуацию: у меня в случае ошибки прибавлется 1 к значению и снова пытаемся сохраниться и так 5 раз - потом выдаю сообщение (юзеров в базе не более 5 - поэтому цифра "5", и вообще надо же когда-нибудь остановиться :) ) А если нужно что-то дргоу: у того же Гетца описан очень хорошо данный вопрос. Ну очень хорошо. Предлагаю взять его пример и юзать далее. А силы сберечь для вопроса почему у меня не работает Left ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:06 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Действительно, по варианту ВС база не растет. Если создавать и удалять запись, 50 000 итераций - выросла на 700 кб. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:08 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
> Нет, со стиранием лучше, имхо. Тогда это стирание тоже надо обставить всякими прибамбасами на случай конфликта двух юзеров. Нафиг, нафиг. > Веть база нет-нет а и поломаться может. Тогда восстановление можно делать без головной боли. Если в базе только эта таблица, то для восстановления надо только создать ее заново и задать счетчику то значение, на котором он остановился. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:20 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Тогда это стирание тоже надо обставить всякими прибамбасами на случай конфликта двух юзеров. Да в том то и дело, что не надо ничего обставлять - само будет работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:21 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
То было 2 Geo. А теперь 2 Senin Viktor: > Поэтому я и написал про перестраховку и обработку ошибок. И я написал: Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно. О чем мы спорим? :^) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:22 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
то для восстановления надо только создать ее заново и задать счетчику то значение, на котором он остановился. Тогда надо делать прибамбасы, каждый раз запоминающие это самое значение счетчика. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:22 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Geo: Когда два юзера стирают одну запись, то конфликтов не будет? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:23 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
> Тогда надо делать прибамбасы, каждый раз запоминающие это самое значение счетчика. ЗАЧЕМ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:24 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ой. :( ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:24 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
...между MoveFirst и Delete ... Не понял сразу, прошу прощения. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:26 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
у кого Гетц под рукой - скинте сюда его пример работы с собственным счетчиком. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:32 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
т.2 стр.87 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2003, 15:53 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Новая версия. Изменения выделены болдом. Q: Как создать свой счетчик (чтобы поле было не типа счетчик)? A1: Nz(DMax(...),0)+1 Так можно нумеровать записи даже внутри группы, а не только насквозь через всю таблицу. Для этого надо правильно задать параметры DMax. Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно. На этот случай надо написать обработчик ошибок. A2: Заводим отдельную таблицу с одним полем типа счетчик и без данных. Приводимая ниже процедура обращается к такой таблице и возвращает очередное значение для "нашего" счетчика. Внимание - файл, в котором сидит эта таблица, запрещено сжимать. Function Cou() As Long Dim ws As Workspace, db As Database Dim rsCounter As Recordset On Error GoTo errCou Set ws = DBEngine(0) Set db = CurrentDb 1 ws.BeginTrans 2 Set rsCounter = db.OpenRecordset("select * from tab Counter") 3 rsCounter.AddNew Cou = rsCounter!nCounter 'Close without update!' rsCounter.Close 4 ws.CommitTrans 5 Exit Function errCou: Select Case Erl Case 3 rsCounter.Close Set rsCounter = Nothing ws.Rollback DBEngine.Idle DB_FREELOCKS Resume 1 Case 2, 4 ws.Rollback DBEngine.Idle DB_FREELOCKS Resume 1 Case Else Resume Next End Select End Function Q: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины? A1: Добавить в таблицу со счетчиком при помощи инсерта запись, в которой полю счетчика дается значение на 1 меньше, чем надо. Потом удалить эту запись. Способ работает только при условии, что этот счетчик этого или большего значения еще не выдавал. Вариант: все-таки делать rsCounter.Update, тогда по виду этой таблицы будет сразу ясно, какое значение было выдано последним. Правда, в этом случае файл станет расти. A2: Сжать базу, в которой сидит таблица со счетчиком. Счетчик будет выдавать значения начиная с наибольшего из существующих +1. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2003, 13:57 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Если у кого есть т.2 стр.87, шепните, плз, о чем там... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 13:35 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Шепчу:) Правда без Гетцевых комментариев Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 13:44 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Виктору много енотов! Я так понимаю, что главное здесь вот что: Код: plaintext 1. 2. 3.
И словами это описывается так: держим в отдельной таблице очередное значение счетчика и каждый раз увеличиваем его на 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 14:09 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Главное: что таблица блокируется на момент чтения и увеличения счетчика, а все кто в нее будут в это время стучаться спокойно ждут (см. обработчик ошибок adhGetNextAutoNumber_Err) освобождения таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 14:13 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
ОК, да, таблица открывается с dbDenyRead. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 14:17 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Кстати, похоже, что там баг. Вот две строки, которые идут подряд: Код: plaintext 1.
Если я упал на эррор на второй из них, то при выполнении Resume у меня значение lngNextAutoNum будет то, которое было в момент падения, тогда как, пока я падал, несколько юзеров успели поработать и значение lngNextAutoNum надо обновить. А если бы автор этого кода не выпендривался и написал как человек Код: plaintext
то этого эффекта бы не было. Другое дело, что на этой строке никогда эррора не будет, но все же, все же, все же... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2003, 14:29 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
К последнему абзацу - новая версия. A2: Сжать базу, в которой сидит таблица со счетчиком. Счетчик будет выдавать значения начиная с наибольшего из существующих +1. Однако начиная с Аксесса 2002 это не работает, поэтому нужно пользоваться другими средствами (которые годятся, кстати, и для более ранних версий): копировать таблицу в тот же mdb либо импортировать/экспортировать ее в другой. Geo, тебе спасибо за подсказку. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2003, 15:10 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
К тому же вопросу, ответу A1 еще одно примечание: Если таким образом дать счетчику отрицательное значение, то он начнет выдавать отрицательные значения, несмотря на то что уже выдавал значения, большие их. И кроме того: Q: Может ли поле счетчика содержать повторяющиеся значения? A: В принципе да. Этого несложно достичь, меняя состояние счетчика описанными способами. Однако если при этом возникнут нарушения ключа (вообще говоря, поле счетчика можно и не делать ключевым, но обычно все-таки принято делать), то записи просто не смогут добавляться. Каждая неудачная попытка добавить запись будет увеличивать значение счетчика на 1. Когда зона существующих значений будет пройдена, то записи опять смогут добавляться. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2003, 19:07 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Если таким образом дать счетчику отрицательное значение Саныч, а почему именно отрицательное? Задаешь любое, и счетчик начинает плясать именно от него. Несмотря на то, что уже были значения большие их. Кстати, по моему это справедливо только для 97-го. В 2002-м у меня выдавалось как раз Max+1. Очередная загадка от MS. Может ли поле счетчика содержать повторяющиеся значения? Если нет уникального индекса - то очень даже может. Причем как в случае шаманства (ручная установка значения), так и в ходе нормальной многопользовательской работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2003, 09:15 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
что такое faq - часто задаваемые вопросы.\r \r нужно дать ответ на вопрос - "что такое счетыик, зачем он" и "почему счетчик не заполняет дырки в последовательности значений" и сделать небольшой экскурс в теорию о "суррогатных ключах" типа этого ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2003, 10:05 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Что мы НЕ знаем про каунтеры (aka счетчики) Регулярно, с периодичностью примерно раз в две недели, натыкаюсь на проглючивший первичный ключ в виде счетчика. То туда Null запишется (хотя поле обязательное), то значения задублируются (хотя есть уникальный индекс). Появляется в совершенное разных таблицах, единственное чем они похожи - наличием счетчика. Взглючившие записи - старые, уже существовавшие достаточно долго. Ни одна таблица с первичным ключом в виде "рукотворного счетчика" (длинное целое) ни каких подобных безобразиях замечена не была. У кого-нибудь есть мысли по этому поводу? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2003, 13:03 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
> Саныч, а почему именно отрицательное? Задаешь любое, и счетчик начинает плясать именно от него. Несмотря на то, что уже были значения большие их. Ровно вчера я собственными глазами видел, что это не так. Аксесс 97. Скажем, у счетчика значения до 10. Добавляешь запись с 20, он сам начинает выдавать значения от 21. Потом добавляешь запись с 15, а он нифига. > То туда Null запишется (хотя поле обязательное), то значения задублируются (хотя есть уникальный индекс). Похоже, что база накрылась. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.10.2003, 21:14 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Поправка от 4 окт 03, 15:10 вроде бы отменяется. :^) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2003, 15:15 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Поправка поправки!!!! Если удалить все записи и сжать БД, то тогда счетчик сбрасывается. Если удалить только несколько последних и сжать , то тогда облом ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2003, 15:30 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Что-то Темный ты темнишь Если сжимать именно базу, а не хранилище линков на таблицу, то счетчик сброситься ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2003, 15:38 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Все вышесказанное относиться к Access XP SP2. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2003, 15:40 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Senin Viktor: А как же это сжать хранилище линков на таблицу ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2003, 15:42 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Я проверил в 2000. Действительно облом. :^( ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2003, 15:43 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Итак, добавляю способ сбрасывания счетчика (спасибо Хаму): alter table Таблица1 alter column ПолеСчетчик counter(1,1) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2003, 15:46 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
>А как же это сжать хранилище линков на таблицу Под "хранилищем" следует понимать интерфейсную часть программы, в той в которой линки на таблицы. Вся эта хрень получаеться после разделения базы на данные (таблицы собственно) и интерфейс (все остальное). == А что тут смешного было? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2003, 15:46 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Я таки знал! Смешного - ничего. Настроение у меня сегодня хорошее. 3 дня выходных пошли на пользу. Просто проверку я производил все-таки в базе с таблицами. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2003, 15:49 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
А чего это в Москве 3 выходных? В Израиле был Йом Кипур, это я знаю, а в Москве что? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2003, 15:51 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Владимир Саныч: ЛЕНЬ и бактерии не полностью выздоровевшего Л.П. Да плюс тяжелый физический труд в течение 2 дней и последующий за ним отходняк в виде вышеуказанных причин. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2003, 17:03 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Саныч писал:> То туда Null запишется (хотя поле обязательное), то значения задублируются (хотя есть уникальный индекс). Похоже, что база накрылась. Ясен пень накрылась. Не вся база, а один индекс. Восстановление/сжатие/импорт в новую не проходит, спотыкается на этих кривых значениях. Приходится убивать связи, убивать индекс, лечить съехавшие значения, лечить значения в связанных таблицах, восстанавливать индекс, восстанавливать связи, и только тогда восстанавливать/сжимать. Непонятно другое - почему у меня все это счастье происходит только с индексами по полю типа счетчик? Т.е. бывает, что и по обычному (числовому) полю индекс рушится, в итоге выборка с использованием этого индекса глючит. Но ни уникальность, ни обязательность, ни целостность данных никуда не пропадают в случае индекса по числовому полю. А вообще мне это уже так надоело, что из-за одного этого глюка уже неделю хожу с мыслю "Пора сваливать с этого Jet'а" Темный писал:ЛЕНЬ и бактерии не полностью выздоровевшего Л.П. Что, я уже своей ленью начал людей заражать? Придется перед монитором в марлевой повязке сидеть ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2003, 09:54 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
а про дыры в нумерации - по моему самый часто задаваемый вопрос про щетчики... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 11:01 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Понял. Q: В таблице есть счетчик, но его значения идут не подряд, несколько чисел в середине отсутствуют. Как перезаполнить поле, чтобы дырок не было? A: Никаких средств для этого нет. Если возникла такая необходимость, значит база была спроектирована неверно. Поле счетчика должно служить только для однозначной идентификации записей (и, возможно, порядка их занесения), юзер не должен видеть его значений. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 14:37 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
гут. надо еще пару ламерских частых вопросов припомнить....... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 14:42 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Неужели и я смогу внести свою лепту! Q: А как все-таки избавиться от дырок в счетчике? (ну если очень нада!!!) A: Пользоваться данным советом сугубо осторожно!!! Возможны большие проблемы с сортировкой данных!!! 1. Удалить поле счетчик. 2. Сохранить таблицу. 3. Создать поле счетчик (естественно, с тем же именем) 4. Сохранить таблицу. Я таким пользуюсь только в тех случаях, когда подготавливаю базу к запуску после тестов. (Бывают умные люди, которые спрашивают "А почему это я первый в форуме зарегистрировался, а у меня номер 118". Не отвечать же, что я 117 раз регистрировался во время отладки :) Ответственности за использование этого текста нести не хочу, и не буду. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 14:59 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
автор писал:Если возникла такая необходимость, значит база была спроектирована неверно. Поле счетчика должно служить только для однозначной идентификации записей (и, возможно, порядка их занесения), юзер не должен видеть его значений. Мне кажется, что данное утверждение слишком категорично. Думаю, нет ни чего страшного в том, что пользователю будет выводиться (только для чтения) номер счетчика. В небольших базах где, количество номенклатуры не очень большое, и не требуется вводить сложную кодировку номенклатуры, счетчик в полнее может служить именно кодом товара (элемента справочника). А вот что касается "провалов" или "пробелов" в счетчике, то они могут образоваться при удалении элемента справочника, что будет вполне нормальным и для бухгалтерского (управленческого) учета, т.к. в данном случае в коде элемента справочника не зашифровываются индивидуальные характеристики элемента, группы элементов. А повторять код хоть и удаленного элемента справочника, в данном случае может привести к ошибкам. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 15:05 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 funddd: Проблемы будут также в других таблицах, в которых данные привязаны к нашей таблице через уничтоженное поле. А что касается подготовки к запуску после тестов, то надо тестовые данные вообще стереть (!!!), и тогда годится описанный уже способ со сжатием базы. 2 АлексейЕ: Да, я уже подумал, что был слишком категоричен. Предлагаю новую формулироку: ...юзер не должен видеть его значений, а если и увидит, то не должен возражать против тех значений, которые есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 15:12 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Владимир Саныч А может так? … Пользователю в большинстве случаев не зачем знать (видеть) о существовании счетчика. Если же счетчик в базе используется как элемент учетной политики предприятия (организации), то заказчик вынужден будет согласиться с теми ограничениями, которые вносит Тип данных (DataType) "Счетчик"… или что-то типа этого. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 15:24 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Что-то метод предложенный funddd, мне не нравиться. Удалять таблицу - это значит удалить и индексы и связи. Заново их создовать? Зачем? Когда ХамТрамвайный предложил (да и по сей день предлагает :) более приятный способ : через Alter (есно после удаления данных хотя можно и до). Правда только для 2000/2002/2003. Для 97 - прокатит простое Сжатие ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 15:25 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
По-моему, у меня сказано то же самое, только короче. Кроме того, не хотелось бы затрагивать частные случаи типа учетной политики предприятия. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 15:27 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Поправка: Я имел виду "не удалить таблицу", а удалить счетчик (что в принципе роли не играет) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 15:27 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Виктор, я с тобой. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 15:28 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ну кто на нас с Санычем? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 15:33 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
ИМХО, переиндексировать индекс - это бред! Ну и что, что пробелы в значениях. А если это значение является внешним ключом??? -------------------- Best wishes, Dmitriy ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 15:45 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Владимир Саныч Согласен. Короче, и то же самое. Просто я занудный бухгалтер, и описал со своей точки зрения. Что касается "… частные случаи типа учетной политики предприятия …" (это опять бухгалтерское занудство. Уж простите :)), то, на мой взгляд, это единственный случай при котором требуется счетчик вывести "на глаза" пользователя. Т.е. дополнительная идентификация элемента справочника в учете предприятия. Хотя, может, теперь я слишком категоричен. И может действительно не стоит смешивать FAQ по программирования и FAQ по учету. Просто мне показалось, что для начинающего программиста будет полезно понять, когда и в каких случаях требуется отображать Счетчик. Одним словом ИМХО. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 15:46 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Оффтопик: А что "занудный бухгалтер" делает на форуме sql.ru? Или не такой уж он и занудный? -------------------- Best wishes, Dmitriy ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 15:55 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Темный писал:А что "занудный бухгалтер" делает на форуме sql.ru? Это просто "занудный бухгалтер широкого профиля" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 16:19 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
> Просто мне показалось, что для начинающего программиста будет полезно понять, когда и в каких случаях требуется отображать Счетчик. Пусть лучше программист знает, что это не требуется никогда. А если это потребуется, то пусть он узнает об этом от заказчика. И напишет программу, в которой все равно счетчик не отображается, а отображается специально сделанное поле, в котором предусмотрена защита от дырок. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 16:51 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Владимир Саныч Убедил. Раз защита от дырок, так защита от дырок. P.S. И бублики все заштопаем. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 16:57 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
:^) Гусары, молчать... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 17:02 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ну не могу я промолчать!!!! Единственное, могу заменить все смайликами! -------------------- Best wishes, Dmitriy ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 17:47 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Оправлять бы пора, в фак уже, многостаночник Владимир Саныч! -------------------- Best wishes, Dmitriy ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2003, 19:53 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Итак, выдаю новую версию. Тут оказалось, что в течение 2,5 месяцев стояла версия с багом. В моем посте от 3 авг добавка про rsCounter.Update добавлена к ответу на совсем другой вопрос. :^) Q: Как создать свой счетчик (чтобы поле было не типа счетчик)? A1: Занести в DefaultValue поля: Код: plaintext
Так можно нумеровать записи даже внутри группы, а не только насквозь через всю таблицу. Для этого надо правильно задать параметры DMax. Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно. На этот случай надо написать обработчик ошибок. Пример обработчика можно взять из приведенного ниже A3. A2: Заводим отдельную таблицу с одним полем типа счетчик и без данных. Приводимая ниже процедура обращается к такой таблице и возвращает очередное значение для "нашего" счетчика. Внимание - файл, в котором сидит эта таблица, запрещено сжимать. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
Вариант: все-таки делать rsCounter.Update, тогда по виду этой таблицы будет сразу ясно, какое значение было выдано последним. Правда, в этом случае файл станет расти. A3: Держим в отдельной таблице очередное значение счетчика и каждый раз увеличиваем его на 1. Таблица блокируется на момент чтения и увеличения счетчика, а все, кто в нее будут в это время стучаться, спокойно ждут (см. обработчик ошибок adhGetNextAutoNumber_Err) освобождения таблицы. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.
Q: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины? A1: Добавить в таблицу со счетчиком при помощи инсерта запись, в которой полю счетчика дается значение на 1 меньше, чем надо. Потом удалить эту запись. Способ работает только при условии, что этот счетчик этого или большего значения еще не выдавал. (Если таким образом дать счетчику отрицательное значение, то он начнет выдавать отрицательные значения, несмотря на то что уже выдавал значения, большие их. Играя на этом, можно добиться, чтобы счетчик выдавал любые значения, в т.ч. и те, которые уже были.) A2: Сжать базу, в которой сидит таблица со счетчиком. Счетчик будет выдавать значения начиная с наибольшего из существующих +1. В некоторых версиях Аксесса это работает только при условии, что таблица со счетчиком пуста (и тогда счетчик начнет выдавать значения с 1). A3: Начиная с Аксесса 2000, можно запустить запрос наподобие такого: Код: plaintext
Q: Может ли поле счетчика содержать повторяющиеся значения? A: В принципе да. Этого несложно достичь, меняя состояние счетчика описанными способами. Однако если при этом возникнут нарушения ключа (вообще говоря, поле счетчика можно и не делать ключевым, но обычно все-таки принято делать), то записи просто не смогут добавляться. Каждая неудачная попытка добавить запись будет увеличивать значение счетчика на 1. Когда зона существующих значений будет пройдена, то записи опять смогут добавляться. Q: В таблице есть счетчик, но его значения идут не подряд, несколько чисел в середине отсутствуют. Как перезаполнить поле, чтобы дырок не было? A: Никаких средств для этого нет. Если возникла такая необходимость, значит база была спроектирована неверно. Поле счетчика должно служить только для однозначной идентификации записей (и, возможно, порядка их занесения), юзер не должен видеть его значений, а если и увидит, то не должен возражать против тех значений, которые есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2003, 16:38 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Эй, факописатели! Кто нить проверял Q1 A1? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2003, 17:21 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Видимо, нет, потому что про обработчик ошибок там сказано, что "можно сделать". Если можно - значит не пробовали. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2003, 21:47 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Надо дать примечание. Возможности DefaultValue в поле таблицы ограничены. Поэтому все эти хитрые функции приходится использовать либо в DefaultValue поля на форме, либо в программе, которая добавляет запись через рекордсет, либо в запросе на добавление. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2003, 00:46 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Надо дать примечание. Список функций, разрешенных для использования в дефаултвалуе, ограничен. перенесите меня на лестницу плиз ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2003, 01:43 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Очередная версия. Надеюсь, что последняя. Q: Как создать свой счетчик (чтобы поле было не типа счетчик)? A: Надо написать функцию, к которой обращаться либо в DefaultValue контрола (к сожалению, DefaultValue поля в таблице допускает только ограниченный набор стандартных функций), либо в программе, которая добавляет запись через рекордсет, либо в запросе на добавление. Ниже приведено несколько вариантов такой функции. Особое внимание надо уделить обработчику ошибок. Вариант 1: Код: plaintext
Так можно нумеровать записи даже внутри группы, а не только насквозь через всю таблицу. Для этого надо правильно задать параметры DMax. Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно. На этот случай надо написать обработчик ошибок. Вариант 2: Заводим отдельную таблицу с одним полем типа счетчик и без данных. Приводимая ниже процедура обращается к такой таблице и возвращает очередное значение для "нашего" счетчика. Внимание - файл, в котором сидит эта таблица, запрещено сжимать. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
Подвариант: все-таки делать rsCounter.Update, тогда по виду этой таблицы будет сразу ясно, какое значение было выдано последним. Правда, в этом случае файл станет расти. Вариант 3 (от Гетца): Держим в отдельной таблице очередное значение счетчика и каждый раз увеличиваем его на 1. Таблица блокируется на момент чтения и увеличения счетчика, а все, кто в нее будут в это время стучаться, спокойно ждут (см. обработчик ошибок adhGetNextAutoNumber_Err) освобождения таблицы. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.
Q: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины? A1: Добавить в таблицу со счетчиком при помощи инсерта запись, в которой полю счетчика дается значение на 1 меньше, чем надо. Потом удалить эту запись. Способ работает только при условии, что этот счетчик этого или большего значения еще не выдавал. (Если таким образом дать счетчику отрицательное значение, то он начнет выдавать отрицательные значения, несмотря на то что уже выдавал значения, большие их. Играя на этом, можно добиться, чтобы счетчик выдавал любые значения, в т.ч. и те, которые уже были.) A2: Сжать базу, в которой сидит таблица со счетчиком. Счетчик будет выдавать значения начиная с наибольшего из существующих +1. В некоторых версиях Аксесса это работает только при условии, что таблица со счетчиком пуста (и тогда счетчик начнет выдавать значения с 1). A3: Начиная с Аксесса 2000, можно запустить запрос наподобие такого: Код: plaintext
Q: Может ли поле счетчика содержать повторяющиеся значения? A: В принципе да. Этого несложно достичь, меняя состояние счетчика описанными способами. Однако если при этом возникнут нарушения ключа (вообще говоря, поле счетчика можно и не делать ключевым, но обычно все-таки принято делать), то записи просто не смогут добавляться. Каждая неудачная попытка добавить запись будет увеличивать значение счетчика на 1. Когда зона существующих значений будет пройдена, то записи опять смогут добавляться. Q: В таблице есть счетчик, но его значения идут не подряд, несколько чисел в середине отсутствуют. Как перезаполнить поле, чтобы дырок не было? A: Никаких средств для этого нет. Если возникла такая необходимость, значит база была спроектирована неверно. Поле счетчика должно служить только для однозначной идентификации записей (и, возможно, порядка их занесения), юзер не должен видеть его значений, а если и увидит, то не должен возражать против тех значений, которые есть. Q: Как сымитировать счетчик в отчете? A: Заводим текстбокс и задаем ему свойства: Код: plaintext 1.
Q: Как сымитировать счетчик в запросе на добавление? A: Пишем функцию примерно такого вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
В запросе обращаемся к ней дважды: в части WHERE - с параметром N, где N равно нужному начальному значению счетчика; в части SELECT - без параметра. И еще есть парочка вопросов, которые будут добавлены. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2003, 15:19 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2003, 23:02 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Саныч, что это было? В смысле какая бешеная лошадь тебе последний вопрос-ответ сказала? Известно, что при редактировании записи блокируется (от редактирования другими пользователями) не только эта запись, но и вся "страница" А у меня другая информация :). Умные книги утверждают, что прогресс таки победил и в аксесе уже несколько лет как сделали блокировку отдельных записей. Если создать счетчик со случайными значениями и сделать его первичным ключом таблицы, то записи, созданные в близкие моменты времени, скорее всего окажутся в разных страницах А вот кластерных индексов в аксесе так и не придумали. Саныч, патентуй Пока не запатентуешь - все остальные люди будут считать, что записи переупорядочиваются в соответствии с ключом только в момент сжатия, да и это можно через реестр отключить на фиг. Соответственно, если одну из них кто-то начнет редактировать, то меньше вероятность, что заблокированными будут другие. С чего это вдруг? Как были заблокированы записи в количестве одной страницы, так и остались заблокированы записи в количестве одной страницы. И вероятность не меньше и не больше, а ровно 100%. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2003, 02:44 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Драсте... Саныч, ЛП как обычно категоричен (хотя, блин, "морозы" исчезли:), но я тоже смутно припоминаю, что счетчики со случайными значениями используются в реплицируемых БД. Типа, меньше шансов, что в разных БД появятся записи с одинаковым ключом и, соответственно, объединение этих БД пройдет более "мягко". Хотя, с другой стороны, в реплицируемых БД вроде GUIDы используются... Вообщем, я это... просто поздороваться зашел ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2003, 11:50 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
ОК, уберу этот кусок нафиг. :^) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2003, 12:47 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Нуф-Нуф Морозы не исчезли, просто зима наступила в реале. И так холодно, а от песен совсем труба. Буду вспоминать теплую летнюю песню, как вспомню - буду петь. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2003, 13:07 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Q: Как получить значение счетчика только что добавленной записи? A1: Если запись добавляется через рекордсет, то так: Код: plaintext 1. 2. 3.
A2: Более широкий круг применимости у такого способа: Код: plaintext 1. 2. 3. 4.
Однако и этот способ имеет ограничения, а именно: работает только через ADO и только в Jet 4 и позже; возвращает значение только из записи, добавленной программно, но не через юзер-интерфейс. Thanx 2 Хам, Лох, Виг! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2003, 16:09 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
В свете последних веяний вношу поправку. Оказывается, если описать нечто As New, то потом нельзя превратить его в Nothing. Поэтому превращаю Dim rs As New ADODB.Recordset в Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2003, 16:33 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Я тут пытался играть с аттрибутами поля (.Attributes), по идее комбинируя их можно получить нечто вроде автоинкрементированного поля, но с возможностью редактирования. И наоборот :) Но мне не удалось достичь нужного результата, возможно что-то упустил, башка не в ту сторону думает ;( Что скажут мэтры? Такое невозможно в принципе? Тогда нафига эти аттрибуты созданы? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2003, 18:43 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
По-моему, есть стандартный набор типов полей, из которого вылезть нельзя. Атрибуты сделаны для того, чтобы либо создать поле разрешенного типа, либо узнать тип существующего поля. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2003, 18:46 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Ладно... все замммммечательно с этими каунтерами... Тока вот вопрос - а как все это будет работать если к таблице с таким каунтером применить INSERT INTO...SELECT... - добавление нескольких записей одним запросом? Не будет ли так, что все добавляемые записи будут пытаться брать одновременно одно и то же значение доморощенного каунтера? А? Спрашиваю, потому что лень проверить ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2003, 09:09 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Блин, уже начал кипятком писать по поводу "лень проверить", но вовремя поглядел на приведенный кусок кода. Саныч, если в функцию ничего не передавать - она будет вызываться только один раз . Поэтому надо туда передавать хоть что-то, например так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
В запросе обращаемся к ней дважды: в части WHERE - с параметрами (чтоугодно,N), где N равно нужному начальному значению счетчика; в части SELECT - в качестве первого параметра передавать любое поле из таблицы, второй параметр не указывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2003, 09:36 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 VikingTor: Немножко не понял вопрос. Таблица с обычным каунтером, а инсерт с обычными данными? Или кто-то из них с каким-то из приемов, описанных выше? 2 Лох: А тебя зато понял. :^) Да, надо будет дать твой вариант кода вместо моего и дать к нему пояснение, почему его нельзя упрощать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2003, 15:50 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Владимир Саныч писал:В свете последних веяний вношу поправку. Оказывается, если описать нечто As New, то потом нельзя превратить его в Nothing. А вот с этого места пожалуйста поподробнее . Что за новые веяния?Почему не знаю?И почему у меня превращает?Что я делаю неправильно? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2003, 21:02 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
VIG, не нервничай, можно Set чтототам = Nothing превратит что-то там в Nothing Но при первом же действии с чтототам (даже при таком элементарном как чтототам Is Nothing) оно создается заново. Так что лучше так не писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2003, 21:18 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Но при первом же действии с чтототам (даже при таком элементарном как чтототам Is Nothing) оно создается заново. Ну,ПРО ЭТО я знаю... Я ,то грешным делом подумал,что вышел новый указ кнессета/Гос.думы/модераторов ,запрещающий использование dim чтототам as new . "Теперь я спокоен,чего мне бояться ..." (В.Высоцкий) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2003, 21:35 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Доброго вам, сограждане! Никто, кстати, не сталкивался с таким траблом? Если у вас ленточная форма / Access97, то самопальный счетчик выдает max, если поле видно на экране, и max+1 (что и требуется), если записей много и оно уже ушло из "зоны видимости" ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2003, 17:45 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Это смотря что понимается под самопальным счетчиком. Их только в этим топике несколько разных. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2003, 17:48 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Q: Счетчик показывает, что последняя запись в моей таблице имеет номер N, а реально записей M, где M<N. Почему счетчик не правильно считает количество записей в таблице? Что это - баг или фича? А: Счетчик не должен подсчитывать количество актуальных записей в Вашей таблице. Его назначение совсем другое. Прочитай этот фак целиком и тебе все будет понятно. ЗЫ Ясно, что вопрос перекликается с вопросом про дырки, но мне кажется, что надо жирно выделенное как-то пометить. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2003, 11:23 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Я бы выделил жирным примечание в конце. :^) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2003, 11:29 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Не стал заводить отдельный топик, т.к. мой вопрос вроде бы пересекается с этим. Сорри, если что. Есть задача: сделать автоматическу нумерацию документов в пределах, скажем, месяца, без "закрытия периода" и без "архивных табличек". Конечно, нормальный счетчик, обслуживаемый акцессом, в таблице есть, для связей и т.п. Но нужна нумерация документов - та, что видна пользователю и печатается в выходных формах. Причем в пределах месяца разные пользователи не должны одновременно получить (то, что они сами могут поставить, вопрос другой) два одинаковых номера. Где-то в начале этого топика я предлагал довольно идиотский способ. Теперь я его же попробовал сделать. Вот что получилось: В "серверной" базе держим запись с последним номером. Очередной пользователь увеличивает ее содержимое и пользуется полученным значением. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Попробовал двумя параллельными сеансами. Насоздавалась куча записей. Повторов нету. Плюсы - можно генерить уникальные значения в пределах периода без пересоздавания таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2003, 16:21 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
GeoПопробовал двумя параллельными сеансами. Насоздавалась куча записей. Повторов нету. А пробовал запускать параллельно с точностью до 0,000001 секунды? :^) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2003, 16:25 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
А смысл? Я же в цикле записи создаю, пока не остановлю программу. Две программы непрерывно одновременно стучались в "сетевую" таблицу с попытками исправить одну из ее записей. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2003, 16:33 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Гео То что у тебя повторов не случилось - еще ни о чем не говорит. Попробуй сотню клиентов, да через 10-мегабитную сеть к загруженному серваку. И непонятно, зачем тебе дополнительная таблица. Выкидываешь ее и делаешь то же самое - в основной таблице ищешь максимальный номер (пусть будет N), и добавляешь новую запись с номером N+1. Кажется мне что это то же самое что и с двумя таблицами. Ну или почти тоже самое - все таки редактирование таблицы с одной записью (твой вариант со вспомогательной таблицей) происходит быстрее, чем добавление записи в большую таблицу (мой вариант без вспомогательной таблицы). Стало быть критическое время уменьшается. Но все равно взглючить может. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2003, 16:39 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
И непонятно, зачем тебе дополнительная таблица. Выкидываешь ее и делаешь то же самое - в основной таблице ищешь максимальный номер (пусть будет N), и добавляешь новую запись с номером N+1. Не то же самое. Я получаю очередной номер только в том случае, если мне удалось его записать - т.е. исправить существующую запись. По варианту "ищем максимальный - создаем его же +1" так не получиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2003, 16:47 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
По варианту "ищем максимальный - создаем его же +1" так не получиться. Именно так и получится. Запихни все это в такой же цикл (с проверкой Err.Number) И получишь то же самое. Если запись добавил - значит победил, если нет - значит снова макс+1 и попытка добавить, пока добавлялка не устанет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2003, 16:52 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Да, разумеется, я исхожу из предположения, что есть уникальный индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2003, 16:53 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
А я же сказал, что говорю о случае, когда индекса нет и быть не может :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2003, 16:59 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
явным образом не сказал но в твоем случае действительно индекса нет и быть не может :) беру свои слова обратно. DBEngine(0).Rollback ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2003, 17:05 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Предлагаю здесь: Владимир Саныч Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Однако и этот способ имеет ограничения, а именно: работает только через ADO и только в Jet 4 и позже; возвращает значение только из записи, добавленной программно, но не через юзер-интерфейс. чуть-чуть уточнить: если обращаться, пусть даже через Jet 4, к базе раннего формата, то метод не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2004, 09:12 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
А можно уточнить? Этот ФАК только для mdb или adp тоже подпадает? А то с @@identity в SQL2000 можно обломаться... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2004, 12:38 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Наверно, надо дать примечание и про SQL тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2004, 12:56 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Тогда надо написать, что для SQL Server 2000 вместо @@identity используется SCOPE_IDENTITY(). Первое при наличии триггера на вставку в другую таблицу с полем IDENTITY вернет id, вставленный триггером, а не вставленный исходной инструкцией. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2004, 14:56 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Про SQL - в ГФ. А то еще и реализацию на Oracle кто-нибудь попросит :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2004, 15:48 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Темный: Но ведь это касается и adp. А это уже Аксесс. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2004, 15:52 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
А через ODBC можно много чего подключить. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2004, 15:55 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Да, но это не ODBC. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2004, 15:58 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Тут уже был недавно топик про то, что можно подключить как CurrentProject.Connection, а что НИЗЯ \r \r /topic/67168 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2004, 16:27 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Добавляю способ имитации каунтера для обычного запроса либо ленточной формы. Источник: http://am.rusimport.ru/MsAccess/topic.aspx?ID=87 Способ 1. SELECT (Select Sum(1) From t AS p Where p.f<=p1.f), p1.f FROM t AS p1 ORDER BY p1.f; Способ 2. SELECT DCount("f", "t","f<=" & CStr(f)), f FROM t ORDER BY f; Примечание 1. Поле f обязано быть уникальным. Примечание 2. Способ 1 быстрее работает, но является необновляемым. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2004, 12:43 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Geo, пройди и ты по этой ссылке. Я там к твоему посту примечание сделал... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2004, 23:01 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
ВС, вечером посмотрю - на работе тырнета нет сейчас, а обед кончился :( ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2004, 12:52 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2ВС Посмотрел. У меня и при сортировке порядок сохраняется. Вернее, визуально перепутывается. Т.е. если запись с ид=2 имела порядковый номер 5, то после сортировки по ид он у нее и останется 5, а не станет 2, что было бы логично. В принципе, можно пытаться ловить момент сортировки и т.п., или запрещать ее. Да и вообще не знаю, чем этот вариант лучше. :) Просто он есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2004, 18:35 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
У меня при первом показе экрана было так, как ты описываешь. А потом я стал переходить к другому окну и возвращаться, и значения счетчика за минуту дошли до 1000 (в таблице из 20 записей). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2004, 12:10 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Гы? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2004, 21:32 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
А што "гы"? Собственно, мне нечего добавить. Возможно, это одного поля ягода с явлением повторного выполнения onprint при предварительном просмотре отчета, которое мы сейчас обсуждаем. Т.е., возможно, акцесс где-то кэширует текущее состояние запроса со "статическим набором данных" (неизменяемого, как и при использовании в отчете, так и предложенного мной), и ничтоже сумляшеся, при первом удобном случае чистит этот кэш, чтобы потом выполнить часть запроса заново. Что и приводит подчас к замечательным эффектам присутствия. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2004, 21:46 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
ОК. Просто я хотел убедиться, что тебе этот эффект известен. :^) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2004, 21:49 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Для полноты картины: create table xx (id counter) Эта команда создает таблицу со счетчиком. Странно, что до сих пор в этом топике она не появилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2004, 21:47 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Получение последнего значения счетчика для adp: SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY] Спасибо Темному! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2004, 14:44 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Вах! Прыятно, да! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2004, 15:12 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
маленькое уточнение SELECT @блабла = SCOPE_IDENTITY в ХП вернет null пользоваться параметром вывода RETURN SCOPE_IDENTITY ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2004, 23:44 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Странно, у меня "SELECT SCOPE_IDENTITY() as maxID" возвращает не NULL - а реальное значение счетчика. A2002, SQL 2000. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2004, 23:50 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
у меня null ado.net + msde щас в bol залезу ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2004, 23:53 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Мужики, вы говорите о разных командах. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2004, 23:57 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
У меня выдавал NULL когда я добавлял запись через .ADDNEW, пришлось переделать через "insert into ..." - тогда все заработало. Почему не работает в первом случае - лень было разбираться... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2004, 23:59 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 ВС Мы говорим об SCOPE_IDENTITY() - а как ее возвращать дело второе ИМХО. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2004, 00:02 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Вы говорите о том, что через SELECT SCOPE_IDENTITY() as maxID и RETURN SCOPE_IDENTITY оно работает, а через SELECT @блабла = SCOPE_IDENTITY нет. Вы тут спорите о чем-то, а спорить не о чем. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2004, 00:08 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
BOL дома нету,\r прошолся гуглом и нашел тока на клиппере кто то столкнулся тынц \r и Павла 2001 года тынц но у меня не то, я через command, завтра на ado.net форуме задам\r Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2004, 00:15 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
тьфу, прошу прошения... подмахнуф вместо @@identity незаметил :) все ухожу спать, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2004, 00:18 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
2 Артист Кларион и Клиппер абсолютно разные вещи ;-) Я аж прыгул по ссылке - думаю неуж то Клиппер с эскюлем стыковали? ;-))) Я на Клиппере много задач решил в свое времяю Он даже лицензионный был у меня... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2004, 00:21 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
вернулся из кровати позвольте а кроме как в параметре я тогда несмог бы использовать SCOPE_IDENTITY ? Кларион и Клиппер абсолютно разные вещи ;-) ну да кларион магнитолы есть такие ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2004, 00:27 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
сам же и отвечаю, после INSERT писать SCOPE_IDENTITY в переменную\r и юзать - иначе SCOPE_IDENTITY будет null\r /topic/87320\r опять с вашими идентитями не выспалюсь ... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2004, 00:47 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Самый-самый последний вариант. Вопросы. Q1: Как создать свой счетчик (чтобы поле было не типа счетчик)? Q2: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины? Q3: Может ли поле счетчика содержать повторяющиеся значения? Q4: В таблице есть счетчик, но его значения идут не подряд, несколько чисел в середине отсутствуют. Как перезаполнить поле, чтобы дырок не было? (Другой вариант вопроса. Счетчик показывает, что последняя запись в моей таблице имеет номер N, а реально записей меньше. Почему счетчик неправильно считает количество записей в таблице? Что это - баг или фича?) Q5: Как сымитировать счетчик в отчете? Q6: Как сымитировать счетчик в запросе на добавление? Q7: Как сымитировать счетчик в обычном запросе либо ленточной форме? Q8: Как получить значение счетчика только что добавленной записи? Q9: Как создать одним запросом таблицу со счетчиком? Вопросы с ответами. Q1: Как создать свой счетчик (чтобы поле было не типа счетчик)? A: Надо написать функцию, к которой обращаться либо в DefaultValue контрола (к сожалению, DefaultValue поля в таблице допускает только ограниченный набор стандартных функций), либо в программе, которая добавляет запись через рекордсет, либо в запросе на добавление. Ниже приведено несколько вариантов такой функции. Особое внимание надо уделить обработчику ошибок. Вариант 1: Код: plaintext
Так можно нумеровать записи даже внутри группы, а не только насквозь через всю таблицу. Для этого надо правильно задать параметры DMax. Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому "генератору счетчиков" одновременно. На этот случай надо написать обработчик ошибок. Вариант 2: Заводим отдельную таблицу с одним полем типа счетчик и без данных. Приводимая ниже процедура обращается к такой таблице и возвращает очередное значение для "нашего" счетчика. Внимание - файл, в котором сидит эта таблица, запрещено сжимать. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
Подвариант: все-таки делать rsCounter.Update, тогда по виду этой таблицы будет сразу ясно, какое значение было выдано последним. Правда, в этом случае файл станет расти. Еще подвариант: держать в этой таблице одну запись, в которой находится очередное значение счетчика, и вместо AddNew делать Edit и rsCounter!nCounter=rsCounter!nCounter+1, а потом соответственно Update. Вариант 3 (от Гетца): Держим в отдельной таблице очередное значение счетчика и каждый раз увеличиваем его на 1. Таблица блокируется на момент чтения и увеличения счетчика, а все, кто в нее будут в это время стучаться, спокойно ждут (см. обработчик ошибок adhGetNextAutoNumber_Err) освобождения таблицы. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.
Q2: Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины? A1: Добавить в таблицу со счетчиком при помощи инсерта запись, в которой полю счетчика дается значение на 1 меньше, чем надо. Потом удалить эту запись. Способ работает только при условии, что этот счетчик этого или большего значения еще не выдавал. (Если таким образом дать счетчику отрицательное значение, то он начнет выдавать отрицательные значения, несмотря на то что уже выдавал значения, большие их. Играя на этом, можно добиться, чтобы счетчик выдавал любые значения, в т.ч. и те, которые уже были.) A2: Сжать базу, в которой сидит таблица со счетчиком. Счетчик будет выдавать значения начиная с наибольшего из существующих +1. В некоторых версиях Аксесса это работает только при условии, что таблица со счетчиком пуста (и тогда счетчик начнет выдавать значения с 1). A3: Начиная с Аксесса 2000, можно запустить запрос наподобие такого: Код: plaintext
Q3: Может ли поле счетчика содержать повторяющиеся значения? A: В принципе да. Этого несложно достичь, меняя состояние счетчика описанными способами. Однако если при этом возникнут нарушения ключа (вообще говоря, поле счетчика можно и не делать ключевым, но обычно все-таки принято делать), то записи просто не смогут добавляться. Каждая неудачная попытка добавить запись будет увеличивать значение счетчика на 1. Когда зона существующих значений будет пройдена, то записи опять смогут добавляться. Q4: В таблице есть счетчик, но его значения идут не подряд, несколько чисел в середине отсутствуют. Как перезаполнить поле, чтобы дырок не было? (Другой вариант вопроса. Счетчик показывает, что последняя запись в моей таблице имеет номер N, а реально записей меньше. Почему счетчик неправильно считает количество записей в таблице? Что это - баг или фича?) A: Это нормальная ситуация. Если возникла необходимость, чтобы значения счетчика шли подряд, значит база была спроектирована неверно. Поле счетчика должно служить только для однозначной идентификации записей (и, возможно, порядка их занесения), юзер не должен видеть его значений, а если и увидит, то не должен возражать против тех значений, которые есть. Счетчик не служит для подсчета записей. Q5: Как сымитировать счетчик в отчете? A: Заводим текстбокс и задаем ему свойства: Код: plaintext 1.
Q6: Как сымитировать счетчик в запросе на добавление? A: Пишем функцию примерно такого вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
В запросе обращаемся к ней дважды: в части WHERE - с параметрами (чтоугодно,N), где N равно нужному начальному значению счетчика; в части SELECT - в качестве первого параметра передавать любое поле из таблицы, второй параметр не указывать. Внимание: упрощать этот код, удаляя из него параметр, передаваемый в части SELECT, - нельзя. Без параметра функция будет вызвана только один раз, а не в каждой записи заново. Q7: Как сымитировать счетчик в обычном запросе либо ленточной форме? A1: SELECT (Select Sum(1) From t AS p Where p.f<=p1.f), p1.f FROM t AS p1 ORDER BY p1.f; A2: SELECT DCount("f", "t","f<=" & CStr(f)), f FROM t ORDER BY f; Примечание 1. Поле f обязано быть уникальным. Примечание 2. Способ 1 быстрее работает, но является необновляемым. Q8: Как получить значение счетчика только что добавленной записи? A1: Если запись добавляется через рекордсет, то так: Код: plaintext 1. 2. 3.
A2: Более широкий круг применимости у такого способа: Код: plaintext 1. 2. 3. 4. 5.
Однако и этот способ имеет ограничения, а именно: работает только через ADO, только в Jet 4 и позже, и только с базами формата Аксесса 2000 и позже; возвращает значение только из записи, добавленной программно, но не через юзер-интерфейс. A3: Для adp годится такая модификация того же способа: SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY] Q9: Как создать одним запросом таблицу со счетчиком? A: create table xx (id counter) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 16:32 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Опубликовано! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 16:47 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Уважаемые, прошу сразу не бить, но позвольте спросить - насколько порочна идея, касающаяся SQL-adp. Принцип состоит в использовании id таблицы SQL server. Т.е. составлять уникальный (???) номер строки, добавляя по 1 к id. Добавляя не арифметически, а строчно. Просветите пожалуйста, насколько будет уникален такой номер. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 16:54 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Он не будет уникален, потому что два юзера могут одновременно создать одинаковое значение. А что значит строчно? Типа, если было 11111111111111111111111111111 то добавить 1 и получить 111111111111111111111111111111 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 16:56 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
ну да ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 16:58 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Но тогда он не только не будет уникальным, но и поле придется под него заводить бешеного размера, и все равно оно быстро кончится. Зачем делать плохо, если можно делать хорошо? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 17:01 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Сан Саныч, прошу прошения за неточность, я имел ввиду следующее ID - 1234 1 строка - 12341 2 строка 12342 3 строка 12343 4 строка 12344 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 17:04 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Владимир Саныч - я чёкнулся - простите ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 17:06 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
А если будет 12349, то дальше 123410? Или 123491? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 17:07 |
|
FAQ. Что мы знаем про каунтеры (aka счетчики)
|
|||
---|---|---|---|
#18+
Не конец дня и праздник впереди - убить меня мало ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 17:08 |
|
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?all=1&fid=45&tid=1654065]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
136ms |
get tp. blocked users: |
1ms |
others: | 267ms |
total: | 467ms |
0 / 0 |