Cita:
Empezado por GINMARMENOR
Buenas de nuevo, y gracias en serio.
La siguiente secuencia funciona BIEN que es la que MRoman, por un lapsus dije no.
Código SQL [-]
select * motivos where año IN (1925,1955);
Pero el texto completo es el siguiente que no lo puse por simplificar:
Código SQL [-]
ibQueryMotivos.close;
IbQueryMotivos.Clear;
IbQueryMotivos.text:='select * motivos where año IN (1925,1955)';
IbQueryMotivos.open;
Con esto puedo meter los datos filtrados en un dbgrid, stringGrid, Rave Reports, etc etc sin problemas pero al estar en unas comillas sólo puedo elegir los años (1925, 1955, etc.etc) en modo diseño y no en modo ejecucion, lo que necesitaría es meter los años en un Listbox, en una Variable u otro contenedor, y de ahí diseñar el Query para que sólo salgan los años que necesito.
|
Hola...una observación: En la propiedad TEXT del "ibQuery", no te hace falta "FROM" en la sentencia SELECT??... "select * FROM motivos..." y otra obervación, el campo AÑO te permite la "Ñ"??...la verdad nunca he usado la Ñ en los campos que creo en Firebird, no sé si lo permita. En realidad los declaro -en el caso del año- como ANIO.
Ahora, creo que el componente del IBQuery, quedaría asi:
Código Delphi
[-]
IBQueryMotivos.SQL.Clear;
IBQueryMotivos.SQL.Add('select * from motivos where año in '+ANIOS2);
IBQueryMotivos.Open;
Para cuando se ejecute las instrucciones anteriores, ya deberá traer datos la variable ANIOS2:
Concatenando los paréntesis al inicio y al final de la cadena, que también deberas inlcuir en la cadena la coma "," para separar un año del otro
Te envío un ejemplo de como lo uso
Código Delphi
[-]
aQrySic.SQL.LoadFromFile(ExtractFilePath(Application.ExeName)+'\SQLS\SCA_SOME_PROMOTORES.SQL');
aQrySic.SQL.Add(' and pmt_numero in '+cPromotor);
aQrySic.SQL.Add(' order by lec_numero, numero_tarjeta');
aQrySic.Open;
Aqui lleno la variable "cPromotor" con las claves de algunos promotores que el usuario ha seleccionado:
Código Delphi
[-]
2: begin qryLecherias.DisableControls;
BM:=qryLecherias.Bookmark;
try
with dbgLecherias.DataSource.DataSet do
for i:=0 to dbgLecherias.SelectedRows.Count-1 do
begin
qryLecherias.Bookmark:=dbgLecherias.SelectedRows.Items[i];
cPromotor:=cPromotor+qryLecherias.fieldbyname('DATO1').AsString;
if i<>dbgLecherias.SelectedRows.Count-1 then
begin
cPromotor:=cPromotor+',';
end;
end;
finally
qryLecherias.Bookmark:=BM;
qryLecherias.EnableControls;
end;
if cPromotor<>'' then
begin
cPromotor:='('+cPromotor+')';
aQrySic.SQL.Clear;
aQrySic.SQL.LoadFromFile(ExtractFilePath(Application.ExeName)+'\SQLS\SCA_SOME_PROMOTORES.SQL');
aQrySic.SQL.Add(' and pmt_numero in '+cPromotor);
aQrySic.SQL.Add(' order by lec_numero, numero_tarjeta');
end;
end;
Usé la sentencia CASE en programación para seleccionar la opción 0,1 o 2 de un combo que el usuario selecciona para saber que tipo de procesamiento se va a realizar, estos serían los ITEMS del combo:
Código:
Todas las lecherias todos los promotores
Algunas Lecherias
Algunos promotores social
Espero te sirva esta orientación.
Saludos.