Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   [SOLUCIONADO] SQL Query error parameter 'sens' not found (https://www.clubdelphi.com/foros/showthread.php?t=92052)

cvlaso77 11-07-2017 03:29:57

[SOLUCIONADO] SQL Query error parameter 'sens' not found
 
Hola a todos, les agradeceria mucho su ayuda, soy nuevo en esto, estoy trabajando con Delphi 7 y al reutilizar el siguiente código en otra parte de la misma Unit, me aparece el error :

"Query3 parameter 'sens1' not found.

Será que las sentencias query3.clear y query3.active=false no son suficientes para limpiar el código de este query.
Ojalá me puedan decir que me falta para poder reutilizar el query3 sin problemas.

De antemano muchas gracias

Mi código es :

Código Delphi [-]
ruta_q:=Table5.fieldbyname('RUTA_DATOS').Value;
ruta_q:= ruta_q  + '\SENSORES.DB';

  Query3.SQL.Clear;
  Query3.Active := False ;
  With Query3.Sql Do
   Begin
       Add('SELECT NUM,SENSOR,UBICACION,ORIGEN,TIPO');
       Add ('FROM "'+ruta_q+'"');
       Add('WHERE');
       Add('SENSOR = :sens1');
       query3.parambyname('sens1').asInteger:= dsensor;
   end;

    Query3.Active := True ;

AgustinOrtu 11-07-2017 04:34:36

Recuerda utilizar TAG's

Una pista para solucionar tu problema: imprime en pantalla la consulta SQL, por ejemplo, de esta manera:

Código Delphi [-]
  Query3.SQL.Clear;
  Query3.Active := False ;
  With Query3.Sql Do
  Begin
    Add('SELECT NUM,SENSOR,UBICACION,ORIGEN,TIPO');
    Add ('FROM "'+ruta_q+'"');
    Add('WHERE');
    Add('SENSOR = :sens1');
    ShowMessage(Text); // Text es la propiedad Query3.SQL.Text
    query3.parambyname('sens1').asInteger:= dsensor;
end;

Por otra parte, te recomiendo que no utilices la sentencia with para nada, pero es un tema bastante personal. El problema que tiene es que pueden ocurrir ambiguedades

cvlaso77 11-07-2017 05:23:48

error con sql
 
Gracias Agustin por el apoyo, en pantalla me aparece siempre la misma sentencia y se produce el mismo error.
Por el momento estoy probando lo que encontré en otro hilo, si tienes otro dato, bienvenido
Gracias por la ayuda

Neftali [Germán.Estévez] 11-07-2017 13:31:31

La construcción en prinicipio parece correcta.
Tendrías que colocar la SQL completa y/o un ejemplo donde se reproduzca.

maeyanes 11-07-2017 17:29:16

Hola...

Me parece recordar, que primero tendrías que preparar el query para que pueda reconocer los parámetros:

Código Delphi [-]
  Query3.SQL.Clear;
  Query3.Active := False ;
  With Query3.Sql Do
  Begin
    Add('SELECT NUM,SENSOR,UBICACION,ORIGEN,TIPO');
    Add ('FROM "'+ruta_q+'"');
    Add('WHERE');
    Add('SENSOR = :sens1');
  end;
  Query3.Prepare;
  Query3.parambyname('sens1').asInteger:= dsensor;


Saludos...

oscarac 11-07-2017 17:34:19

y no es asi?
Código Delphi [-]
Query3.Parameters.parambyname('sens1').asInteger:= dsensor;

Caminante 11-07-2017 18:02:05

Cita:

Empezado por oscarac (Mensaje 519181)
y no es asi?
Código Delphi [-]Query3.Parameters.parambyname('sens1').asInteger:= dsensor;

Solo si esta usando ADO para conectarse. Para los demas es como lo escribio (Al menos los que conozco)

Saludos

AgustinOrtu 11-07-2017 20:44:47

Solo se me ocurre que no tengas la propiedad Connection enlazada

nincillo 11-07-2017 21:34:42

Dentro del With vuelves utilizar:

Código:

query3.parambyname('sens1').asInteger:= dsensor;
O le quitas el query3 de delante, o lo sacas del With. Quizás sea solo eso...

gatosoft 11-07-2017 23:49:56

Como dicen todos, en principio parece correcto. ¿estás seguro que es el lugar donde está marcando el error? (solo por descartar)

No tengo mas que correcciones de forma: (sugierousar open y close en luagar del active, es solo de forma)

Código Delphi [-]
ruta_q:=Table5.fieldbyname('RUTA_DATOS').Value;
ruta_q:= ruta_q  + '\SENSORES.DB';

  Query3.close; 
  Query3.SQL.Clear; 
  With Query3.SQL Do
   Begin
       Add('SELECT NUM,SENSOR,UBICACION,ORIGEN,TIPO');
       Add ('FROM "'+ruta_q+'"');
       Add('WHERE');
       Add('SENSOR = :sens1');       
   end;
   query3.prepare;
   query3.parambyname('sens1').asInteger:= dsensor;
   Query3.open;


Ahora, para verificar que es lo que pasa, revisa los parametros que te estan llegando... por ejemplo imprimiendo con un showmessage el Query3.Paramscount (No se si es asi o Query3.Params.count)

Otra opcion es que utilices el indice del parametro:

Código Delphi [-]
   query3.prepare;
   query3.params[0].asInteger:= dsensor;
   Query3.open;


y por ultimo, podrias solucionar tu problema, pero no es la respuesta a este hilo:
Código Delphi [-]
  Query3.close; 
  Query3.SQL.Clear; 
  With Query3.SQL Do
   Begin
       Add('SELECT NUM,SENSOR,UBICACION,ORIGEN,TIPO');
       Add ('FROM "'+ruta_q+'"');
       Add('WHERE');
       Add('SENSOR = '+Inttostr(dsensor));       
   end;
   Query3.open;

gatosoft 11-07-2017 23:56:32

Una cosa mas... en la ventana de propiedades puedes ver la propiedad Params, que es una colección de TParams... puede ser que se hayan ingresado en tiempo de diseño los parametros y por esta razon puede que esté causando algún conflicto...

Aunque dicha propiedad deberia cambiarse cuando asignas nuevamente la sentencia SQL a tu Query3.

saludo,

cvlaso77 13-07-2017 08:44:51

Query no reconoce los parametros
 
Hola, gracias de nuevo por sus respuestas, he seguido probando alguna solución y el problema persiste, aislé el código a una sola form con la misma sintaxis ya que mi programa tiene muchos query. Los efectos son los mismos, esto es, la primera y segunda vez que el programa ejectua el query lo hace sin errores pero la tercera vez arroja el error maldito y lo hace con las sentencias select y las update.
Estoy trabajando en Windows 10 y me arroja un error al abrir Delphi, sin embargo todo anda bien salo el BDE que aparece con unos botones desactivados, esto lo salvé creando mis tabla con sentencias SQL, no creo que mi problema sea con windows?, que opinan?

Les dejo el código que estoy usando para tratar de encontrar el problema, eliminé las sentencias with, apliqué el query.prepare, y nada.
El código lo ejecuto desde un botón y al primer click, todo ok, al segundo igual , pero al tercero aparece el mensaje "parameter 'fe_ent_adm' not found.
Mi programa debe usar esta procedimiento n veces, si no arreglo esto estoy frito.
pensaba que el asunto andaba por los tipos "as.datetime" o "as.time", etc pero no me dio resultado.

Mucha Gracias de nuevo
perdonen no sé como insertar el código en la ventana.



procedure TForm5.Button1Click(Sender: TObject);
var
Fecha_temp:TDateTime;
Hora_temp:TDateTime;
ruta_q2:string;
numer_cab:Integer;

begin
Table2.Open;
Table1.Open;

ruta_q2:=TRIM(Table2.fieldbyname('RUTA_DATOS').value);
ruta_q2:=ruta_q2 + '\REG_CALC1_ABTOS.DB'; //TABLE 1

Fecha_temp:= StrToDate('01-05-2017');
Hora_temp:= StrToTime('22:10:00');
numer_cab:=26;

query1.Close;
query1.SQL.Clear;
query1.Params.Clear;

query1.SQL.Text:= 'UPDATE "'+ruta_q2+'" SET FE_ENT_ADM = :fe_ent_adm, HR_ENT_ADM = :hr_ent_adm WHERE NUM_CAB_HAB = :n9_cab';
query1.Parambyname('fe_ent_adm').AsDateTime := Fecha_temp;
query1.Parambyname('hr_ent_adm').AsTime := Hora_temp;
query1.Parambyname('n9_cab').AsInteger := numer_cab;
query1.SQL.EndUpdate;
query1.ExecSQL;


DBGrid1.DataSource:=Datasource1;
Table1.Close;
Table2.Close;
end;

end.

cvlaso77 13-07-2017 08:46:43

Query no reconoce los parametros
 
Hola, gracias de nuevo por sus respuestas, he seguido probando alguna solución y el problema persiste, aislé el código a una sola form con la misma sintaxis ya que mi programa tiene muchos query. Los efectos son los mismos, esto es, la primera y segunda vez que el programa ejectua el query lo hace sin errores pero la tercera vez arroja el error maldito y lo hace con las sentencias select y las update.
Estoy trabajando en Windows 10 y me arroja un error al abrir Delphi, sin embargo todo anda bien salo el BDE que aparece con unos botones desactivados, esto lo salvé creando mis tablas con sentencias SQL, no creo que mi problema sea con windows?, que opinan?

Les dejo el código que estoy usando para tratar de encontrar el problema, eliminé las sentencias with, apliqué el query.prepare, y nada.
El código lo ejecuto desde un botón y al primer click, todo ok, al segundo igual , pero al tercero aparece el mensaje "parameter 'fe_ent_adm' not found.
Mi programa debe usar esta procedimiento n veces, si no arreglo esto estoy frito.
pensaba que el asunto andaba por los tipos "as.datetime" o "as.time", etc pero no me dio resultado.

Mucha Gracias de nuevo
perdonen no sé como insertar el código en la ventana.



procedure TForm5.Button1Click(Sender: TObject);
var
Fecha_temp:TDateTime;
Hora_temp:TDateTime;
ruta_q2:string;
numer_cab:Integer;

begin
Table2.Open;
Table1.Open;

ruta_q2:=TRIM(Table2.fieldbyname('RUTA_DATOS').value);
ruta_q2:=ruta_q2 + '\REG_CALC1_ABTOS.DB'; //TABLE 1

Fecha_temp:= StrToDate('01-05-2017');
Hora_temp:= StrToTime('22:10:00');
numer_cab:=26;

query1.Close;
query1.SQL.Clear;
query1.Params.Clear;

query1.SQL.Text:= 'UPDATE "'+ruta_q2+'" SET FE_ENT_ADM = :fe_ent_adm, HR_ENT_ADM = :hr_ent_adm WHERE NUM_CAB_HAB = :n9_cab';
query1.Parambyname('fe_ent_adm').AsDateTime := Fecha_temp;
query1.Parambyname('hr_ent_adm').AsTime := Hora_temp;
query1.Parambyname('n9_cab').AsInteger := numer_cab;
query1.SQL.EndUpdate;
query1.ExecSQL;


DBGrid1.DataSource:=Datasource1;
Table1.Close;
Table2.Close;
end;

end.

olbeup 13-07-2017 09:27:42

Hola cvlaso77,

Esta línea donde pone "query1.SQL.EndUpdate" que la utilizas?, a ver si el problema es ese.

Un saludo.

cvlaso77 13-07-2017 16:27:43

Query no reconoce los parametros, RESUELTO
 
Muchas Gracias Orbe por tu sugerencia, al sacar el comando sql update, se resuelve el problema y el procedimiento funciona perfecto.
No sé de donde saqué este comando, asumo que al usar la rutina with, donde tambien aparece el mismo problema al usar este comando.
Agradezco mucho a todos los que vieron mi consulta y dedican su tiempo a este foro, y los felicito por eso, ojalá esto hubiera existido en mis tiempos de la Univ de BASIC, PASCAL y otros.
Saludos a todos

cvlaso77 13-07-2017 16:30:06

Query no reconoce los parametros, RESUELTO
 
Una cosa más, me expresé mal, el comando que produce el error es "query1.SQL.EndUpdate", saludos


La franja horaria es GMT +2. Ahora son las 14:12:32.

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