PDA

Ver la Versión Completa : Asignar una variable a la propiedad Parameters de ADOQuery


wull
04-09-2012, 22:20:41
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
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:
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:

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

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

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