Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi FIBPlus - Fragen (https://www.delphipraxis.net/102048-fibplus-fragen.html)

Hansa 22. Okt 2007 18:44

Datenbank: IB/FB • Zugriff über: FIBPlus

FIBPlus - Fragen
 
es geht von hier aus weiter (wer jetzt noch was schreibt, der hat wohl FIBPlus und das von vorher passt so dann sowieso nicht :???: ) :

http://www.delphipraxis.net/internal...=795905#795905

Das hier sind doch zwei Welten :

Delphi-Quellcode:
  TFIBQuery = class(TComponent,ISQLObject)
Was ist das ? Von TComponent ausgehend wird alles neu gemacht. Anscheinend gab es keinen geeigneten Vorfahren. Eine solche Vorgehensweise ist hier zwar sehr oft zu besichtigen, in diesem Fall aber wohl tatsächlich nicht zu vermeiden gewesen. Denn das macht keiner freiwillig.

Delphi-Quellcode:
  TFIBCustomDataSet = class({$IFDEF D10+}TWideDataset{$ELSE}TDataset{$ENDIF},ISQLObject)
Da siehts schon anders aus. Vor allem liegt da der Hund begraben, weswegen das Ganze TDataset-kompatibel ist. Selbst wenn da irgendwas 1 Millisekunde länger dauert, das DataSet würde ich trotzdem verwenden. So eine kurze Zeitspanne lässt sich wohl kaum genau messen. Mache mal den Rechner aus und starte das Query-Programm zuerst und dann das vom Dataset. Danach wieder Rechner aus und die beiden Programme in umgekehrter Reihenfolge starten. Könnte sein, dass das "Ergebnis" völlig anders aussieht.

Dann das mit GetTableName. Mache das für interne Zwecke z.B. so :

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  DbDS.Close;
  DbDS.SelectSQL.Text := 'select RDB$RELATION_NAME from rdb$relations order by RDB$RELATION_NAME';
  DbDS.Open;
  DbDS.First;
  i := 0;
  while not DbDS.Eof do begin
    i := i + 1;
    DetailDS.Close;
    DetailDS.SelectSQL.Text := 'select count (*) AS ANZAHL from '+DbDS.FieldByName ('RDB$RELATION_NAME').AsString;
    DetailDS.Open;
    TableName := DbDS.FieldByName ('RDB$RELATION_NAME').AsString;
    Anzahl := DetailDS.FieldByName ('ANZAHL').AsString;
    if pos ('$',TableName) = 0 then begin
      if StrToInt (Anzahl) <> 0 then
        Memo1.Lines.Add(Tablename + blanks (20-length (TableName)) + ' '+ Anzahl)
      else
        Memo2.Lines.Add(Tablename + blanks (20-length (TableName)) + ' '+ Anzahl);
    end;
    DbDS.Next;
  end;
end;
Das SelectSQL am Anfang ermittelt zunächst mal die Tabellennamen. Ich will die Anzahl der Datensätze pro Tabelle wissen. Deshalb laufe ich die durch und lasse ein zweites DataSet die Anzahl ermiteln und zeige sie in einem Memo an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz