Показать сообщение отдельно
  #21  
Старый 19.09.2013, 13:41
sAVe sAVe вне форума
Прохожий
 
Регистрация: 20.06.2013
Сообщения: 40
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Внесённые изменения помечены коментами

Код:
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;
Ответить с цитированием