Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Error ADOQuery con Parametros (https://www.clubdelphi.com/foros/showthread.php?t=59789)

drykea 09-09-2008 10:20:59

Error ADOQuery con Parametros
 
Hola a todos.

Tengo el siguiente código y me da error al cargar los parametros(linea en rojo).
Me sale el mensaje
Código:

Parameter <nombre param> not found
¿Alguien sabe que puede pasar?
Muchas gracias

Código Delphi [-]
    
cadena := 'Update Documentos set doc_apel1=:apel1 ,doc_apel2=:apel2';
cadena := cadena + ', doc_nombre=:nombre';
cadena := cadena + ', usuario=:usu, fechagrab=:Fecha';
cadena := cadena + ' where doc_id=:id and doc_NH=:NH';
ADOQVarios.Active:=false;
ADOQVarios.SQL.Clear;
ADOQVarios.SQL.Add(cadena);
ADOQVarios.Parameters.ParamByName('id').DataType := ftInteger;
ADOQVarios.Parameters.ParamByName('id').Value :=cod;
ADOQVarios.Parameters.ParamByName('apel2').DataType := ftString;
ADOQVarios.Parameters.ParamByName('apel2').Value := eApe2.text;
ADOQVarios.Parameters.ParamByName('apel1').DataType := ftString;
ADOQVarios.Parameters.ParamByName('apel1').Value := eApe1.text;
ADOQVarios.Parameters.ParamByName('Nombre').DataType := ftString;
ADOQVarios.Parameters.ParamByName('Nombre').Value := eNombre.text;
ADOQVarios.Parameters.ParamByName('NH').DataType := ftInteger;
ADOQVarios.Parameters.ParamByName('NH').Value :=StrToInt(eNH.text);
ADOQVarios.Parameters.ParamByName('Fecha').DataType := ftDateTime;
ADOQVarios.Parameters.ParamByName('Fecha').Value := Now;
ADOQVarios.Parameters.ParamByName('Usu').DataType := ftString;
ADOQVarios.Parameters.ParamByName('Usu').Value :=MFunciones.GetLoginName;
ADOQVarios.ExecSQL;

seoane 09-09-2008 10:33:07

Justo despues de esta linea:
Código Delphi [-]
ADOQVarios.SQL.Add(cadena);

Prueba a poner esta otra:
Código Delphi [-]
ADOQVarios.Parameters.ParseSQL(Consulta,TRUE);

drykea 09-09-2008 11:17:06

Gracias por tu respuesta.

Siempre lo he hecho de la misma forma, y nunca he usado ese método.
voy a probarlo.

De todos modos, puedes explicarme un poco más que es lo que hace exactamente??

seoane 09-09-2008 11:27:02

Cita:

Empezado por drykea (Mensaje 312705)
De todos modos, puedes explicarme un poco más que es lo que hace exactamente??

Pues por cada parametro que encuentra en la consulta añade un nuevo objeto del tipo TParameter con el nombre del parametro.

drykea 09-09-2008 14:25:58

He probado el código y parece que funciona, aunque no sé porque siempre me había funcionado sin ponerlo y ahora no:confused:


Otra vez muchas gracias

ContraVeneno 09-09-2008 15:49:09

Cita:

Empezado por drykea (Mensaje 312696)
cadena := 'Update Documentos set doc_apel1=:apel1 ,doc_apel2=:apel2';
cadena := cadena + ', doc_nombre=:nombre'; cadena := cadena + ',
cadena := cadena + ' where doc_id=:id and doc_NH=:NH';
//..........................
ADOQVarios.SQL.Add(cadena);

Primero generas una cadena con la instrucción y luego utiilzas "SQL.Add" para agregar esa cadena... mmm... eso es como cuando a un bebe le enseñan a comer con cuchara: primero agarra la comida con la mano, luego la pone en la cuchara.

Podrías ahorrarte la variable cadena y utilizar solamente "SQL.Add" para cada línea de tu consulta:
Código Delphi [-]
with ADOQVarios do begin 
If active then close; 
SQL.Clear; 
SQL.Add('Update Documentos set doc_apel1=:apel1 ,doc_apel2=:apel2,'); 
SQL.Add('doc_nombre=:nombre.'); 
SQL.Add('usuario=:usu, fechagrab=:Fecha'); 
SQL.Add('where doc_id=:id and doc_NH=:NH');
 ... 
Parameters.ParamByName('id').Value :=cod; 
... 
Open; 
end; //with


La franja horaria es GMT +2. Ahora son las 06:15:41.

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