Ver Mensaje Individual
  #16  
Antiguo 26-07-2024
GINMARMENOR GINMARMENOR is offline
Miembro
 
Registrado: feb 2016
Posts: 71
Reputación: 10
GINMARMENOR Va por buen camino
Perdonar la tardanza, pero estaba saturado ayer.

He probado las soluciones que me mandáis y FUNCIONAN, BIENNNNNNNN.


Código SQL [-]
                         var
                              anios:string;


                        Begin
                          anios:='(1925,1955,1920)';  
                       
                          IBQueryMotivos.SQL.Clear;
                          IBQueryMotivos.SQL.Add('select * from motivos where año in '+ANIOS);
                          IBQueryMotivos.Open;
                        end;

y Lógicamente también así:


Código SQL [-]

procedure Button1click(Sender: TObject);

var
    cAnios : String;

begin
   cAnios := cAnios + Edit1.Text + ',';

 // cAnios debería tener valores separados por coma.

   
   begin

      IBQueryMotivos.SQL.Clear;
      IBQueryMotivos.SQL.Add('select * from motivos where año in (' + cAnios + ')');
      IBQueryMotivos.Open;

   end
   else
      ShowMessage('No se han seleccionado años');
end;


Como me has pedido MRoman, mi código era meter en un StringGrid ó en un QuickReport, Rave Report, etc etc, sólo aquellos años que yo eligiera aleatoriamente, sin tener que ser todos los que son menores ó mayores que tal año, que eso sería más fácil.

Por lo que mi código quedaría así:


Código SQL [-]

procedure tform1.Button1Click (sender:tobjet);

var
      anios1,anios2,anios3:string;
      x,c:Integer;

begin
       c:=1
       for x:=1 to Memo1.Lines.Count - 1 do
            begin
              anios1:=Memo1.Lines[x];
              anios2:=anios2+anios1+ ',';
              anios3:=anios2+'0';
       end;

       with tqueryMotivos do
       close;
       sql.clear;
       sql.add('select anio,Motivo from Motivos where Motivo in '(' + anios3 + ')';
       open;

       while not IbQueryMotivo.eof do
                begin
                   Stringgrid1.cells[c]:=IbQueryMotivo.FieldByname(anio).AsString;
                   StringGrid1.Cells[c]:=IbQueryMotivo.FieldByname(Motivo).AsString;
                   inc(c);
                   IbQueryMotivo.next;
                 end;

Bueno esto sería acabado el código entero simplificado a lo máximo, he utilizado para rellenar y sacar los datos finales un striggrid
He utilizado un Memo1, en vez de Edit, por comodidad y el Memo me deja introducir los años más cómodamente,
He utilizado tres Anios1,Anios2,Anios3,
donde el primero cojo, la primera línea del Memo
el Segundo cojo Anios1 + el Acumulado del Anios2, (1925,1955,1920,) y se quedaría así con una coma inoportuna ahí.
y Tercero cojo el Anios 2 entero, y como el Anios2 siempre acababa en ',' o siempre empezaba ',' no había forma de quitarla pues
le añadido en el anios3 un '0' y quedaría así (1925,1955,1920,0) el 0 nunca va representar ningún año y no me altera en nada el
resultado y así no me da error.

Lo mismo se puede hacer más simple, estoy abierto a aprender, y reducirlo al máximo, vosotros sois mucho mas expertos que yo.

Así que no me queda más que agredecer, el interés y las soluciones que me habéis dado, con esto se me ha abierto un abanico
muy grande para escoger dentro de un campo de forma aleatoria. Muchísimas Gracias.
Responder Con Cita