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

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

ключевое поле-счетчик


Страницы:   1 2

xyz ©   (2009-07-29 15:38:00) 

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


Dennis I. Komarov   (2009-07-30 10:04:00) [1]


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

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


Сергей М.   (2009-07-29 19:36:00) [2]


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

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


Amoeba   (2009-07-29 19:27:00) [3]


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

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


xyz   (2009-07-29 18:06:00) [4]

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


Сергей М.   (2009-07-29 17:59:00) [5]

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

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

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

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

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

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


xyz   (2009-07-29 17:54:00) [6]


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

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


xyz   (2009-07-29 17:51:00) [7]

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


Сергей М.   (2009-07-29 17:46:00) [8]


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


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

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

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

Поясни ..


xyz   (2009-07-29 17:36:00) [9]

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


Сергей М.   (2009-07-29 17:23:00) [10]


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


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

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


xyz   (2009-07-29 17:12:00) [11]

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

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

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

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


Сергей М.   (2009-07-29 17:02:00) [12]


> xyz   (29.07.09 16:55) [13]


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


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

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


Anatoly Podgoretsky   (2009-07-29 16:51:00) [14]

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

Можно


xyz   (2009-07-29 16:49:00) [15]

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


xyz   (2009-07-29 16:39:00) [16]

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


Anatoly Podgoretsky   (2009-07-29 16:37:00) [17]

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


Anatoly Podgoretsky   (2009-07-29 16:36:00) [18]

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

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


xyz   (2009-07-29 16:31:00) [19]

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


Palladin   (2009-07-29 16:28:00) [20]


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

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

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


Страницы:   1 2

Наверх

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