Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Problem mit SQL Abfrage (https://www.delphipraxis.net/56302-problem-mit-sql-abfrage.html)

waschlap 3. Nov 2005 14:33

Datenbank: Interbase • Zugriff über: SQL - Abfrage

Problem mit SQL Abfrage
 
Hi Leute,

ich wie immer mal ein Problem:

SQL-Code:
SQL.Text:='Select idteil,benennung,benennung2,klassifi From TTEIL where (IDTEIL = ' +QuotedStr(TeilenrE.Text) + ') OR (BENENNUNG = ' +QuotedStr(Bng1E.Text) + ') OR (BENENNUNG2 = ' +QuotedStr(Bng2E.Text) + ') AND ((KLASSIFI like ''R%'') OR (KLASSIFI like ''S%'')) ';
Ich weiß einige werden mich gleich erschießen warum ich es nicht Params gemacht habe jedoch ist meine Frage wieso steigt die abfrgae aus wenn ich "(BENENNUNG2 = ' +QuotedStr(Bng2E.Text)"hinzufüge?? Ohne dies funktioniert sie einwand frei.

Um Hilfe wird dringends gebeten.

etom291272 3. Nov 2005 14:37

Re: Problem mit SQL Abfrage
 
was heist aussteigen :?:

bekommst du eine exception bei der ausführung oder dauerts ewig :?:

r_kerber 3. Nov 2005 14:38

Re: Problem mit SQL Abfrage
 
Zitat:

Zitat von waschlap
jedoch ist meine Frage wieso steigt die abfrgae aus wenn ich "(BENENNUNG2 = ' +QuotedStr(Bng2E.Text)"hinzufüge??

Was heißt das genau. Bekommst Du eine Fehlermeldung oder eine leere Antwortmenge? Falls letzteres, solltest Du Dir mal die Logik der WHERE-Klausel genauer anschauen. Eventuell mußt du ja noch mehr klammern.

waschlap 3. Nov 2005 14:45

Re: Problem mit SQL Abfrage
 
Aussteigen heißt das er mir alle Datensätze anzeigt obwohl ich nur nach nen bestimmten suche.

Wenn ich den Teil mit BENENNUNG2 weg lasse bei meiner Abfrage zeigt er mir genau das gesuchte an.


Wieso passiert das kann ich keine zwei OR - Verknüpfungen in eine Abfrage nehmen??

Mfg

Manu

r_kerber 3. Nov 2005 14:51

Re: Problem mit SQL Abfrage
 
Kann es sein, daß Du die OR's vor dem AND auch noch in Klammern einschließen mußt?

franktron 3. Nov 2005 14:52

Re: Problem mit SQL Abfrage
 
Doch nur man sollte die Klammer richtig setzen sont sucht er nämlich z.b. garnichts wenn nämlich in Bng2E.Text nix drinsteht was genau das ergebniss bringt was du hast.

waschlap 3. Nov 2005 15:07

Re: Problem mit SQL Abfrage
 
und wie??

Delphi-Quellcode:
SQL.Text:='Select idteil,benennung,benennung2,klassifi From TTEIL where (IDTEIL = ' +QuotedStr(TeilenrE.Text) + ') OR (BENENNUNG = ' +QuotedStr(Bng1E.Text) + ') OR (BENENNUNG2 = ' +QuotedStr(Bng2E.Text)+ ') AND ((KLASSIFI like ''R%'') OR (KLASSIFI like ''S%'')) ';

Klammern sind doch richtig oder nicht??


Mfg
Manu

r_kerber 3. Nov 2005 16:55

Re: Problem mit SQL Abfrage
 
Was genau willst denn erreichen?
So etwas (wie's jetzt aussieht)

(IDTEIL = TeilenrE.Text) OR (BENENNUNG = Bng1E.Text) OR (BENENNUNG2 = Bng2E.Text) AND ((KLASSIFI like 'R%') OR (KLASSIFI like 'S%'))

oder so etwas

((IDTEIL = TeilenrE.Text) OR (BENENNUNG = Bng1E.Text) OR (BENENNUNG2 = Bng2E.Text)) AND ((KLASSIFI like 'R%') OR (KLASSIFI like 'S%'))

ozz 3. Nov 2005 17:34

Re: Problem mit SQL Abfrage
 
Hallo!
Schau Dir das Beispiel vom r_kerber an. Zu beachten ist ,daß AND eine höhere Priorität hat. Deshalb immer schön Klammern setzen.

Sir Rufo 3. Nov 2005 22:37

Re: Problem mit SQL Abfrage
 
Nee, nich unbedingt Params, aber Format hilft da gewaltig, kuckst Du:
Delphi-Quellcode:
SQL.Text:=Format('Select idteil,benennung,benennung2,klassifi From TTEIL where (IDTEIL = %s ) OR (BENENNUNG = %s ) OR (BENENNUNG2 = %s ) AND ((KLASSIFI like ''R%'') OR (KLASSIFI like ''S%'')) ',
[QuotedStr(TeilenrE.Text), QuotedStr(Bng1E.Text), QuotedStr(Bng2E.Text)]);
oder kuckst Du mit meinem insFormat (unter Freeware zu finden):
Delphi-Quellcode:
SQL.Text:=insFormat('Select idteil,benennung,benennung2,klassifi From TTEIL where (IDTEIL = %S ) OR (BENENNUNG = %S ) OR (BENENNUNG2 = %S ) AND ((KLASSIFI like %S ) OR (KLASSIFI like %S )) ',
  [TeilenrE.Text, Bng1E.Text, Bng2E.Text, 'R%', 'S%']);
Die QuotedStr() brauchst Du hier nicht mehr, weil die Formatzeichen in GROSS (%S anstatt %s) automatisch die QuotedStr() mit einbeziehen. Auf sowas kommt man, wenn man schreibfaul ist :mrgreen:

So bleibt die Programmierung schön übersichtlich und kann sich entweder um die SQL-Syntax kümmern oder um die Parameter.

cu


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:17 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