Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.011 c
2-1249235282
redlord
2009-08-02 21:48
2009.10.04
почему Tacropdf открывает не все файлы


2-1248867537
xyz
2009-07-29 15:38
2009.10.04
ключевое поле-счетчик


15-1249167230
DillerXX
2009-08-02 02:53
2009.10.04
нужна электронная мартышка


15-1249495859
tomkat
2009-08-05 22:10
2009.10.04
Активация Delphi 6


4-1218778799
VitAngel
2008-08-15 09:39
2009.10.04
Администратор Домена





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский