Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   pasar datos a Stringrid (https://www.clubdelphi.com/foros/showthread.php?t=95488)

kainchu3102 12-12-2021 20:16:06

pasar datos a Stringrid
 
Hola buenas tardes quisiera hacer una consulta estoy estancado con algo, necesito su ayuda,
consulta:
Como puedo hacer para llevar datos de un fdquery a un StringGrid
por ejemplo llevar detalles de una venta a un stringrid media un ID

Código Delphi [-]
Var

j :Integer;
begin
    for J := 0  to FORMABMVENTA.SGVENTAS.ColCount  do
  begin
      with MDBRIONES.FDQSEL_DET_VEN2 Do
      Begin
      SQL.Clear;
      SQL.Add('SELECT can_det FROM detalle_venta WHERE id_ven_det = :ID_DETS');
      ParamByName('ID_DETS').AsInteger := ID_VENTA;
      open;

      FORMABMVENTA.SGVENTAS.Cells[0, j]:= MDBRIONES.FDQSEL_DET_VEN2.Fields.FieldByName('can_det').AsString ;
     //FORMABMVENTA.SGVENTAS.Cells[j,FORMABMVENTA.SGVENTAS.RowCount -i] := MDBRIONES.FDQSEL_DET_VEN2.Fields.FieldByName('can_det').AsString ;
     end;
    end;
        FORMABMVENTA.ShowModal;
end;



eh intentado algo asi pero solo me carga una sola fila y son varias en realidad. mcuhas gracias desde ya y un saludo cordial.

ecfisa 12-12-2021 21:52:25

Hola.

Creo que buscas algo así:
Código Delphi [-]
...
var
  j: Integer;
begin
   FDQuery.Close;
   FDQuery.SQL.Text := 'SELECT COUNT(*) AS CONT FROM detalle_venta';
   FDQuery.Active := True;
   StringGrid1.RowCount := FDQuery.FieldByName('CONT').AsInteger;

   FDQuery.Close;
   FDQuery.SQL.Clear;
   FDQuery.SQL.Add('SELECT can_det FROM detalle_venta');
   FDQuery.SQL.Add('WHERE id_ven_det = :ID_DETS');
   FDQuery.ParamByName('ID_DETS').AsInteger := ID_VENTA;
   FDQuery.Active := True;

   j := StringGrid1.FixedRows;
   while not FDQuery.Eof do
   begin
     StringGrid1.Cells[0, j] := FDQuery.FieldByName('can_det').AsString;
     FDQuery.Next;
     Inc(j);
   end;
  ...

Saludos :)

kainchu3102 12-12-2021 22:41:30

Hola Esfisa Muchas gracias por responder, pero creo mas que un listado es esto lo que necesito que se vayan varios registro de una misma ID.
y lo estoy haciendo todo mal
Código Delphi [-]
   for J := 0  to FORMABMVENTA.SGVENTAS.RowCount  do
        begin
 with MDBRIONES.FDQSEL_DET_VEN2 Do
      Begin
      SQL.Clear;
      SQL.Add('SELECT can_det, esp_det, tip_det, alt_det, anc_det, lar_det FROM detalle_venta WHERE id_ven_det = :ID_DETS');
      ParamByName('ID_DETS').AsInteger := ID_VENTA;
      open;

     FORMABMVENTA.SGVENTAS.Cells[0, j]:= MDBRIONES.FDQSEL_DET_VEN2.Fields.FieldByName('can_det').AsString ;
     FORMABMVENTA.SGVENTAS.Cells[1, j]:= MDBRIONES.FDQSEL_DET_VEN2.Fields.FieldByName('esp_det').AsString ;
     FORMABMVENTA.SGVENTAS.Cells[2, j]:= MDBRIONES.FDQSEL_DET_VEN2.Fields.FieldByName('tip_det').AsString ;
     FORMABMVENTA.SGVENTAS.Cells[3, j]:= MDBRIONES.FDQSEL_DET_VEN2.Fields.FieldByName('alt_det').AsString ;
     FORMABMVENTA.SGVENTAS.Cells[4, j]:= MDBRIONES.FDQSEL_DET_VEN2.Fields.FieldByName('anc_det').AsString ;
     FORMABMVENTA.SGVENTAS.Cells[5, j]:= MDBRIONES.FDQSEL_DET_VEN2.Fields.FieldByName('lar_det').AsString ;

      FORMABMVENTA.ShowModal;

