Форум: "Начинающим";
Текущий архив: 2009.10.04;
Скачать: [xml.tar.bz2];
Внизключевое поле-счетчик Найти похожие ветки
← →
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 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.10.04;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.006 c