![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ключевое поле-счетчик
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]
> Так что не вычисляется оно там само.
угу, то есть толпа моих приложений на самом деле не работают, притворяются просто...
у тебя поди Код_типа_инвентаря уникальным индексом стоит...