FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. 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 |
#2
|
||||
|
||||
¿Con qué componentes estás trabajando?
¿No hay más info. del error? ¿Si intentas lanzar la misma consulta (sustituyendo los parámetros) directamente sobre la Base de Datos (con el Administrador que tengas), te da algún error?
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
1.-Estoy trabajando con DBExpres (perdón por no decirlo antes).
2.- No hay más info del error. Eso es todo lo que sale. 3.- Si sustituyo los parámetros por sql directo, funciona bien. No da error:
Pero hasta ahora confiaba más en parámetros. |
#4
|
||||
|
||||
Falta información, suponemos que estás haciendo un bucle al leer de un fichero de texto.
Seguramente es una línea de ese fichero de texto que tiene datos que no son correctos. Además, si es así, o sea, es un bucle, por lógica, ese código no debería ser así, sino así:
|
#5
|
|||
|
|||
Tienes razón Casimiro y ya está arreglado, pero el error es otro: "Assertion failure (c:\user\code\....\firebird.sql.pas, line 1004).
Voy a seguir tu consejo y revisar el fichero por si viene alguna linea con datos no correctos. Gracias a ambos |
#6
|
||||
|
||||
Pon un simple contador y muéstralo para saber en qué línea ocurre, algo temporal, como esto:
Código:
iContador:=0; inicio bucle lee línea; inc(iContador); label1.caption := intTostr(icontador); application.processmessages; q.close; q.param... q.param... q.exec fin de bucle |
#7
|
||||
|
||||
Correcto, es lo recomendable. Siempre utilizar parámetros. El hacer la prueba sin ellos es simplemente para ver si la misma consulta directamente da algún problema y descartar así otros errores.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#8
|
||||
|
||||
Mi segundo offtopic del día:
1. ¿El archivo "firebird.sql.pas" es tuyo?... De ser así, ¿Cuál es la línea 1004? 2. ¿Tienes alguna garantía, o has validado anteriormente que "slinea" tenga 14 elementos? PD: A simple vista parecería mucho mas óptimo hacer un "SplitString" por única vez por línea, para luego tomar cada uno de los elementos del array.
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#9
|
|||
|
|||
Cita:
2.- Sí, está validado y con valores correctos, no viene ningún carácter extraño. Después de mucho probar conseguí saber donde está el error. El error me da en los campos POR_RETE y POR_COMIS. Si quito estos campos, el proceso de inserción lo hace correctamente. Estos campos están definidos en la BD. como campos decimal(5,2) En slinea vienen (ambos) con valor 0,0. El parámetro los defino como asFloat:
Y aquí es cuando se produce el error en el momento de insertar (sqlinsertar.execsql). No da ningún error cuando se hace la asignación. ¿Que es lo que estoy haciendo mal? Gracias a todos por vuestro tiempo Última edición por Casimiro Notevi fecha: 07-07-2020 a las 11:15:56. |
#10
|
||||
|
||||
Pues haz lo que te comenté para saber en qué línea del fichero de texto ocurre.
Seguramente esté vacío, tenga punto en lugar de coma, etc. |
#11
|
|||
|
|||
He revisado el texto. He reducido el fichero a una sola linea para probar.
No da error al leer o asignar a parámetros. La asignación la hace correctamente (comprobado paso a paso). A los parámetros de tipo float les asigna el valor 0 (cero). Pero sigue sigue dando el mismo error al hacer el execSql. No es que de error en una linea cualquiera, lo da ya en la primera. |
#12
|
||||
|
||||
¿El error firebirdsqlpas, o así?
Revisa el proyecto, a ver si has metido algo raro por ahí. |
#13
|
|||
|
|||
El proyecto, que yo sepa, no tiene nada raro.
Es un único formulario que tiene que leer de diferente ficheros de texto separados por '|' e insertarlos en diferentes tablas de una base de datos Firebird previamente creada. El error me da en los campos que hay definidos como decimal(xx,xx) y que intento cargarlos con parámetros tipo Float. Si quito de la instruccion Insert los campos que ,en la BD están definidos como decimal, el insert se ejecuta perfectamente. La conexión con la BD se hace a través de SQLConnection. El fichero ..\firebird.sql.pas line 1004 no se donde está ni que es. No tengo una carpeta c:\user\source\... Adjunto el mensaje de error |
#14
|
||||
|
||||
Pues qué es ese fichero, en algún sitio debe de estar, o es de algún componente que estás usando, porque el project\moon\core\source\firebird no es ningún directorio de firebird.
|
#15
|
|||
|
|||
Parece que se ha solucionado copiando los ficheros fbclient.dll y dbx4fb.dll a la carpeta del ejecutable.
Gracias a todos y siento el tiempo perdido con esta estupidez. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Error de Parametros IBX | Chaja | Conexión con bases de datos | 3 | 06-12-2010 04:12:04 |
Error En Los Parametros | DISAC_FIGO | Conexión con bases de datos | 1 | 13-01-2007 20:27:34 |
error en parametros | emeritos | Conexión con bases de datos | 9 | 11-12-2006 17:45:51 |
No puedo insertar datos (por parámetros) en una tabla - Zeos, Mysql | belen | MySQL | 2 | 13-10-2006 00:16:51 |
error en parametros con ado | redlyon13 | Conexión con bases de datos | 10 | 24-05-2004 01:32:22 |
|