Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADOQuery SQL String (https://www.delphipraxis.net/11924-adoquery-sql-string.html)

Budda 17. Nov 2003 08:59


ADOQuery SQL String
 
Guten Morgen,

wie kann ich mit der ADoQuery komponente eine SQL Abfrage gestalten die einen Wert von einem DBEdit mit einbezieht. Also ich hatte folgendes probiert, wobei ich mir schon fast gedacht hatte das das nicht geht:

SQL-Code:
select * from t_tabelle where wert1 = DBEdit1.Text
order by wert2
Sodele, jetzt ist die Frage wie bau ich den Wert vom DBEdit da mit ein ^^

Gruss
Budda

[edit=r_kerber]SQL-Tags gesetzt. Mfg, r_kerber[/edit]

markon 17. Nov 2003 09:15

Re: ADOQuery SQL String
 
moin moin.

:warn:

wenn es geht erst immer die suchfunktion nutzen.

http://www.delphipraxis.net/internal...519&highlight=

hatte selbiges problem. müßte dein problem lösen.

Budda 17. Nov 2003 09:30

Re: ADOQuery SQL String
 
Deinem Post hab ich folgendes entnommen
SQL-Code:
select * from t_tabelle where wert1 like "%'+DBEdit1.Text+'%"
order by wert2
Allerdings bekomm ich dann nen Fehler das der Spaltenname DBEdit1.Text usw. nicht bekannt wäre ^^

r_kerber 17. Nov 2003 09:41

Re: ADOQuery SQL String
 
Hallo Budda,

im Programm schreibst Du folgendes:
Delphi-Quellcode:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add ('select * from t_tabelle where wert1 like ' + QuotedStr ('%' + DBEdit1.Text + '%');
ADOQuery1.SQL.Add ('order by wert2');

Budda 17. Nov 2003 09:52

Re: ADOQuery SQL String
 
Ah wunderbar, danke euch das klappt wunderbar ;)
Für alle die die sich das noch raussuchen, da fehlte noch eine klammer
SQL-Code:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add ('select * from t_tabelle where wert1 like ' + QuotedStr ('%' + DBEdit1.Text + '%'));
ADOQuery1.SQL.Add ('order by wert2');

markon 17. Nov 2003 09:53

Re: ADOQuery SQL String
 
Delphi-Quellcode:
adoquery1.sql.Close;
adoquery1.sql.Clear;
adoquery1.sql.text := 'select * from tabelle1 where name like "%'+edsuch.text+'%" order by wert2';
adoquery1.open;
der bezeichner "wert2" ist meines erachten ein wenig unglücklich gewählt. da "wert2" ein spaltenname sein sollte. z.b. name ...

hier ein bsp. um einen teilstring mittels "like" zu suchen.
Delphi-Quellcode:
adoquery1.sql.text := 'select * from tabelle1 where name like "%'+edsuch.text+'%"'
ansonsten bei string-operationen "quotedstr" verwenden.

r_kerber 17. Nov 2003 09:54

Re: ADOQuery SQL String
 
Zitat:

Zitat von Budda
Für alle die die sich das noch raussuchen, da fehlte noch eine klammer

:oops: So etwas passiert in der Hektik.

markon 17. Nov 2003 09:55

Re: ADOQuery SQL String
 
alles klar. sehe du hast schon die lösung.
hat sich zeitlich überschnitten meine antwort.
:angle2:

Robert_G 17. Nov 2003 10:46

Re: ADOQuery SQL String
 
Moin,

Also ich weiß nicht wie das mit ADOQueries abläuft da ich Direct oracle access benutze.
Aber Problem mit in den SQLString reingebastelten Werten ist, dass der Server deinen SQL Code jedesmal neu parsen muss.

'WHERE WERT1 = ' + QuotedStr(Edit1.Text)

Es ist deshalb fast immer besser Bind Variablen zu nehmen.

'WHERE WERT1 = :SearchVal'

Die musst du dann vor dem ausführen noch zuweisen und das wars.

Ich habe keine Ahnung von ADO, aber ich denke doch, dass es dort auch geht.


1. dein Code wird übersichtlicher, du kannst den SQLCode weiterbenutzen und brauchst nur den Wert der Bindvariable ändern
2. Wenn du die Abfrage ein 2. Mal stelltst hat der Server den Code schon vorkompiliert zur Verfügung


Bei einer Oracle DB und vernünftigen Speichereinstellungen wird er sogar den Inhalt der Ursprungsmenge für eine Weile im Cache lassen, so dass nur noch darin gefiltert werden muss.
Was vor allem bei komplexen/großen Abfragen einen ungeheuren Performancezuwachs bedeutet.

Das müsste eigentlich bei jeder prof. DB der Fall sein.

mfG Robert


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 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 by Thomas Breitkreuz