Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

ADO - Access - Как получить значение сгенеренного ID - counter   Найти похожие ветки 

 
ike   (2005-06-02 11:22) [0]

Есть база Access. Вставляю новую запись в таблицу (TADOQuery), в которой первичный ключ с типом Counter. После чего мне надо вставить ещё записи в таблицы, где этот ключ тоже входит в состав первичного ключа. Нужно получить его значение и втавить соответствующие записи в эти таблицы. Сделать нужно в одной транзакции. В SQL сереверах это делается просто через хранимую процедуру, а как это можно в Access организовать?


 
msguns ©   (2005-06-02 11:36) [1]

Для акцесса (однопользовалка) можно использовать запрос
SELECT MAX(ID)+1 FROM TABLE, а затем
..
Open;

INSERT INTO TABLE ID,... VALUES (:ID,...)

ADOCommand1.ParamByName("ID").Value := ADOQueryGetID.Fields[0].AsInteger;


 
ike   (2005-06-02 12:11) [2]

Если я правильно понял, то мне вначале нужно получить значение будующего ID (max(id)+1). А каждую операцию INSERT с этим ID я должен в отдельных Query/Command etc выполнять?


 
msguns ©   (2005-06-02 12:24) [3]

выборка ID производится один раз для каждой вставляющей в Мастер-таблицу операции. Это же значение используется при вставках всех записей всех Detail-таблиц.
Однако, если использовать связь Master-Detail (DetailQuery.DataSource := MasterDataSource), то при вставках в деталы заполнение мастер-ключа будет производится автоматически.


 
ЮЮ ©   (2005-06-02 12:40) [4]

>msguns ©   (02.06.05 11:36) [1]

При таком подходе проще избавиться от Counter-а, заменив на Integer.

Кстати не обязательно  MAX(ID)+1 должен дать правильное значение. А что если запись была добавлена, а потом удалена. Это только Access XP при очиске таблицы и насильственной вставки записи с меньшим Id сбрасывает счетчик (такая метода дана даже в Неlp-e, уж-ж-ж-ас), а, например, в Access 2000, счетчик продолжает в этом случае благополучно нарастать


 
Sergey13 ©   (2005-06-02 12:45) [5]

2ike   (02.06.05 11:22)
>В SQL сереверах это делается просто
И что людей заставляет ими не пользоваться? А потом еще пытаться сделать что либо "в одной транзакции".
8-)


 
Anatoly Podgoretsky ©   (2005-06-02 15:00) [6]

@@IDENTITY



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

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.041 c
1-1119964706
Radgar
2005-06-28 17:18
2005.07.18
OnMouseDown в массиве Timage


4-1115745713
andystavropol
2005-05-10 21:21
2005.07.18
Частота обновления экрана


1-1119671688
Starcom
2005-06-25 07:54
2005.07.18
ProgressBar как к нему привязать выполнение ... процесса?


4-1116683520
BoAlSe
2005-05-21 17:52
2005.07.18
Список всех видеорежимов...


14-1118924278
DeMoN-777
2005-06-16 16:17
2005.07.18
Странные письма





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский