Ver Mensaje Individual
  #2  
Antiguo 26-06-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.737
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
En tu código ejecutas el query de aux. En su lugar deberías abrirlo.
Si lo ejecutas no obtendrás resultados. Esta instrucción está pensada para ejecutar cosas como un insert/update/delete que no devuelvan nada.
No recuerdo si la instrucción es Open u OpenSQL.
Código Delphi [-]
procedure TFerreteria.insercliente(cliente:Tcliente);
begin
    dm:=Tconsultas.Create(nil);
    dm.SQLQuery2.Close;

    dm.SQLQuery2.SQL.Add ('insert into clientes(idpersona,cuit,cuil) values (:idpersona,:cuit,:cuil);');
    with dm.SQLQuery2 do
    begin
    dm.aux.SQL.Add('select max(idpersona) from persona as idp;');

     // Aquí debes abrir el dataset.
    dm.aux.Open;
      
      ParamByName('idpersona').Value:=dm.aux.ParamByName('idp').AsInteger;
      ParamByName('cuit').Value:=cliente.cuit;
      ParamByName('cuil').Value:=cliente.cuil;
    end;
    dm.SQLQuery2.ExecSQL();
    dm.SQLQuery2.Close;
end;

De todos modos yo organizaría un poco mejor el código y creo además que te falta liberar el objeto creado (Tconsultas).
Si me permites:
Código Delphi [-]
procedure TFerreteria.insercliente(cliente:Tcliente);
begin
    dm := Tconsultas.Create(nil);
    try
        // Obtengo el Id de la persona
        dm.aux.SQL.Add('select max(idpersona) from persona as idp;');
        // Aquí debes abrir el dataset.
        dm.aux.Open;

        // Inserto el cliente
        with dm.SQLQuery2 do
        begin
            Close;
            SQL.Add ('insert into clientes(idpersona,cuit,cuil) values (:idpersona,:cuit,:cuil);');
            ParamByName('idpersona').Value:=dm.aux.ParamByName('idp').AsInteger;
            ParamByName('cuit').Value:=cliente.cuit;
            ParamByName('cuil').Value:=cliente.cuil;
            ExecSQL();
            Close;
        end;
        dm.aux.Close;
    finally
        // Creo que aquí deberías liberar el objeto TConsultas
        dm.Free;
    end;
end;

Última edición por duilioisola fecha: 26-06-2014 a las 18:17:58.
Responder Con Cita