![]() |
Error Insert SQL
Saludos colegas del club hoy les vengo con una inquietud que he intentado resolverla casi todo el dia, :mad::mad:, el problema me tiene sacando humos de la cabeza ya. Tenga una tabla creada en sql server 2014 llamada FacturaTotal la cual tiene 5 campos ID, Cantidad, Subtotales, ITBIS, Total. De estos ID y Cantidad son de tipo int mientras que los demas son de tipo numerico, en el programa que estoy desarrollando tengo unos edits que calculan estos valores por lo cual los paso a variables de tipo string para introducirlos en el adoquery del cual tengo el siguiente codigo:
Este código se ejecuta al presionar un boton, el error me lo da después del ExecSQL; Me dice: 'There are fewer columns in the INSERT Statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.' Lo cual no lo pillo si especifico el numero de datos que introduzco y solo pongo esos valores por que me ha salido esto? Además cuando lo intente con QuotedStr me dio error que no se puede convertir de tipo varchar a numeric, claro está pero no me salia este No entiendo :( |
En estos casos, lo mejor es que examines el valor de SQL.Text para ver cómo queda formado. Mi hipótesis es que uno de los valores incluye una coma decimal que el sql lo interpreta como un separador de valores.
LineComent Saludos |
Cita:
En estos casos lo mejor es utilizar parámetros:
De esta forma te olvidas de los separadores, de las comas,... Ya se encargará el sistema de colocar cada cosa con su formato para que funcione. NOTA: Te he puesto el código de memoria. |
Gracias por las rápidas respuestas chicos!! En efecto al parecer ya me acepta los valores pero ahora hay un problema, me da el siguiente error ADOTotal:CommandText does not return a result set. . Viendo otros hilos del foro intente sustituyendo el ExecSQL; por Open; o poniendo al inicio Active := False; y al final Active := True; pero no me funciona! Además pasa algo raro, al final de darle click se debe mostrar en un fast report este me lo muestra pero vacio y despues me tira el error. Alguna idea ?.? :(
|
Hola
Cita:
Saludos |
Tu sentencia SQL es una sentencia de insercion; por lo general, no devuelven un DataSet como resultado.
Suelen devolver la cantidad de registros afectados (esto dejando de lado clausulas o funciones especificas que si permiten devolver DataSets, como la RETURNING de Firebird) Para ejecutar un INSERT, DELETE o UPDATE se suele usar ExecSQL (o similares, varia el nombre del metodo de acuerdo a la suite de componentes) Para ejecutar un SELECT se emplea Open Si queres enviarle datos a un informe deberias estar empleando SELECT y no un INSERT |
Buenas y para no caer en trampas tontas te recomiendo que limpies el SQL, para el caso que quede algun residuo de alguna consulta anterior:
|
Muchas gracias a todos colegas del club!! Ya solucione el error (claro esta gracias a su ayuda xd), el problema me lo daba al final, que después de esa linea de código lo mostrara en un reporte del FastReport, como solo insertaba los resultados y no los llamaba después por medio de un SELECT no me mostraba los resultados si no que me mostraba en blanco el FastReport :D:D. Mi error al no mostrar esa última linea de código en un principio. De nuevo muchas gracias colegas por sus rápidas respuestas ya que también tendré más cuidado de ahora en adelante!!
|
La franja horaria es GMT +2. Ahora son las 02:59:42. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi