Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MS Access - поле типа "счетчик" [D7, Access]


Страницы:   1 2 3

UnDISCOvery ©   (2005-12-22 15:16:00) 

Привет,Мастера!
Подскажите - какое максимальное значение поля "счетчик"?
И что произойдет если кол-во записей превышает это значение?
Нарушиться ли уникальность индекса по этому полю?


sniknik   (2005-12-26 11:34:00) [1]

UnDISCOvery   (26.12.05 10:54) [41]
переведем и ответ в другую плоскость...
у тебя ссылки на это поле предполагаются? и есть вообще смысл в автоинкрементности? (обязательном приращении) чего ты вообще хочеш от этого поля?
счетчики в аксесс предоставляют еще пару возможностей, которые могут подойти под задачу больше, это случайное значение и значение типа guid.
в первом ты никак не пересечешся с уже имеющимися (первые сто остались старые, следующие 4 милиарда добавляли/стирали) т.к. даются с учетом существующих.
во втором случае количество возможных значений позволяет пересчитать все атомы во вселенной...
но последовательного приращения ни тот ни тот не дадут.

вместо того чтобы спрашивать, "что далее" спроси себя, а "что надо?".


Виталий Панасенко   (2005-12-26 10:59:00) [2]


>  в начале значений счетчика остались неудаленные данные,
>  скажем 100 записей с ID = 100..200. И вот наш счетчик,
> перевалива свой максимум, скинувшись в "ноль", подошол к
> цифре 99. И тут мы добавляем запись!
> Что далее???

То, что и должно быть.. Есть ключ - Key vilation, нету ключа - получаем дубли..


UnDISCOvery   (2005-12-26 10:54:00) [3]

Попробую перевести вопрос в другую плоскость - данные в таблицу добавляются и удаляются, так что база более 2 гигов не распухнет. Периодически сжимается - период достаточный для скорости и для контроля размера. В итоге счетчик благополучно растет. Для определенности предлагаю его считать целым без знака, 4 байта, т.е. от 0 до 4 миллиардов. И вот представьте себе такую ситуацию - в начале значений счетчика остались неудаленные данные, скажем 100 записей с ID = 100..200. И вот наш счетчик, перевалива свой максимум, скинувшись в "ноль", подошол к цифре 99. И тут мы добавляем запись!
Что далее???


Silver...   (2005-12-23 18:08:00) [4]


> А я думаю ты не понял

да всё я прекрасно понял:

скажем на момент "X" мы имеем ОДНУ запись с ID = Маxимально_Возможное_значение(ID)

Вопрос где загиб БД по лимиту 2(4)ГБ она и 1Мб не наберет :) а вот загиб ID мы получили, потому как скорее всего (не утверждаю) ID продолжится заново с <1> или...
 А если у меня есть др. записи с ID=1 то как быть со связями

ПыСы: мне думается это не вопрос тока к Access-у но и к др. СУБД


sniknik   (2005-12-23 17:14:00) [5]

> и вопрос был что будет с инкременентом после превышения макс. значения - а не с размером базы и проч.
> писали - уйдет в минус - а после минуса что ?
а что бывает с минус еденицей при добавлении еденицы? нулем становится естественно. ;)

> CREATE TABLE Tbl (ID INT Identity(1, 1000000000), Name VarChar(30))
> такие выражения не прокатят в Акцесс я не помню точно, кажектся инкременет там с 1 начинается
> и вообще я предложил способ проверки - за день счетчик может увеличится и на 2 миллиарда - что все накинулись ?
вот когда вспомниш точно, тогда и "накидки" прекратятся, которые на самом деле являются попытками ответить на твои же вопросы.
инкремент там стандартноначинается с 1, при явном указании  с той цифры которая указана. (кстати тут указано не начало ;)


Anatoly Podgoretsky   (2005-12-23 16:17:00) [6]

lost_delpher   (23.12.05 16:15) [37]
Теперь вместо 20 сделай 4 миллиарда и сообщи на каком номере у тебя загнется база и также сообщи удастся ли тебе ее каким ни будь образом восстановить


lost_delpher   (2005-12-23 16:15:00) [7]

>Anatoly Podgoretsky
просто попробуй в акцесс с учетом создания таблицы
я пробовал и счетчик действительно увеличивается


Public Sub sdd()
Dim wrk As Workspace, i As Integer
Set wrk = DBEngine.Workspaces(0)
wrk.BeginTrans
For i = 1 To 20
CurrentDb.Execute ("insert into er (r) values (1) ")

Next i
wrk.Rollback
End Sub

не забыть кстати добавить ссылку на ДАО 3.6 в проекте


Anatoly Podgoretsky   (2005-12-23 16:10:00) [8]

Silver... ©   (23.12.05 16:01) [33]
А я думаю ты не понял, размер поля 4 байта, а размер базы всего 2 гб. Даже на заявленой скорости добавления потребуется более года, а она не получится раньше база лопнет, а если удалять и сжимать то о такой скорости говорить не приходится.


Anatoly Podgoretsky   (2005-12-23 16:08:00) [9]

lost_delpher   (23.12.05 15:53) [32]
Не увеличится ни на одну единицу, записи в базу нет, это локальные игры.


lost_delpher   (2005-12-23 16:05:00) [10]

а ситуация вполне реальная и не такая уж невозможная - например при транзакции счетчик  в Акцесс увеличивается , и при откатах не уменьшается - так что если вы вставляете несколько миллионов записей и потом откатываете - можете получить ситуацию когда счетчик будет зашкаливать


Silver...   (2005-12-23 16:01:00) [11]


> Ты сначала добавь такое количество

а в чем проблема-то ?

запись показаний какогонибудь датчика ...

... думаю не проблемма


lost_delpher   (2005-12-23 15:53:00) [12]

Anatoly Podgoretsky
Код я привел человеку чтобы он проверил - и нашел ответ на свой основной вопрос, ответ он кстати так пока и не получил.

>sniknik
и вопрос был что будет с инкременентом после превышения макс. значения - а не с размером базы и проч.
писали - уйдет в минус - а после минуса что ?

CREATE TABLE Tbl (ID INT Identity(1, 1000000000), Name VarChar(30))

такие выражения не прокатят в Акцесс я не помню точно, кажектся инкременет там с 1 начинается

и вообще я предложил способ проверки - за день счетчик может увеличится и на 2 миллиарда - что все накинулись ?


Anatoly Podgoretsky   (2005-12-23 15:33:00) [13]

Ты сначала добавь такое количество, потом поговорим, пускай база даже будет из одной таблицы с едидинственным полем счетчик.


Silver...   (2005-12-23 15:27:00) [14]


> Тебя тогда уже не будет на свете


Ну, ну
  ситуации ведь разные бывают:

 Записываются данные много и долго, при этом старые (отработанные, ненужные) удаляются причем может остаться запись под нр. <1> и <1.000.000...> размер базы в "Мб" будет, а щетчк...? :(

 Вопрос действительно интересен


Anatoly Podgoretsky   (2005-12-23 15:03:00) [15]

lost_delpher   (23.12.05 14:15) [24]
В таком смысле в данном коде нет. В базу данные не добавляются, проверка на дубли не работает, для чего ты его привел - для прикола чтоли?


sniknik   (2005-12-23 14:50:00) [16]

> Здесь был вопрос о том что будет с инкрементом
на который уже был ответ. надо сначала читать ветки прежде чем свое постить.

> я предложил проверить - что значит цикличный - т.е. он сбрасывает счетчик через цикл ?
а самому свое предложение реализовать?

то и значит, добавление без учета переполнения отбрасывая "вылезшую" за предел типа часть
CREATE TABLE Tbl (ID INT Identity(1, 1000000000), Name VarChar(30))

INSERT INTO Tbl (Name) VALUES ('1')
....
INSERT INTO Tbl (Name) VALUES ('14')

результат
ID                 | Name
1            |   1
1000000001    |   2
2000000001    |   3
-1294967295  |   4
-294967295    |   5
705032705      |   6
1705032705    |   7
-1589934591   |   8
-589934591    |    9
410065409     |    10
1410065409    |   11
-1884901887   |  12
-884901887    |   13
115098113      |   14


lost_delpher   (2005-12-23 14:36:00) [17]

Здесь был вопрос о том что будет с инкрементом - я предложил проверить - что значит цикличный - т.е. он сбрасывает счетчик через цикл ?
тогда можно попробовать сохранять одно значение - через скажем - миллион записей и посмотреть что будет...


sniknik   (2005-12-23 14:28:00) [18]

> в том коде - который я привел выше - запись не сохраняется - и размер базы не растет - растет только инкремент
тогда тебе его размерность вообще пофигу, он цикличный.


UnDISCOvery   (2005-12-23 14:24:00) [19]

Ну и какой тогда смысл? Не пойму :-/
Счетчик просто будет по кругу


lost_delpher   (2005-12-23 14:15:00) [20]

в том коде - который я привел выше - запись не сохраняется - и размер базы не растет - растет только инкремент


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо