Вниз
Скачать: CL | DM;

ключевое поле-счетчик   Найти похожие ветки 

← →
xyz   (2009-07-29 15:38) [0]

Есть таблица в БД Access. Можно ли сделать, чтобы при добавлении очередной записи ключевое поле (в моем примере это просто целое число - счетчик, нумеруется с 0) вычислялось само? И если его надо вычислять самому перед занесением записи, то как?


← →
Palladin ©   (2009-07-29 15:50) [1]

оно и так само вычисляется


← →
Amoeba ©   (2009-07-29 15:52) [2]

Если это поле в таблице при ее создании было задано как счетчик, то при выполнении Post значение ему будет присвоено автоматически. Вычислять ничего не надо, тем более, что вручную задать ему значение нельзя.


← →
xyz   (2009-07-29 16:14) [3]


> Если это поле в таблице при ее создании было задано как
> счетчик, то при выполнении Post значение ему будет присвоено
> автоматически. Вычислять ничего не надо, тем более, что
> вручную задать ему значение нельзя.

Ну я вообще-то записи вставляю с пом. ADOCommand. Какой это надо составить SQL-запрос? Пробовал просто пропускать в запросе ключевое поле, указывал только оставшиеся 2, возникало исключение.
А в самом access"е поле установлено как счетчик, да.


← →
Palladin ©   (2009-07-29 16:18) [4]

офигеть, исключение возникало, а мы сидим тупим, тогда все понятно...


← →
xyz   (2009-07-29 16:26) [5]

Т. е. такой запрос
insert into Инвентарь (Наименование,Код_типа_инвентаря) values (...
должен работать в случае когда в таблице 3 поля? А исключение возникает из-за повторяющегося значения индекса. Так что не вычисляется оно там само.


← →
Palladin ©   (2009-07-29 16:28) [6]


> Так что не вычисляется оно там само.

угу, то есть толпа моих приложений на самом деле не работают, притворяются просто...

у тебя поди Код_типа_инвентаря уникальным индексом стоит...


← →
xyz   (2009-07-29 16:31) [7]

Да нет, это числовое поле, но оно не ключевое. К тому же множество предыдущих записей с одинаковых кодом типа внеслись нормально.


← →
Anatoly Podgoretsky ©   (2009-07-29 16:36) [8]

> xyz  (29.07.2009 16:26:05)  [5]

Когда больше или равно двум


← →
Anatoly Podgoretsky ©   (2009-07-29 16:37) [9]

Тогда это Наименование или комбинация


← →
xyz   (2009-07-29 16:39) [10]

А наименованию ему разрешено повторяться вроде, оно же не ключевое


← →
xyz   (2009-07-29 16:49) [11]

можно ли связывать таблицы по полю счетчик?


← →
Anatoly Podgoretsky ©   (2009-07-29 16:51) [12]

> xyz  (29.07.2009 16:49:11)  [11]

Можно


← →
xyz   (2009-07-29 16:55) [13]

каскадное обновление связанных полей сделать не получается в access"е. Пишет: "Недопустимое описание поля код "инвентаря" при определении индекса или связи".
А запрос не делался потому что сам access переделал потом поле обратно в числовое. Сказал что там со связями что-то не так.


← →
Сергей М. ©   (2009-07-29 17:02) [14]


> xyz   (29.07.09 16:55) [13]


Приведи подробные структуры таблиц, участвующих в связи, и укажи какие их поля в каком отношении ты пытаешься связать ..


← →
xyz   (2009-07-29 17:12) [15]

2 таблицы: "Имущество" и "Инвентарь".

поля таблицы "Имущество":
номер вагона (ключевое, тип: числовой)
код инвентаря (счетчик. индексированное, допускаются совпадения)
количество (числовой)

поля таблицы "Инвентарь":
наименование (текстовый)
код_типа_инвентаря (числовой)
код_инвентаря (ключевое, счетчик, совпадения не допускаются)

Связываю оба кода инвентаря. Обеспечение целостности связи работает, каскадное обновление - нет.


← →
Сергей М. ©   (2009-07-29 17:23) [16]


> код инвентаря (счетчик. индексированное, допускаются совпадения)


С какого перепугу "допускаются совпадения", если счетчик на то и существует, чтобы создании новой записи это поле  автоматически получало новое уникальное значение ?

В каком отношении ты пытаешься связать таблицы ?


← →
xyz   (2009-07-29 17:36) [17]

Отношение - это вы имеете в виду 1:1 или 1:N? Но там оно тоже вроде автоматом определяется.
Поставил в "имуществе" тип числовой, каскадное обновление установилось.
Теперь при попытке удаления сразу нескольких записей возникает еще одно исключение: "недостаточные или неполные сведения о ключевом поле. Обновление влияет на слишком большое число строк". Это я там просто парочку одинаковых наименований из "инвентаря" попытался удалить. И кстати удалить только одно не получится, в DBLookUpListBox они как-то сразу по-многу выделяются (в смысле те, которые с одинаковым наименованием).


← →
Сергей М. ©   (2009-07-29 17:46) [18]


> там оно тоже вроде автоматом определяется


в 1-ю очередь оно не "там" должно определяться, а в твоей голове)

Какое смысловое отношение Инвентарь имеет к Имуществу ?

Какое, скажем, отношение Лопата (как инвенарь с кодом 1) имеет отношение к Яхте (как имуществу с кодом 1) ?

Поясни ..


← →
xyz   (2009-07-29 17:51) [19]

Все, решил проблему. В ADODataSet надо было выборку делать сразу по всем полям. А у меня было по одному. Из-за этого в DBLookUpListBox пришлось поставить наименование, а надо было настоящее ключевое поле.


← →
xyz   (2009-07-29 17:54) [20]


> в 1-ю очередь оно не "там" должно определяться, а в твоей
> голове)
>
> Какое смысловое отношение Инвентарь имеет к Имуществу ?

В таблице "имущество" совпадения конечно допускаются, если вы об этом. Т. к. у 2-х разных вагонов вполне может быть один инвентарь, а значит и код будет одинаковый, и будет повторяться для разных вагонов в этой таблице.


← →
Сергей М. ©   (2009-07-29 17:59) [21]

поля таблицы "Имущество":
номер вагона (ключевое, тип: числовой)
код инвентаря (счетчик. индексированное, допускаются совпадения)
количество (числовой)

Почему счетчик-то ?

Должно быть так:

поля главной справочной таблицы "Инвентарь":
код_инвентаря (ключевое, счетчик, совпадения не допускаются)
наименование (текстовый)
код_типа_инвентаря (числовой)

поля подчиненной справочной таблицы "Имущество":
номер вагона (ключевое, тип: числовой)
код инвентаря (индексированное, допускаются совпадения)
количество (числовой)

Таблица "Имущество" связывается с таблицей "Инвентарь" по полю "Код_инвентаря" в отношении "Многие к Одному", поскольку во многих разных вагонах присутствует один и тот же инвентарь, например, лопата)


← →
xyz   (2009-07-29 18:06) [22]

Да сейчас-то я уже поменял на числовой. На вид вроде все нормально. Записи добавляются, удаляются.
Но вот такой вопрос: по мере использования таблицы пользователи то добавляют записи, то удаляют, то снова добавляют, удаляют и т. д. А счетчик-то в таблице (его значение) растет. Я заметил, что значение счетчика делается на 1 больше самого большого уже существующего числа в этом поле. Нарример, сделать 3 записи, удалить вторую, добавить запись, а счетчик у нее будет 4, а не 2. Так ведь и переполнение может произойти после длительного времени использования программы?


← →
Amoeba ©   (2009-07-29 19:27) [23]


> Так ведь и переполнение может произойти после длительного
> времени использования программы?

Не успеет переполниться. Максимальное значение счетчика превышает 2 миллиарда. Раньше база потеряет свою актуальность.


← →
Сергей М. ©   (2009-07-29 19:36) [24]


> сейчас-то я уже поменял на числовой

Ты очумел ?
Где он у тебя был НЕчисловой ?


← →
Dennis I. Komarov ©   (2009-07-30 10:04) [25]


> а счетчик у нее будет 4, а не 2.

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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.51 MB
Время: 0.011 c
2-1248564636
xyz
2009-07-26 03:30
2009.10.04
занесение записи в БД ADO


2-1248638233
Б
2009-07-26 23:57
2009.10.04
Ошибка в GetBitmapDimensionEx.


2-1248445454
Zalm
2009-07-24 18:24
2009.10.04
Fatal error в Delphi 7


15-1249310183
pasha_golub
2009-08-03 18:36
2009.10.04
Вызов Free (Destroy) внутри метода объекта


15-1249072202
Юрий
2009-08-01 00:30
2009.10.04
С днем рождения ! 1 августа 2009 суббота




   Наверх