AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Neuen Beitrag zur Code-Library hinzufügen Tabelle aus PG Datenbank in StringGrid füllen?
Thema durchsuchen
Ansicht
Themen-Optionen

Tabelle aus PG Datenbank in StringGrid füllen?

Ein Thema von W4lt3r · begonnen am 11. Jan 2018 · letzter Beitrag vom 12. Jan 2018
Antwort Antwort
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#1

AW: Tabelle aus PG Datenbank in StringGrid füllen?

  Alt 11. Jan 2018, 13:47
Ich schätze/hoffe mal, dass die 5 mio hier nur ein Missverständnis in der Nutzung der Komponenten ist. Also auch die Stringgridvariante nur ein "Workaroung" ist, um einen Teil der Daten anzuzeigen.
Geht es dann letztlich um die Anzeige eines Teils der Datenmenge, so können sehr wohl datensensitive Komponenten genutzt werden. Die bekommen dann eben nur eine definierte Menge an Daten geliefert.
Das wäre vielleicht das Gewollte, wenn man davon ausgeht, dass die standard Verwendungsmöglichkeiten dieser Komponenten (noch) nicht bekannt sind.
Gruß, Jo
  Mit Zitat antworten Zitat
W4lt3r

Registriert seit: 4. Jan 2018
Ort: Ottendorf-Okrilla
12 Beiträge
 
#2

AW: Tabelle aus PG Datenbank in StringGrid füllen?

  Alt 12. Jan 2018, 13:33
Danke für alle die mir geholfen haben ich stelle einfach meine Komplette Lösung zum beurteilen zu verfügung.
Delphi-Quellcode:
nit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Error,
  FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def, FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys,
  FireDAC.Phys.PG, FireDAC.Phys.PGDef, FireDAC.VCLUI.Wait, FireDAC.Stan.Param, FireDAC.DatS, FireDAC.DApt.Intf,
  FireDAC.DApt, FireDAC.Comp.DataSet, FireDAC.Comp.Client, Vcl.ExtCtrls, Vcl.DBCtrls, Vcl.Grids, Vcl.DBGrids,
  FireDAC.Comp.UI, Vcl.StdCtrls, Vcl.Mask;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    FDQuery1: TFDQuery;
    FDPhysPgDriverLink1: TFDPhysPgDriverLink;
    FDConnection1: TFDConnection;
    Button1: TButton;
    Memo1: TMemo;
    StringGrid1: TStringGrid;
    Label1: TLabel;
    RadioGroup1: TRadioGroup;
    procedure Button1Click(Sender: TObject);
  private
    function GetWidthText(const Text:String; Font:TFont) : Integer;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i,Zähler,OldW,NewW: Integer;

begin
 OldW:= 64;
 for i := 0 to StringGrid1.RowCount do
  StringGrid1.Rows[i].Clear;
 StringGrid1.RowCount:= 0;
 StringGrid1.ColCount:= 0;
 Zähler:= 1;
 if FDQuery1.Active then FDQuery1.Close;
 FDQuery1.SQL.Text:= Memo1.Text;
 FDQuery1.Open;
 StringGrid1.ColCount:= FDQuery1.Fields.Count;
 for i := 0 to FDQuery1.Fields.Count - 1 do begin
  StringGrid1.Cells[i, 0]:= FDQuery1.Fields[i].FieldName; {List[i];}
 end;
 while not FDQuery1.Eof do begin
  StringGrid1.RowCount:= StringGrid1.RowCount +1;
  for i := 0 to FDQuery1.Fields.Count - 1 do begin
   StringGrid1.Cells[i, Zähler] := FDQuery1.Fields[i].AsString;
  end;
  Inc(Zähler);
  FDQuery1.Next;
 end;
 Zähler:= 0;
 i:= 0;
 while i <= StringGrid1.ColCount do begin
  while Zähler <= StringGrid1.RowCount do begin
   NewW:=GetWidthText(StringGrid1.Cells[i, Zähler], StringGrid1.Font);
   if NewW > OldW then begin
    OldW:= NewW;
   end;
   Inc(Zähler);
  end;
  Zähler:= 0;
  if OldW > 64 then Stringgrid1.ColWidths[i] := OldW+10;
  OldW:= 64;
  Inc(i)
 end;
 StringGrid1.Refresh;
end;

function TForm1.GetWidthText(const Text:String; Font:TFont) : Integer;
var LBmp: TBitmap;
begin
 LBmp := TBitmap.Create;
 try
  LBmp.Canvas.Font := Font;
  Result := LBmp.Canvas.TextWidth(Text);
 finally
  LBmp.Free;
 end;
end;

end.
Ich setze ein Limit im Memo mit einem SQL Statement. Ihr hattet recht mit der sinn haftigkeit, habe die Person falsch verstanden. Es sollte am Ende nur eine Herausforderung sein.

Tut mir Leid

Geändert von W4lt3r (12. Jan 2018 um 13:41 Uhr)
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Tabelle aus PG Datenbank in StringGrid füllen?

  Alt 12. Jan 2018, 13:56
Das Laden von 5.000.000 Datensätzen wurde ja schon angesprochen und du hast es ja auch entsprechend umgesetzt.

Trotzdem will ich hier einmal die VirtualTreeView Komponente in den Raum werfen, die für solch große Datenmengen ebenfalls gemacht ist.

Die Einarbeitung in die Komponenten mag zwar etwas schwierig sein, aber dafür profitiert man später von den Vorzügen umso mehr.

Einfach mal ausprobieren. Bei Fragen einfach hier (also in einem neuen Thread) posten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz