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 :
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.
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.