Senya_L, спасибо за совет. А где можно почитать про ГТТ? Релиз нотесы о нем упоминают очень вскользь, а с другими СУБД опыта у меня нет.
Граур Станислав,
Написал вот такую процедурку:
create or alter procedure NEW_PROCEDURE (
EMP_NAME varchar(30),
CERT_NAME varchar(30))
as
declare variable EMPID integer;
declare variable CID integer;
begin
select distinct cer.c_id from certificate cer
where cer.c_title=:cert_name into :cid;
select distinct emp.e_id from employee emp
where emp.name=:emp_name into :empid;
if (:cid is null and :empid is null) then
begin
insert into certificate(c_title) values (:cert_name);
insert into employee(name) values (:emp_name);
insert into empcert(certificate_c_id, employee_e_id)
values (gen_id(gen_certificate_c_id, 0), gen_id(gen_employee_e_id, 0));
end
else
if (:cid is null and :empid is not null) then
begin
insert into certificate(c_title) values (:cert_name);
insert into empcert(certificate_c_id, employee_e_id)
values (gen_id(gen_certificate_c_id, 0),:empid);
end
else
if (:cid is not null and :empid is null) then
begin
insert into employee(name) values (:emp_name);
insert into empcert(certificate_c_id, employee_e_id)
values (:cid,gen_id(gen_employee_e_id, 0));
end
else
if (:cid is not null and :empid is not null) then
insert into empcert(certificate_c_id, employee_e_id)
values (:cid, :empid);
end^
При ручной вставке значений имен людей и сертификатов в Эксперте - работает замечательно... Но при вызове процедуры из приложения получаю кучу пустых строк между строками, сгенерированными правильно как в справочниках, так и в табле связей. Код процедуры в Делфи:
begin
with ADOQuery1 do begin
First;
while not ADOQuery1.Eof do
begin
DSCert.Insert;
DSBoth.Insert;
DSEmpl.Insert;
pFIBStoredProc1.ParamByName('CERT_NAME').AsString:=ADOQuery1.Fields.Fields[1].AsString;
pFIBStoredProc1.ParamByName('EMP_NAME').Asstring:=ADOQuery1.Fields.Fields[0].AsString;
pfibstoredproc1.ExecProc;
DSCert.Post;
DSBoth.Post;
DSEmpl.Post;
DSCert.FullRefresh;
DSBoth.FullRefresh;
DSEmpl.FullRefresh;
Next;
end;
end;
end;
В чем может быть проблема?