Главная страница
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.48 MB
Время: 0.069 c
14-1119339439
Ega23
2005-06-21 11:37
2005.07.18
С днём рождения! 21 июня


4-1117085498
Logo
2005-05-26 09:31
2005.07.18
нажатие клавиш в DOS приложении


1-1119909466
Контр
2005-06-28 01:57
2005.07.18
Почему могут не срабатывать сообщеня OnMouseEnter и OnMouseLeave?


9-1112702530
Marl
2005-04-05 16:02
2005.07.18
PowerTimer


14-1118658811
Sergey Masloff
2005-06-13 14:33
2005.07.18
4 диска с собой на необитаемый остров ;-)