|
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 |
|
|
start [/forum/topic.php?fid=45&msg=32286488&tid=1654065]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
87ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 262ms |
total: | 457ms |
0 / 0 |