Logre hacerlo con componentes SQLQuery. Si quieren dejen su opinion.
Código Delphi
[-]procedure Tferreteria.insercliente(cliente:Tcliente;persona:Tpersona;telefono:Ttelefono);
begin
dm := Tconsultas.Create(nil);
with dm.qpersona do
begin
Close;
SQL.Clear;
SQL.Add('insert into persona (nombreyape, domicilio) values (:nombreyape, :domicilio);');
ParamByName('nombreyape').AsString := persona.nombreyape;
ParamByName('domicilio').AsString := persona.domicilio;
ExecSQL();
end;
with dm.qcliente do
begin
Close;
SQL.Clear;
SQL.Add('insert into clientes (idpersona, cuit, cuil) values (last_insert_id(), :cuit, :cuil);');
ParamByName('cuit').AsInteger := cliente.cuit;
ParamByName('cuil').AsInteger := cliente.cuil;
ExecSQL();
end;
with dm.qtelefono do
begin
Close;
SQL.Clear;
SQL.Add('insert into telefono (idtipotel, numero)values (:idtipotel,:numero);');
ParamByName('idtipotel').AsInteger := telefono.tipo;
ParamByName('numero').AsInteger := telefono.numero;
ExecSQL();
end;
with dm.aux do
begin
Close;
SQL.Clear;
SQL.Add('select last_insert_id() from persona;');
end;
with dm.aux2 do
begin
Close;
SQL.Clear;
SQL.Add('select last_insert_id() from telefono;');
end;
with dm.qpt do
begin
Close;
SQL.Clear;
SQL.Add('insert into personatel (idpersona,idtelefono) values (:idp,:idt);');
ParamByName('idp').AsInteger:=dm.aux.ExecSQL();
ParamByName('idt').AsInteger:=dm.aux2.ExecSQL();
ExecSQL();
end;
end;