no lo lo estoy entendiendo al codigo, perdon poser tan novato

ecfisa 13-12-2021 00:49:44

Hola.

No tienes por que disculparte, pero si no es un listado no entiendo que es lo que pretendes hacer sobre el StringGrid.

Saludos :)

kainchu3102 13-12-2021 04:05:09

Seria llevar registros de una tabla de base de datos a un stringgrid por ejemplo

id_det , id_ven_det , cant_det , esp_det, tip_det
1, 1, 100, afata, tabla
2, 1, 50, afata, tabla
3, 3, 100, cedro , tablon
4 , 3, 200, cebil, tablon

es simplemente llevar desde una llamada de FDQuery todos los registros de las misma id_ven_det

EJEMPLO para llevar una StringGrid
id_ven_det, cant_det , esp_det, tip_det
1, 100 , afata, tabla ,
1, 50 , afata , tabla,

Espero haberme hecho entender o sino estoy en el infierno muchas gracias Ecfisa.

ecfisa 13-12-2021 05:11:53

Hola.

Entonces sólo agrega los demás campos al código que publiqué inicialmente (1).
Código Delphi [-]
var
  j: Integer;
begin
   FDQuery.Close;
   FDQuery.SQL.Text := 'SELECT COUNT(*) AS CONT FROM detalle_venta';
   FDQuery.Active := True;
   StringGrid1.RowCount := FDQuery.FieldByName('CONT').AsInteger;

   FDQuery.Close;
   FDQuery.SQL.Clear;
   FDQuery.SQL.Add('SELECT can_det, esp_det, tip_det, alt_det, anc_det, lar_det FROM detalle_venta');   
   FDQuery.SQL.Add('WHERE id_ven_det = :ID_DETS');
   FDQuery.ParamByName('ID_DETS').AsInteger := ID_VENTA;
   FDQuery.Active := True;

   j := StringGrid1.FixedRows;
   while not FDQuery.Eof do
   begin
     StringGrid1.Cells[0, j] := FDQuery.FieldByName('can_det').AsString;
     StringGrid1.Cells[1, j] := FDQuery.FieldByName('esp_det').AsString; // (1)
     StringGrid1.Cells[2, j] := FDQuery.FieldByName('tip_det').AsString;
     StringGrid1.Cells[3, j] := FDQuery.FieldByName('alt_det').AsString;
     StringGrid1.Cells[4, j] := FDQuery.FieldByName('anc_det').AsString;
     StringGrid1.Cells[5, j] := FDQuery.FieldByName('lar_det').AsString;    
     FDQuery.Next;
     Inc(j);
   end;
   ...
Y claro, cambia los nombres "StringGrid1" y "FDQuery" por tus nombres de StringGrid y FDQuery respectivamente.

Saludos :)

manelb 13-12-2021 08:08:41

¿Tiene que ser un TStringGrid necesariamente ?

Lo digo por que un TDBGrid te haría lo mismo y simplemente en el where de la consulta o en el Filter de FDQuery podrias filtrar los registros que quieres visualizar.

Saludos a todos...

kainchu3102 14-12-2021 04:19:41

Si es necesario por ahi iria el detalle de una por si quiere modificar eliminar o subir otro producto para la venta pero nose si se podria hacer con un cliclo for


La franja horaria es GMT +2. Ahora son las 05:11:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi