Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema con parametro en ADOQUERY (https://www.clubdelphi.com/foros/showthread.php?t=89499)

sidneyb 02-12-2015 16:06:40

Problema con parametro en ADOQUERY
 
Buen dia estimados colegas, rato de no entrar por aca.

Tengo un pequeño problema que no encuentro ni pie ni cabeza, y la verdad me tiene a punto de cambiar el como lo hago, solo que no quisiera por que todo el codigo lo estoy manejando de la misma manera.

Utilizo XE6 y me da arroja que no ha encontrado el parametro señalado

Código Delphi [-]
 SQL := 'SELECT TipoListaPrecio ' +
         'FROM dbo.CAJAS ' +
         'WHERE Serie =:p1';

  Query.SQL.Clear;
  Query.SQL.Add(SQL);
//  Query.Parameters.ParamByName('p1').Value := DataRegistro;  // 'Query: Parameter not found'
//  SQL := Query.Parameters[0].Name;                                     // aca solo utilizo la variable SQL (string) para ver si me devuelve el nombre del parametro ubicado en esa posicion  pero me coloca ''
//  I := Query.Parameters.Count;                                             // aca utilizo la variable I (entero) para saber cuantos parametros cuenta, y me indica que hay uno, por lo tanto si lo ve, pero no me devuelve ni nombre por posicion ni nada

Podrian ver uds donde esta el error?

muchas gracias por anticipado

ecfisa 02-12-2015 16:22:56

Hola sidneyb.

De este modo tiene que funcionar:
Código Delphi [-]
...
var
  qy: TADOQuery;
begin
  qy := ADOQuery1; // (el nombre de tu componente ADOQuery)
  qy.Close;
  qy.SQL.Clear;
  qy.SQL.Add('SELECT TIPOLISTAPRECIO');
  qy.SQL.Add('FROM CAJAS');
  qy.SQL.Add('WHERE SERIE = :P1');
  qy.Parameters.ParamByName('P1').Value := DataRegistro; 
  qy.Open;
...

Saludos :)

Osorio 02-12-2015 16:49:45

Lo mas probable es que con un refresh te funcione correctamente.




Código Delphi [-]
SQL := 'SELECT TipoListaPrecio ' +
         'FROM dbo.CAJAS ' +
         'WHERE Serie =1';

  Query.SQL.Clear;
  Query.SQL.Add(SQL);



  Query.Parameters.Refresh;   //Luego de esta linea debe ir todo bien. 


//  Query.Parameters.ParamByName('p1').Value := DataRegistro;  // 'Query: Parameter not found'
//  SQL := Query.Parameters[0].Name;                                     // aca solo utilizo la variable SQL (string) para ver si me devuelve el nombre del parametro ubicado en esa posicion  pero me coloca ''
//  I := Query.Parameters.Count;

AgustinOrtu 02-12-2015 17:06:09

Puede ser que no tengas la Connection asignada al Query

sidneyb 02-12-2015 18:31:52

Antes que todo, muchas gracias a todos. muy atentos, muy oportunos.

les cuento, probe con cada una de las soluciones y ninguna funciono.

AgustinOrtu, me hizo ver el detalle que jamas pense ni espere, efectivamente, la variable string donde armo la conexion la estaba reinicializando con un dato vacio sin fijarme, y esa era ConnectionString que tenia, simplemente, nada. es por ellos que solo aqui me falla, por que esta conexion es a diferentes bases de datos.

muchas gracias a todo, problema solucionado

AgustinOrtu 02-12-2015 18:39:53

Me ha valido unos buenos quebraderos de cabeza en su momento :D

Es por eso que nunca me gusto tener componentes sino mas bien metodos/funciones que retornen los Query/Command

Código Delphi [-]
function TDataModule.CreateQuery(AOwner: TComponent): TADOQuery;
begin
  Result := TADOQuery.Create(AOwner);
  Result.Connection := FAdoConnection;
end;

function TDataModule.CreateCommand(AOwner: TComponent): TADOCommand;
begin
  Result := TADOCommand.Create(AOwner);
  Result.Connection := FAdoConnection;
end;

Listo, nunca mas me olvide de asignar la propiedad Connection ^\||/

En tu caso que usaste una ConnectionString distinta podrias agregar una version sobrecargada (overload)


La franja horaria es GMT +2. Ahora son las 18:35:26.

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