|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
||||
|
||||
Цитата:
Код:
ADOQuery.close; ADOQuery.sql.text:='INSERT INTO table (bla-bla, bla) VALUES (' + QuotedStr(memo1.Text) + ', ' + QuotedStr(edit1.Text) + ')'; ADOQuery.ExecSQL; ADOQuery.close; ADOQuery.sql.text:='UPDATE table SET bla = "№-" WHERE id = LAST_INSERT_ID()'; ADOQuery.ExecSQL; это пример, короче, вставка в базу и обновление на основе LAST_INSERT_ID Я за здоровый экстрим! Спасибо за "спасибо") |
Этот пользователь сказал Спасибо Mrak за это полезное сообщение: | ||
sAVe (18.09.2013)
|
#17
|
||||
|
||||
Цитата:
1. нет, не понятно 2. ну так твое Cl_id должно же как-то сначала сформироваться. а для этого нужно выполнить (ExecSQL) 1й запрос. 3. да. firebird такое умеет делать. примерно так: Код:
INSERT INTO audit (data) VALUES ('-----') RETURNING recordid Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение: | ||
sAVe (18.09.2013)
|
#18
|
|||
|
|||
Всем спасибо, но не то...
Вот у меня что получилось, но всё равно так как надо не работает... Здесь почему-то всегда 0 получается: Код:
Cl_idgen:=DataModule1.IBDataset1.FieldByName('id').AsInteger; вот весь текст: Код:
procedure TNew_Person.Button1Click(Sender: TObject); var Cl_idgen: integer; begin with DataModule1.IBDataSet1 do begin SelectSQL.Text:='select gen_id(GEN_CLIENT_ID,1) as id from RDB$DATABASE'; Transaction.StartTransaction; Open; Transaction.Commit; Transaction.Active:=false; end; Cl_idgen:=DataModule1.IBDataset1.FieldByName('id').AsInteger; // ВОТ ЗДЕСЬ 0 ПОЛУЧАЕТСЯ ВСЕГДА with DataModule1.IBQuery9 do begin SQL.Text:='insert into CLIENT (CL_ID, CL_IS_VIP, CL_CLS_ID, CL_CREDIT_NUM) values (:CL_ID, :CL_IS_VIP, :CL_CLS_ID, :CL_CREDIT_NUM)'; ParamByName('CL_ID').AsInteger:=Cl_idgen; ParamByName('CL_IS_VIP').AsInteger:=0; ParamByName('CL_CLS_ID').AsInteger:=0; ParamByName('CL_CREDIT_NUM').AsInteger:=0; Transaction.StartTransaction; ExecSQL; Transaction.Commit; Transaction.Active:=false; end; with DataModule1.IBQuery7 do begin SQL.Text:='insert into Person(P_ID, P_NAME, P_BIRTHDATE, P_CL_ID) values (:P_ID, :P_NAME, :P_BIRTHDATE, :P_CL_ID)'; ParamByName('P_NAME').AsString:=Edit1.Text; ParamByName('P_BIRTHDATE').AsString:=Edit2.Text; ParamByName('P_CL_ID').AsInteger:=Cl_idgen; Transaction.StartTransaction; ExecSQL; Transaction.Commit; Transaction.Active:=false; |
#19
|
|||
|
|||
Всем спасибо!
Всё получилось, коллега на работе помог. Если интересно, могу рассказать в чём был прикол |
#20
|
||||
|
||||
Рассказывай.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#21
|
|||
|
|||
Внесённые изменения помечены коментами
Код:
procedure TNew_Person.Button1Click(Sender: TObject); var Cl_idgen: integer; begin with DataModule1.IBDataSet1 do begin SelectSQL.Text:='select gen_id(GEN_CLIENT_ID,1) as id from RDB$DATABASE'; Transaction.StartTransaction; Open; DataModule1.IBDataSet1.First; // а вот смысл этой строчки я пока сам не понял... Cl_idgen:=DataModule1.IBDataset1.FieldByName('id').AsInteger; // основная фишка в том что нужно было это сделать, до комита Transaction.Commit; Transaction.Active:=false; end; with DataModule1.IBQuery9 do begin SQL.Text:='insert into CLIENT (CL_ID, CL_IS_VIP, CL_CLS_ID, CL_CREDIT_NUM) values (:CL_ID, :CL_IS_VIP, :CL_CLS_ID, :CL_CREDIT_NUM)'; ParamByName('CL_ID').AsInteger:=Cl_idgen; ParamByName('CL_IS_VIP').AsInteger:=0; ParamByName('CL_CLS_ID').AsInteger:=0; ParamByName('CL_CREDIT_NUM').AsInteger:=0; Transaction.StartTransaction; ExecSQL; Transaction.Commit; Transaction.Active:=false; end; with DataModule1.IBQuery7 do begin SQL.Text:='insert into Person(P_ID, P_NAME, P_BIRTHDATE, P_CL_ID) values (:P_ID, :P_NAME, :P_BIRTHDATE, :P_CL_ID)'; ParamByName('P_NAME').AsString:=Edit1.Text; ParamByName('P_BIRTHDATE').AsString:=Edit2.Text; ParamByName('P_CL_ID').AsInteger:=Cl_idgen; Transaction.StartTransaction; ExecSQL; Transaction.Commit; Transaction.Active:=false; |
#22
|
||||
|
||||
DataModule1.IBDataSet1.First; // а вот смысл этой строчки я пока сам не понял...
Это переход в самое начало датасета, т.е. индекс ставится на первую запись. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#23
|
|||
|
|||
это я понимал, но только сейчас понял зачем это сделано было
|