Ver Mensaje Individual
  #1  
Antiguo 02-07-2020
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Reputación: 19
identsoft Va por buen camino
Error al insertar en bd con parametros

Un saludo para todos.
Al insertar datos en una tabla con sql y parámetros me da el error :'Assertion failure (c:\user\code\....\firebird.sql.pas, line 1004)'.
Lo que hago es :
1.-leer un fichero de texto plano con separador de campos('|').
2.-Separar cada campo para asignárselo a cada parámetro
3.- Insertarlo en la base de datos.

Código Delphi [-]
          Readln(f,slinea);
          SQLInsertar.Close;
          SQLInsertar.SQL.Clear;
          SQLInsertar.SQL.Text := 'INSERT INTO AGENTES (AGENTE,NOM_AGENTE,DIR_AGENTE,POB_AGENTE,' +
               'CPOS_AGENTE,TELEFONO1,FAX,PROVIN,OBSERVACIONES,POR_RETE,POR_COMIS, ' +
               'CTA_SUPLIDOS,CTA_CLIENTE)' +
               ' VALUES (:IAGENTE,:INOM_AGENTE,:IDIR_AGENTE,:IPOB_AGENTE, ' +
               ':ICPOS_AGENTE,:ITELEFONO1,:IFAX,:IPROVIN,:IOBSERVAC,:IPOR_RETE,:IPOR_COMIS, ' +
               ':ICTA_SUPLIDOS,:ICTA_CLIENTE)';
          SQLInsertar.ParamByName('IAGENTE').AsInteger := StrToInt(GetToken(slinea,'|',1));
          SQLInsertar.ParamByName('INOM_AGENTE').AsString := StringReplace(getToken(slinea,'|',2),',',' ',[rfReplaceAll]);
          SQLInsertar.ParamByName('IDIR_AGENTE').AsString := StringReplace(getToken(slinea,'|',3),',',' ',[rfReplaceAll]);
          SQLInsertar.ParamByName('IPOB_AGENTE').AsString := StringReplace(getToken(slinea,'|',4),',',' ',[rfReplaceAll]);
          SQLInsertar.ParamByName('ICPOS_AGENTE').AsInteger := StrToInt(getToken(slinea,'|',5));
          SQLInsertar.ParamByName('ITELEFONO1').AsString := getToken(slinea,'|',6);
          SQLInsertar.ParamByName('IFAX').AsString := getToken(slinea,'|',7);
          SQLInsertar.ParamByName('IPROVIN').AsInteger := StrToInt(getToken(slinea,'|',8));
          SQLInsertar.ParamByName('IOBSERVAC').AsString := getToken(slinea,'|',9);
          SQLInsertar.ParamByName('IPOR_RETE').AsFloat := StrToFloat(getToken(slinea,'|',10));
          SQLInsertar.ParamByName('IPOR_COMIS').AsFloat := StrToFloat(getToken(slinea,'|',11));
          SQLInsertar.ParamByName('ICTA_SUPLIDOS').AsString := getToken(slinea,'|',12);
          SQLInsertar.ParamByName('ICTA_CLIENTE').AsString := getToken(slinea,'|',13);
          SQLInsertar.ExecSQL;
          SQLInsertar.Close;
El error lo da al ejecutar la linea :SQLInserta.ExecSQL.

El tipo de parámetro (asinteger,..) es correcto( es decir coincide con el tipo de campo de la BD) y la separación de campos también lo hace bien.
GetToken es una función para separar campos.

Utilizo Dephi XE7 y Firebird 2.5 con Windows 10

Alguna idea?
Gracias por vuestro tiempo
Responder Con Cita