![]() |
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 :???: ) :
![]() Das hier sind doch zwei Welten :
Delphi-Quellcode:
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.
TFIBQuery = class(TComponent,ISQLObject)
Delphi-Quellcode:
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.
TFIBCustomDataSet = class({$IFDEF D10+}TWideDataset{$ELSE}TDataset{$ENDIF},ISQLObject)
Dann das mit GetTableName. Mache das für interne Zwecke z.B. so :
Delphi-Quellcode:
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.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 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