PDA

Ver la Versión Completa : Cambiar SelectSQL en ejecución


Tomás
17-05-2003, 17:18:36
Hola a todos:

En una tabla de InterBase quiero cambiar la propiedad SelectSQL de un DataSet pero "en ejecución" y no se como de escribre este código.

Tengo seleccionado todo

Select * from PARTE

Y en un momento dado quiero filtrar para que quede:

Select * from PARTE
where MES = 'variableconnumeromes'

para hacer un report y luego volverlo a dejar como estaba

Select * from PARTE

¿ Qué código hay que escribir ?

Muchas gracias. Tomás.

vecino
17-05-2003, 17:45:04
Hola:

Es tan sencillo como cerrar el dataset, asignar lo que quieras y volver a abrirlo.

ibDataset1.Close;
ibDataset1.SelectSQL.Text := 'Select ... where ... ';
ibDataset1.Open;

Saludos.

jhonny
17-05-2003, 17:45:32
Empecemos por el principio:

1. Propiedad SelectSQL? R// Asumo de que te refieres a que estas haciendo un Select en la propiedad SQL de un TQuery.

Si es asi... entonces lo puedes cambiar de la siguiente manera en tiempo de ejecucion:

Supongamos que quieres cambiar el SQL en el Evento OnClick de un Boton llamado "Boton1" y que el TQuery se llama "Query1" y que la variable con numero del mes (a la cual le haces referencia en tu segundo SQL) se llama "mes".

procedure TForm1.Boton1Click(Sender :TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select * from PARTE where MES= :variableconnumeromes');
Query1.Close;
Query1.ParamByName('variableconnumeromes').AsInteger:=mes;
Query1.Open; //esta linea es por si quieres abrir el Query en este momento
end;

Bueno eso es todo, Suerte:)

P.D. Caramba veo que Vecino se me ha adelantado por una milesima de segundo :D

__cadetill
17-05-2003, 21:11:03
ya que dices que es para hacer un report (un listado), yo lanzaria una Query por separado


var Q : TIBQuery
begin
Q := TIBQuery.Create;
try
Q.Database := IBDataBase1;
Q.SQL.Text := 'Select * from PARTE ' +
' where MES = ' variableconnumeromes;
Q.Open;
// Lanzar Listado
finally
FreeAndNil(Q);
end;
end;


Espero te sirva

Tomás
18-05-2003, 00:56:15
Gracias Vecino por tu ayuda, efectivamente funciona como me has indicado. Con estas líneas:
DecodeDate(DTPDesde.Date,AA,MM,DD);
IBDSParte.Close;
IBDSParte.SelectSQL.Text := 'Select * from PARTE where MES = ' + IntToStr(MM);
IBDSParte.Open;

Gracias Jhonny. No es un TQuery, es un TIBDataSet, y una de sus propiedades es SelectSQL. De todas maneras he probado con tus indicaciones y así también funciona:
DecodeDate(DTPDesde.Date,AA,MM,DD);
IBDSParte.Close;
IBDSParte.SelectSQL.Clear;
IBDSParte.sELECTSQL.Add('Select * from PARTE where MES= ' + IntToStr(MM));
IBDSParte.Open;

Gracias de nuevo a los dos. Tomás.

Tomás
18-05-2003, 01:04:45
Gracias Cadetill, aunque ya lo he resuelto, me viene bien saberlo para otra ocación que lo necesite, porque soy principiante en Delphi.

Un saludo. Tomás.