|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Сохранение значения поля автоинкремента
Здравствуйте.
Есть 2 таблицы - в первую мы записываем результаты запроса, и первый столбец column тут primary, увеличивается автоматически. Во второй таблице поле column является значением другого столбца, т.е. если в первой таблице значения полей 1 100 100 2 200 200 и первsй столбец column увеличивается сам, то во второй таблице будет так 300 300 1 400 400 2 и т.д. Сам я как сделал - выполняю запрос, записываю значения в первую таблицу Код:
with ADOQuery do SQL.Clear(); SQL.Text:='INSERT INTO table1 ([col1],[col2],) VALUES (:Param1,:Param2)'; Parameters.ParamByName('Param1').Value:= 100; Parameters.ParamByName('Param2').Value:=200; ExecSQL(); затем сразу же произвожу по ним поиск по искомому столбцу, а уж затем записываю это значение во вторую таблицу Код:
SQL.Clear(); SQL.Text:='SELECT [ID] FROM table1 WHERE [col1]=:Param1,Col2]=:Param2,'; Parameters.ParamByName('Param1').Value:=100; Parameters.ParamByName('Param2').Value:=200; ExecSQL(); Open; tmp:=Fields[0].asInteger; SQL.Clear(); SQL.Text:='INSERT INTO table2 ([ID]) VALUES (:Param1)'; Parameters.ParamByName('Param1').Value:=tmp; Есть какое-либо более изящное решение?) Последний раз редактировалось lohmatiy, 10.05.2010 в 21:44. |
#2
|
|||
|
|||
Есть и много.
Какая БД у тебя? |
#3
|
|||
|
|||
БД Access через ADO
|
#4
|
||||
|
||||
зачем ты делаешь сразу ExecSQL() а потом Open? если мне не изменяет память то ExecSQL()- при запросе который не возвращает данных, а open для запросов которые возвращают данные, т.е. для select-open для insert - execsql()
|
#5
|
|||
|
|||
Да эт мелочи, кусок кода скопировал просто
|
#6
|
||||
|
||||
что-то я не сильно понял что надо, т.е. надо получить с первой таблицы id и вписать во вторую? или что?
можно заменить два запроса одним: Код:
пример: insert into table2 (id) select id from table2 where param1 =100 and param2=200 |
#7
|
|||
|
|||
ну в общем да, можно, а хотелось бы сразу, при выполнении первого запроса ))
|