Здравствуйте!
FireBird 2.1 , работаю ч/з DataSet в Delphi7
В программа 12 таблиц, все они о объединены между собой ч/з Join. У каждой таблицы свой генератор идентификационного номера записи. Когда сохраняем данные небходимо запомнить номер, который присваивает генератор записи.
И собственно вопрос!!!
Как ЭТО сделать?
Я это делаю так...
// Таблица PATIENT
DM_ORND.dset_PATIENT.Insert;
DM_ORND.dset_PATIENT.FieldByName('PAT_OLD_ID').AsInteger:=100000 ;
DM_ORND.dset_PATIENT.FieldByName('PAT_OLD_LN').AsString:=mePAT_reg.Text ;
DM_ORND.dset_PATIENT.FieldByName('PAT_OLD_FN').AsString:=mePAT_FN_reg.Text;
DM_ORND.dset_PATIENT.FieldByName('PAT_OLD_MN').AsString:=mePAT_MN_reg.Text;
DM_ORND.dset_PATIENT.FieldByName('PAT_OLD_BD').AsDateTime :=dtpPAT_BD_reg.Date ;
DM_ORND.dset_PATIENT.FieldByName('PAT_OLD_SEX_ID').AsInteger:=lcbSex_reg.KeyValue;
DM_ORND.dset_PATIENT.FieldByName('SEX_OLD_ID').AsInteger:=1 ;
DM_ORND.dset_PATIENT.Post;
// запоминание номера PATIENT
p:=DM_ORND.dset_PATIENT.FieldByName('PAT_OLD_ID').AsString;
// Таблица APPEAL
DM_ORND.dset_APPEAL.Insert;
DM_ORND.dset_APPEAL.FieldByName('APP_OLD_ID').AsInteger:=10000;
DM_ORND.dset_APPEAL.FieldByName('PAT_OLD_ID').AsInteger:=1 ;
DM_ORND.dset_APPEAL.FieldByName('TOT_OLD_ID').AsInteger:=1;
DM_ORND.dset_APPEAL.FieldByName('BRA_OLD_ID').AsInteger:=1;
DM_ORND.dset_APPEAL.FieldByName('APP_OLD_BRA_ID').AsInteger:=lcbBRA_reg.KeyValue;
DM_ORND.dset_APPEAL.FieldByName('APP_OLD_TOT_ID').AsInteger:=lcsTOT_reg.KeyValue;
DM_ORND.dset_APPEAL.FieldByName('APP_OLD_PAT_ID').AsString:=p ;
DM_ORND.dset_APPEAL.Post;
// запоминание номера APPEAL
a:=DM_ORND.dset_APPEAL.FieldByName('APP_OLD_ID').AsString ;
// Таблица RECEPTION
DM_ORND.dset_RECEPTION.Insert;
DM_ORND.dset_RECEPTION.FieldByName('REC_OLD_ID').AsInteger:=10000;
DM_ORND.dset_RECEPTION.FieldByName('BRA_OLD_ID').AsInteger:=10000;
DM_ORND.dset_RECEPTION.FieldByName('PAT_OLD_ID').AsInteger:=10000;
DM_ORND.dset_RECEPTION.FieldByName('SEX_OLD_ID').AsInteger:=10000;
DM_ORND.dset_RECEPTION.FieldByName('TOT_OLD_ID').AsInteger:=10000;
DM_ORND.dset_RECEPTION.FieldByName('REC_OLD_APP_ID').AsString:=a;
DM_ORND.dset_RECEPTION.FieldByName('APP_OLD_ID').AsInteger:=1;
DM_ORND.dset_RECEPTION.FieldByName('REC_OLD_DATE').AsDateTime:=dtpREC_reg.Date;
DM_ORND.dset_RECEPTION.FieldByName('REC_OLD_DOC_ID').AsInteger:=lcbDOC_reg.KeyValue;
DM_ORND.dset_RECEPTION.FieldByName('DOC_OLD_ID').AsInteger:=1;
DM_ORND.dset_RECEPTION.FieldByName('REC_OLD_ANA_ID').AsInteger:=lcbANA_reg.KeyValue;
DM_ORND.dset_RECEPTION.FieldByName('ANA_OLD_ID').AsInteger:=1;
DM_ORND.dset_RECEPTION.FieldByName('CON_OLD_ID').AsInteger:=1;
DM_ORND.dset_RECEPTION.FieldByName('REC_OLD_CON_ID').AsInteger:=1;
DM_ORND.dset_RECEPTION.FieldByName('REC_OLD_DES').AsString:=mDES_reg.Text ;
DM_ORND.dset_RECEPTION.FieldByName('REC_OLD_ZAKL').AsString:=mZAKL_reg.Text ;
DM_ORND.dset_RECEPTION.Post;
При таком варианте запоминаются внесенные номера, а не те, что сгенерированые, т.е.:
DM_ORND.dset_PATIENT.FieldByName('PAT_OLD_ID').AsInteger:=100000 ;
DM_ORND.dset_APPEAL.FieldByName('APP_OLD_ID').AsInteger:=10000;
А далаю имеено так, потому что по-другому не работает.
Мы присваиваем номер, а после сохранение ганератор заменяет его на свой сгенерированный. А как запомнить этот сгеннерированный номер, я не знаю.
Может кто-нибудь знает?