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)
-   -   Asignar una variable a la propiedad Parameters de ADOQuery (https://www.clubdelphi.com/foros/showthread.php?t=80108)

wull 04-09-2012 22:20:41

Asignar una variable a la propiedad Parameters de ADOQuery
 
Veran estoy haciendo un reporte (en Fast Report 4) usando como DataSet un ADOQuery; pero el reporte debe depender de un variable que el usuario ha de elegir desde un ComboBox (tambien he tratado con un RadioGroup) utilizo el siguiente codigo sql para el ADOQuery
Código SQL [-]
SELECT * FROM mitabla WHERE año=:anio
Según yo así estoy pasando un parametro. anio es una variable de tipo String asi como el campo año es de tipo texto (Mi BD esta hecha en Acces 2010), en la propiedad parameter del Quey lo dejo vacio, por lo que al mostrar el reporte no contiene nada, si pongo un valor a parameters entonces si lo muestra pero solo de ese valor.
Se supone que anio debe cambiar dependiendo de la opcion que el usario ha seleccionado, para lo cual hago lo siguiente:
Código Delphi [-]
procedure TForm2.ComboBox1Click(Sender: TObject);
begin
anio:=ComboBox1.Text;
end;

Se supone que con esto estoy guardando en la variable anio la opcion que el usuario ha elegido y despues de esto la paso como parametro a la consulta en el ADOQuery, pero al hacerlo asi el reporte no me muestra nada... necesito de sus sugerencia por favor.

ecfisa 04-09-2012 22:37:43

Hola wull.

Proba de este modo:
Código Delphi [-]
procedure TForm1.ComboBox1Click(Sender: TObject);
begin
  with ADOQuery1 do
  begin
    Close;
    SQL.Text:= 'SELECT * FROM MITABLA WHERE ANIO = :PANIO';
    Parameters.ParamByName('PANIO').Value := ComboBox1.Items[ComboBox1.ItemIndex];
    Open;
  end;
end;
No trabajo con Access así que te consulto: ¿ Permite la 'ñ' en el nombre de un campo ? (año)

Saludos. :)

wull 05-09-2012 03:53:16

Error al pasar el parametro en el ADOQuery
 
1 Archivos Adjunto(s)
Cita:

No trabajo con Access así que te consulto: ¿ Permite la 'ñ' en el nombre de un campo ? (año)
Acces si permite la 'ñ' , de hecho he realizado otras consultas con un valor constantes por ejemplo:
Código SQL [-]
SELECT * FROM mitabla WHERE año='2012'
El problema es cuando uso un parámetro que sea variable.

Por cierto tu sugerencia no funciono, me manda un error que dice que faltan algunos parametros... espero me puedas ayudar

Caral 05-09-2012 04:25:10

Hola
Código Delphi [-]
procedure TForm1.ComboBox1Change(Sender: TObject);
var A: String;
begin
  A:= Combobox1.text;
  with ADOQuery1 do
  begin
    Close;
    SQL.Text:= 'SELECT * FROM MITABLA WHERE ANIO = :dato';
    Parameters[0].Value := QuotedStr(A);
    Open;
  end;
end;
o
Código Delphi [-]
procedure TForm1.ComboBox1Change(Sender: TObject);
var A: String;
begin
  A:= QuotedStr(Combobox1.text);
  with ADOQuery1 do
  begin
    Close;
    SQL.Text:= 'SELECT * FROM MITABLA WHERE ANIO = :dato';
    Parameters[0].Value := A;
    Open;
  end;
end;
Saludos

ecfisa 05-09-2012 14:00:20

Cita:

Empezado por wull (Mensaje 441867)
Por cierto tu sugerencia no funciono, me manda un error que dice que faltan algunos parametros...

Hola wull.

Es extraño... probé el código que te puse en el mensaje #2 con una tabla Access y funciona bién.

¿ Podrías poner exáctamente (copiar/pegar) el código que te está dando el error ?

Saludos. :)

roman 05-09-2012 17:28:56

Cita:

Empezado por wull (Mensaje 441812)
en la propiedad parameter del Quey lo dejo vacio, por lo que al mostrar el reporte no contiene nada, si pongo un valor a parameters entonces si lo muestra pero solo de ese valor.
Se supone que anio debe cambiar dependiendo de la opcion que el usario ha seleccionado, para lo cual hago lo siguiente:
Código Delphi [-]
procedure TForm2.ComboBox1Click(Sender: TObject);
begin
anio:=ComboBox1.Text;
end;

Quizá me equivoco, pero me da la impresión de que piensas que el valor del parámetro debe cambiar automáticmente conforme cambias el elemento seleccionado del combo. De se así, es un error, cada vez que cambies el valor del cmbo, debes reasignar el valor del parámetro como ya te indicó ecfisa.

// Saludos

wull 05-09-2012 20:17:02

Lo siento creo que los nervios me traicionaron, todo está bien solo que use el codigo que me sugirió ecfisa y me confundi, ya que puse
Código Delphi [-]
SQL.Text:= 'SELECT * FROM MITABLA WHERE ANIO = :PANIO';
    Parameters.ParamByName('PANIO').Value := ComboBox1.Items[ComboBox1.ItemIndex];
Y me mandaba error porque yo no tengo en mi tabla ningun campo llamado ANIO, ese fue mi error crei que era un parametro hasta que analice todo y me di cuenta que era el nombre del campo... :eek: lo único que tuve que hacer fue cambiar ANIO por AÑO.
Código Delphi [-]
SQL.Text:= 'SELECT * FROM MITABLA WHERE AÑO = :PANIO';
    Parameters.ParamByName('PANIO').Value := ComboBox1.Items[ComboBox1.ItemIndex];

Me funciona muy bien gracias por la ayuda brindada.

Por cierto Roman, tenias razón yo creía que los parámetros cambian automáticamente, pero gracias a tu comentario y al consejo de ecfisa, ahora todo esta bajo control, por el momento jaja ... muchas gracias también a ti [Caral]


La franja horaria es GMT +2. Ahora son las 03:01:39.

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