Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.038 c
3-1118163412
Julia
2005-06-07 20:56
2005.07.18
Печать отчетов


11-1103222043
DmiSb
2004-12-16 21:34
2005.07.18
ImageList с другой формы


14-1119373720
ANB
2005-06-21 21:08
2005.07.18
Есть ли инсталлятор, позволяющий работать с Oracle ?


14-1119606881
хм
2005-06-24 13:54
2005.07.18
486 корпус


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