第1行的列cuit的错误整数值''

时间:2014-06-26 16:55:50

标签: sql delphi

好吧,我有一个web服务,下一个代码在实现中:

procedure Tferreteria.inserpersona(persona:Tpersona);
begin
  //insertar persona
  dm:=Tconsultas.Create(nil);

   with dm.SQLQuery1 do
   begin
     Close;
     SQL.Add('insert into persona (nombreyape, domicilio)values (:nombreyape,:domicilio);');
     ParamByName('nombreyape').AsString:=persona.nombreyape;
     ParamByName('domicilio').AsString:=persona.domicilio;
     ExecSQL();
   end;
 end;

 procedure Tferreteria.insercliente(cliente:Tcliente);
 begin
   //insertar cliente

   with dm.SQLQuery1 do
   begin
     SQL.Clear;
     SQL.Add ('insert into clientes(idcliente,idpersona,cuit,cuil) values (null,(select     last_insert_id()),:cuit,:cuil);');

     ParamByName('cuit').AsInteger:=cliente.cuit;
     ParamByName('cuil').AsInteger:=cliente.cuil;
     ExecSQL();
   end;
 end;

正如您所看到的那样,将2个程序插入到表格角色和客户中。客户有一个列idpersona与参考人物

在按钮点击事件中,我有这段代码

with Persona do
begin
  nombreyape:=Form2.Edit1.Text;
  domicilio:=Form2.Edit8.Text;
  idlocalidad:=StrToInt(Form2.Edit3.Text);
end;

with Cliente do
begin
  cuit:=StrToInt(Edit6.Text);
  cuil:=StrToInt(Edit7.Text);
end;
//llamar al servicio
GetIferreteria.inserpersona(Persona);
GetIferreteria.insercliente(Cliente);

我得到了这个错误

  

错误的整数值' aaa'对于第1行的列cuit,

当aaa写在edit1中时,它不符合clientes.cuit,

感谢您的帮助

现在我还有其他问题:

我必须在clientes中插入idpersona,但我必须在telper中插入idpersona,telper是一个能够在电话和拥有这部电话的人之间建立关系的表格。

如果我与其他查询相同,则最后一个插入ID将是来自clientes(idcliente)的id,而不是idpersona。

我能做些什么来让idpersona代表每个我需要使用它的时刻,我的意思是每张桌子。

1 个答案:

答案 0 :(得分:1)

我强烈建议您重新编写此代码。特别是因为您正在使用last_insert_id()(您不需要select进行检索),所以您应该一起执行这两个语句,最好是在事务中(或者更好,在存储过程中)。 / p>

尝试更像这样的事情:

procedure Tferreteria.inserPersonaUnCliente(persona: Tpersona; cliente: Tcliente);
var
  Query: TSQLQuery;
  Conn: TSQLConnection;
  SQL: TStrings;
  Trans: TDBXTransaction;
begin
  dm := Tconsultas.Create(nil);
  Query := dm.SQLQuery1;
  Conn := Query.SQLConnection;
  SQL := Query.SQL;

  //insertar persona un cliente

  Query.Close;

  Trans := Conn.BeginTransaction;
  try
    SQL.BeginUpdate;
    try
      SQL.Clear;
      SQL.Add('insert into persona (nombreyape, domicilio) values (:nombreyape, :domicilio);';
      SQL.Add('insert into clientes(idcliente, idpersona, cuit, cuil) values (null, last_insert_id(), :cuit, :cuil);');
    finally
      SQL.EndUpdate;
    end;
    Query.ParamByName('nombreyape').AsString := persona.nombreyape;
    Query.ParamByName('domicilio').AsString := persona.domicilio;
    Query.ParamByName('cuit').AsInteger := cliente.cuit;
    Query.ParamByName('cuil').AsInteger := cliente.cuil;
    Query.ExecSQL;
    Conn.CommitFreeAndNil(Trans);
  except
    Conn.RollbackFreeAndNil(Trans);
    raise;
  end;
end;

with Persona do
begin
  nombreyape := Form2.Edit1.Text;
  domicilio := Form2.Edit8.Text;
  idlocalidad := StrToInt(Form2.Edit3.Text);
end;

with Cliente do
begin
  cuit := StrToInt(Edit6.Text);
  cuil := StrToInt(Edit7.Text);
end;

//llamar al servicio
GetIferreteria.inserPersonaUnCliente(Persona, Cliente);