Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Pocos parámetros. Se esperaba... (https://www.clubdelphi.com/foros/showthread.php?t=68240)

tubidericota 02-06-2010 19:15:26

Pocos parámetros. Se esperaba...
 
Buenas gente..
me encuentro con el siguiente problema y cualquier sugerencia o ayuda sera agradecida...
Estoy enviando (con ADOCommand) a una base access remota una instrucción Insert Into, hace la inserción pero luego devuelve el siguientes error de ODBC: 'Pocos parámetros. Se esperaba 9'.

Empezé con un error similar (sin que llegara a insertar), pero lo solucioné reemplazando (para los campos string) la doble comilla por el valor como resultado de la función quotedstr.

Les paso las instrucciones que arman el insert:

if length(adotable5.fieldbyname('memo').asstring) = 0 then mem:=' ' else mem:=(adotable5.fieldbyname('memo').asstring);
com.commandtext:='Insert Into MKB (nrokb, fecha, memo, r, k, g, anio, mes, dia) '+
'values ('+(adotable5.fieldbyname('nrokb').asstring) +
', '+quotedstr(adotable5.fieldbyname('fecha').asstring)+
', '+quotedstr(mem)+
', '+(adotable5.fieldbyname('r').asstring)+
', '+(adotable5.fieldbyname('k').asstring)+
', '+(adotable5.fieldbyname('g').asstring)+
', '+(adotable5.fieldbyname('anio').asstring)+
', '+(adotable5.fieldbyname('mes').asstring)+
', '+(adotable5.fieldbyname('dia').asstring)+')';

Neftali [Germán.Estévez] 03-06-2010 10:14:20

Lo más sencillo es que coloques un punto de ruptura en ese punto y revises la consulta que se está generando; O un MessageBox donde puedas ver el contenido de la SQL.

Con eso, seguro que es más fácil saber lo que está pasando; Por ejemplo, que alguno de los campos esté vacío, nulo o incorrecto y al consultarlo como string te devuelva vacío, con lo que la SQL llevaría 2 comas seguidas.

tubidericota 03-06-2010 13:20:36

Gracias por esponder Neftali.. ya superé esa instancia antes de postear, es más, antes de usar la Quotedstr guardé la instrucción que generaba (usando doble comilla) y la pegué en la interfaz de consulta de Access y funcionó bien... luego cuando encontré eso, y como digo en el post más arriba, hace la inserción, pero luego me devuelve ese error y detiene la ejecución..

Neftali [Germán.Estévez] 03-06-2010 13:40:52

Sigo pensando que si no pones la consulta aquí es difícil ayudarte.
Otra cosa, que una consulta funcione dentro de Access, no significa que necesariamente deba funcionar desde Delphi+ADO, ya que Microsoft Access tiene una sintaxis más amplia que la del SQL estandard (que es la que usas con ADO).

Uno de los problemas que más suele dar es son los delimitadores de los distintos tipos de campos, junto con los formatos de fecha.

tubidericota 03-06-2010 15:00:41

te paso la consulta, tal como la genera la instrucción de arriba:

Código SQL [-]
Insert Into MKB (nrokb, fecha, memo, r, k, g, anio, mes, dia) values (15005, '04/06/10', ' ', 1, 0, 1, 0, 0, 20100604)

así como esta, hace la inserción pero devuelve el error de que se esperaban 9 parámetros.

el campo fecha es texto, memo es memo, el resto son numéricos.. los datos a insertar son tomados de una base (local) con la misma estructura.

Si en vez de la comilla simple (medianta Quotedstr) usamos la comilla doble (concatenándola) queda esta instrucción:

Código SQL [-]
Insert Into MKB (nrokb, fecha, memo, r, k, g, anio, mes, dia) values (15005, "04/06/10", " ", 1, 0, 1, 0, 0, 20100604)

No hace la inserción, y devuelve el error de que se esperaban 2 parámetros.

Gracias por tu ayuda..

Neftali [Germán.Estévez] 03-06-2010 15:55:26

¿Si pones esto directamente en el ADOCommand te lo añade?
Prueba a cambiar algunos campos por NULL (en los que esté permitido), así sabrás en cual te está dando problemas.

tubidericota 03-06-2010 19:04:14

directamente desde el com ya lo había probado, de todas maneras lo probe con los null como dijiste pero sigue haciendo lo mismo, de a uno e incluso con todos los campos en null (modifiqué la base para que acepte), me agrega un registro vacío y tira el error!... siempre el mismo, se esperaban 9 parámetros..

Casimiro Notevi 03-06-2010 20:07:54

Por decir algo:

[quote]
nrokb___15005
fecha___'04/06/10'
memo____' '
r_______1
k_______0
g_______1
anio____0
mes_____0
dia_____20100604
[/quote

¿Puede ser el problema provocado porque el último dato no es correcto?, 20100604, puede que tenga que ser así:
[quote]
nrokb___15005
fecha___'04/06/10'
memo____' '
r_______1
k_______0
g_______1
anio____2010
mes_____06
dia_____04
[/quote

tubidericota 03-06-2010 20:16:13

Gracias por responder Casimiro Notevi, en un principio era así, luego para simplificar una aplicación que usa la misma base se uso un campo solo, yo hago que la consulta inserte todo porque en el futuro se pude volver a usar.
De todas maneras le estoy insertando 0 a esos campos, no debería estar relacionado con el error..

Neftali [Germán.Estévez] 03-06-2010 21:03:18

Lo raro es que llegue a insertar el registro.
No estará ejecutando otro código después de eso. ¿ Algún evento definido en algún control DataAware?

No se, me resulta extraño que inserte y luego salte el error. :confused::confused::confused:

tubidericota 03-06-2010 21:46:41

ahí estaba el tema... renegé tanto con esa cosulta hsta que encontré lo de las comillas, que luego caundo me tiró el error de los 9 parámetros (la consulta justo tiene 9!) asocié que seguia con la misma consulta, pero en realidad ejecutaba otra que venía luego de algunas líneas más a la que todavía no le había actualizado lo de las comillas... les agradesco la colaboración y les pido disculpas.. prometo prestar más atención para la próxima!


La franja horaria es GMT +2. Ahora son las 11:37:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi