Datenbank: Paradox • Version: 5 • Zugriff über: BDE
Paradox First/Limit
Hallo liebe Gemeinde,
da ist er wieder mal mit einer(hoffenlich einer der letzten meinerseits) Paradox Frage (der Weg zu Firebird ist geebnet und auch endlich beschritten). Doch nun zur Frage: Werden bei einem select * from.. alle records eingelesen? Wenn ja: gibt es eine möglichkeit dies zu beschränken (First und Limit tut ja IMHO in LocalSQL nicht,oder)? Danke für eure Antworten im voraus Gruß Dirk |
AW: Paradox First/Limit
Code:
SELECT * FROM WHERE <Bedingung>
|
AW: Paradox First/Limit
Prinzipiell hast du recht, geht aber in meinem Fall nicht,weil es in keiner Tabelle keinen Wert gibt, auf den ich mich verlassen kann, weil:
<weiter aushol> Eigentlich geht es mir darum einzelne Tabellen dynamisch zu erweitern. das funktioniert auch recht gut. Nur muss ich dazu wissen, ob das Feld schon existiert(sonst gibt es ne excepetion) dazu mache ich ein select * from xxxx und dann ein try query.fieldbyname('gesuchtesFeld')...except addField. </weiter aushol> Ich weiss, dass man auch über die TTable.Fielddefs die Felder abfragen kann, aber dazu muss ja IMHO die Tabelle geöffnet werden(und damit werden ja auch alle records geholt, oder) Und genau das wollte ich halt verhindern. Damit müsste meine Frage eigentlich heissen: Wie kann ich an einer Paradox Tabelle feststellen, ob ein Feld existiert, ohne dass alle Records transferiert werden?!? Gruß Dirk |
AW: Paradox First/Limit
Code:
oder sowas
.. where 1=2
|
AW: Paradox First/Limit
Code:
select * from xxx where 1<>1
|
AW: Paradox First/Limit
where 1=2?
Und das funktioniert? Na dann werde ich das mal testen. Danke für die Antworten! |
AW: Paradox First/Limit
Sicher funktioniert das, es kommt eine leere Datenmenge zurück. Nur würde ich dann nicht mit einem Try-Except-Block arbeiten, sondern einfach überprüfen, ob die von FieldByName zurückgegebene TField-Instanz gültig (also Assigned) ist.
|
AW: Paradox First/Limit
Zitat:
|
AW: Paradox First/Limit
Manche mögen das vielleicht anders sehen, aber ich finde, Exceptions sind nicht das beste Mittel zur Ablaufsteuerung.
[edit] Wie, hatte ich doch oben beschrieben:
Delphi-Quellcode:
[/edit]
var
Field: TField; begin ... Field := DeinDataset.FieldByName('KratzMichHinten'); if not Assigned(Field) then addField; |
AW: Paradox First/Limit
Hi DeddyH,
das mit dem where 1=2 funktioniert tatsächlich, aber wenn ich mitFieldByname auf ein Feld zugreife, das es nicht gibt gibt es eine Exception.... (zumindest delphi2006, in XE5 noch nicht getestet) Dann muss ich wohl beim try..except bleiben ;-(( Dennoch DANKE an alle! |
AW: Paradox First/Limit
Stimmt, ich habe gerade noch einmal nachgeschaut.
Zitat:
|
AW: Paradox First/Limit
Du könntest auch FindField benutzen.
|
AW: Paradox First/Limit
Damit hab ich es wohl verwechselt :lol:
|
AW: Paradox First/Limit
Zitat:
Code:
loslassen. Dann bekommst Du sofort die Exception ohne erst das Query-Ergsbnis auswerten zu müssen.
SELECT <zu_untersuchendes_Feld> FROM <Tabelle> WHERE 1=2
|
AW: Paradox First/Limit
In Summe dürfte wohl das FindField langsamer sein, hat dann mit dem assigned den charmanten Vorteil, daß mir in der IDE beim debuggen(sofern die Felder nicht vorhanden sind) nicht immer die Exceptions um die Ohren fliegen...
Mit dem Select FieldToCheck from xxx where 1=2 dürfte man wohl schneller unterwegs sein... Ach ja es führen dann halt doch viele Wege nach Rom... Funktioniert unter LocalSQl eigentlich soetwas wie: IF NOT Exist select FieldToCheck from xxx Alter Table xxx add FieldToCheck(syntax ist wahrschinlich nicht so ganz richtig, geht ja auch nur um die Frage ob das prinzipiell funktioniert) Danke Gruß Dirk |
AW: Paradox First/Limit
Zitat:
Egal wie viele Datensätze da drin sind, der Inhalt ist sofort da! Nichts und keine Datenbank ist schneller :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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