PDA

Ver la Versión Completa : Error ADOQuery con Parametros


drykea
09-09-2008, 10:20:59
Hola a todos.

Tengo el siguiente código y me da error al cargar los parametros(linea en rojo).
Me sale el mensaje
Parameter <nombre param> not found

¿Alguien sabe que puede pasar?
Muchas gracias


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:

ADOQVarios.SQL.Add(cadena);


Prueba a poner esta otra:

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
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
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:

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