Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Paradox First/Limit (https://www.delphipraxis.net/181023-paradox-first-limit.html)

noisy_master 9. Jul 2014 10:13

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

vagtler 9. Jul 2014 10:17

AW: Paradox First/Limit
 
Code:
SELECT * FROM WHERE <Bedingung>

noisy_master 9. Jul 2014 12:10

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

jobo 9. Jul 2014 12:15

AW: Paradox First/Limit
 
Code:
.. where 1=2
oder sowas

baumina 9. Jul 2014 12:16

AW: Paradox First/Limit
 
Code:
select * from xxx where 1<>1

noisy_master 9. Jul 2014 14:55

AW: Paradox First/Limit
 
where 1=2?

Und das funktioniert? Na dann werde ich das mal testen. Danke für die Antworten!

DeddyH 9. Jul 2014 15:06

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.

noisy_master 9. Jul 2014 15:24

AW: Paradox First/Limit
 
Zitat:

Zitat von DeddyH (Beitrag 1264985)
...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...

warum? und wie ?

DeddyH 9. Jul 2014 15:25

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:
var
  Field: TField;
begin
  ...
  Field := DeinDataset.FieldByName('KratzMichHinten');
  if not Assigned(Field) then
    addField;
[/edit]

noisy_master 10. Jul 2014 08:37

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!

DeddyH 10. Jul 2014 08:47

AW: Paradox First/Limit
 
Stimmt, ich habe gerade noch einmal nachgeschaut.
Zitat:

Ist das angegebene Feld nicht vorhanden, wird eine EDatabaseError-Exception ausgelöst.
Da hab ich das wohl mit etwas anderem verwechselt, sry.

baumina 10. Jul 2014 08:47

AW: Paradox First/Limit
 
Du könntest auch FindField benutzen.

DeddyH 10. Jul 2014 08:48

AW: Paradox First/Limit
 
Damit hab ich es wohl verwechselt :lol:

Mikkey 10. Jul 2014 09:05

AW: Paradox First/Limit
 
Zitat:

Zitat von noisy_master (Beitrag 1265035)
Dann muss ich wohl beim try..except bleiben ;-((

Dann kannst Du es auch einfacher machen und gleich eine Query:

Code:
SELECT <zu_untersuchendes_Feld> FROM <Tabelle> WHERE 1=2
loslassen. Dann bekommst Du sofort die Exception ohne erst das Query-Ergsbnis auswerten zu müssen.

noisy_master 10. Jul 2014 13:36

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

arnof 10. Jul 2014 13:40

AW: Paradox First/Limit
 
Zitat:

Zitat von noisy_master (Beitrag 1264889)
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

Hi zu Paradox kann man diverse Meinungen haben, aber wenn Du den Inhalt der gesamten Tabelle haben willst (alle Felder ohne Where), dann nehme eine TTable und mache die Tabelle damit auf.

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