Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TQuery variabel (https://www.delphipraxis.net/146202-tquery-variabel.html)

fl63 15. Jan 2010 13:32

Datenbank: Paradox und BDE • Zugriff über: SQL

TQuery variabel
 
Hallo!

Ich beschäftige mich seit kurzem mit SQL. Meine erste Abfrage

Delphi-Quellcode:
 with Query1 do
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select * from gesamt3 where feld001 = "AACHEN" ');
    Active:=True;
  end;
funktioniert.

Nun möchte ich "AACHEN" variabel machen


Delphi-Quellcode:
 with Query1 do
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select * from gesamt3 where feld001 = Edit1.text ');
    Active:=True;
  end;
das funktioniert nicht.

Wo ist mein Fehler? und wie mache ich sowas richtig.

ATSV 15. Jan 2010 13:43

Re: TQuery variabel
 
Hallo

So dürfte das ganze Funktionieren
Delphi-Quellcode:
with Query1 do
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select * from gesamt3 where feld001 = :text');
    ParamByName('text').asString := Edit1.Text;
    Active:=True;
  end;

fl63 15. Jan 2010 13:51

Re: TQuery variabel
 
Vielen Dank für die schnelle Hilfe.

Wie sieht dann eigentlich die Syntax aus mit der ich zB. AA?HEN abfragen kann? habe gelesen mit like aber die genaue Syntax stand nicht dabei.

Jens Hartmann 15. Jan 2010 13:59

Re: TQuery variabel
 
Hallo fl63,

das mit Like ist schon ganz OK.
SQL-Code:
    SQL.Add('Select * from gesamt3 where feld001 Like 'AA_HEN');
Gruß Jens

Bernhard Geyer 15. Jan 2010 14:05

Re: TQuery variabel
 
Wildcards im SQL:

Für ein Zeichen "_"
Für beliebige Anzahl von Zeichen "%"

fl63 15. Jan 2010 14:12

Re: TQuery variabel
 
Dann sieht also der vollständige Text so aus:

Delphi-Quellcode:
with Query1 do
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select * from gesamt3 where feld001 like = :text');
    ParamByName('text').asString := Edit1.Text;
    Active:=True;
  end;
das heißt der Platzhalter wäre in Jens Fall ein ' _ ' . Kann man den andere Platzhalter so ohne weiters einsetzen oder gibt es da Vorschriften.

Ich merke gerade das diese Frage bereits erklärt wird.

In meinem Edit1.Text hätte ich gerne ein ' # ' als Platzhalter. Das ist wohl nicht möglich?

Sherlock 15. Jan 2010 14:14

Re: TQuery variabel
 
Alles ist möglich. Ersetzte dann einfach auf dem Weg zum SQL-Statement das '#' durch das '_' ;)

Sherlock

fl63 15. Jan 2010 14:20

Re: TQuery variabel
 
@ sherlock

Was heißen soll...??

Sherlock 15. Jan 2010 14:22

Re: TQuery variabel
 
Frage: Wie ersetze ich Zeichen in einem String?
Suche nach der Lösung erfolgt im allgemeinen auf Englisch. also Frage übersetzen:
How can I replace characters in a string?
Ergebnis:
Delphi-Referenz durchsuchenstringreplace

Sherlock

fl63 15. Jan 2010 14:25

Re: TQuery variabel
 
Meine Frage bezog sich auf SQL Statement.

Sherlock 15. Jan 2010 14:30

Re: TQuery variabel
 
Ach, ich hatte verstanden, Du möchtest in Deinem Edit eine Eingabe in Form von 'Aac#en' erlauben, die dann in deinem SQL natürlich als 'Aac_en' ankommen muss. Aber wenn ich Dich falsch verstanden habe, dann sorry.

Sherlock

Jens Hartmann 15. Jan 2010 14:31

Re: TQuery variabel
 
Das wollte Sherlock Dir damit sagen..

Delphi-Quellcode:
  SQLString := StringReplace(Edit1.Text, #, '_', [rfReplaceAll]);
[EDIT]@Sherlock Ich glaube das hat er auch gemeint [/EDIT]

Gruß Jens

fl63 15. Jan 2010 14:40

Re: TQuery variabel
 
Hab ich auch.

Mir ist nur der Begriff Statement etwas unverständlich. da ich mich seit kaum 3 Stunden mit SQL genauer beschäftige.

Ich bedanke mich bei Euch für die schnellen Antworten.

Sherlock 15. Jan 2010 15:45

Re: TQuery variabel
 
Na, dann passt ja jetzt alles.

Abgesehen davon, daß hier natürlich an einer Stelle die Anführungszeichen fehlen.
Zitat:

Zitat von Jens Hartmann
Delphi-Quellcode:
  SQLString := StringReplace(Edit1.Text, #, '_', [rfReplaceAll]);

Und Statement ist nur Englisch für Aussage/Anweisung.

Sherlock

mschaefer 15. Jan 2010 16:32

Re: TQuery variabel
 
Stichwort "Anführungszeichen"
es ist auch kein Fehler die im Edit.Text zu filtern, sonst kann man sich die SQL zerschiessen lassen.
Grüße in die Runde // Martin

fl63 16. Jan 2010 10:20

Re: TQuery variabel
 
Das hier ist der vollständige Code den ich bis jetzt habe

Delphi-Quellcode:
begin
SQLString:= StringReplace(Edit2.Text,'#','_',[rfReplaceAll]);
SQLString:= StringReplace(SQLString,'..','%',[rfReplaceAll]);
Edit1.Text:= SQLString;
  with Query1 do
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select * from gesamt3 where feld002 Like :text ');
    ParamByName('text').asString := SQLString;
    Active:=True;
  end;
end;
Leider funktioniert die Abfrage nur direkt also:

Chemiker wird gefunden --> Biochemiker wird nicht gefunden

gibt es eine Möglichkeit die Abfrage Schreibweisentolerant zu machen?

Ich weiß es liegt an der Groß und Kleinschreibung des Chemiker
oder muß man das mit mehreren Abfragen gestalten und die Ergebnisse Appenden also anhängen?

mschaefer 16. Jan 2010 11:01

Re: TQuery variabel
 
Delphi-Quellcode:
begin
SQLString:= StringReplace(Edit2.Text,'#','_',[rfReplaceAll]);
SQLString:= StringReplace(SQLString,'..','%',[rfReplaceAll]);
SQLString:= StringReplace(SQLString,char(34),' ',[rfReplaceAll]);
Edit1.Text:= SQLString;
  with Query1 do
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select * from gesamt3 where feld002 Like %:text% ');
    ParamByName('text').asString := SQLString;
    Active:=True;
  end;
end;

fl63 16. Jan 2010 14:16

Re: TQuery variabel
 
Also mit der Änderung von mschaefer


Zitat:

Zitat von mschaefer
Delphi-Quellcode:
SQLString:= StringReplace(SQLString,char(34),' ',[rfReplaceAll]);

passiert gar nichts.

Ich nehme an das Char(34) der ascii Code für Anführungszeichen sein soll.
Ein solches ist in Chemiker ja nicht vorhanden.
Meine Frage ist nach wie vor:

Wier bekomme ich eine SQL Abfrage zustande die Schreibweisentolerant ist?

mschaefer 16. Jan 2010 14:23

Re: TQuery variabel
 
Delphi-Quellcode:
  SQL.Add('Select * from gesamt3 where feld002 Like %:text% ');
Die % vor und nach dem Text sind dafür zuständig. // Grüße Martin

mkinzler 16. Jan 2010 14:26

Re: TQuery variabel
 
Wenn du mit Schreibweise Groß-/Kleinschreibung meinst, benötigst musst du beide gleichschalten

SQL-Code:
... where Upper( <Feld>) like Upper( :text);

fl63 16. Jan 2010 14:30

Re: TQuery variabel
 
verändert Upper nicht alle Zeichen in Groß bzw. Kleinbuchstaben?

Chemiker --> CHEMIKER

Teekeks 16. Jan 2010 14:32

Re: TQuery variabel
 
Genau das soll es doch für den vergleich, es weden ja nicht die gespeicherten Daten verändert...

mkinzler 16. Jan 2010 14:33

Re: TQuery variabel
 
Zitat:

verändert Upper nicht alle Zeichen in Groß bzw. Kleinbuchstaben?
Ja
aber da beide zu vergleichenden Werte entsprechend geändert werden

Chemiker wird zu CHEMIKER und chemiker auch, was wieder das selbe ist

fl63 16. Jan 2010 14:40

Re: TQuery variabel
 
ES FUNKTIONIERT ES FUNKTIONIERT...

noch eine kleine Frage: Kann mir jemand einen Link zur SQL Befehlsreferenz und entsprechenden Tutorials geben? Das Tutorial von Delphi-Treff habe ich mittlerweilen gefunden.
Danke

mkinzler 16. Jan 2010 14:44

Re: TQuery variabel
 
Der SQL-Dialekt unterscheidet sich stark von DBMS zu DBMS, da solltest du gezielt beim verwendeten nachschauen ( und ich würde da kein Paradox/BDE nehmen!)

fl63 16. Jan 2010 14:52

Re: TQuery variabel
 
Ich habe aber nur das von Delphi mitgelieferte SQL.
Welche Dialekte sind denn noch empfehlenswert und kostenlos. Und wo bekommt man sie her.

Teekeks 16. Jan 2010 14:53

Re: TQuery variabel
 
Ich kann MySQL und Firebird empfehlen.

mkinzler 16. Jan 2010 14:54

Re: TQuery variabel
 
Kostenlos sind z.B. FireBird, SQLite, MSSQL express, Oracle express, MySQL( für OpenSource), ...

Jens Hartmann 16. Jan 2010 15:07

Re: TQuery variabel
 
Ich kann Dir auch die Firebird empfehlen. Dazu den kostenlosen "IBExpert Personal" und die zumindest für den Anfang die kostenlose Komponente ZEOS. Ich sage für den Anfang, weil ich sonst hier gesteinigt werde, da nicht alle hier was von ZEOS halten. Ich persönlich habe damit übrigens keine Problem.

Hier mal die drei Links zum download...

Firebird
ZEOS
IBExpert

Gruß Jens

mkinzler 16. Jan 2010 15:18

Re: TQuery variabel
 
Zitat:

da nicht alle hier was von ZEOS halten.
Hat halt Probleme mit der Transaktionsverwaltung ( keine harten Comitts ohen Trennung der Verbindung

Jens Hartmann 16. Jan 2010 15:31

Re: TQuery variabel
 
Zitat:

Zitat von mkinzler
Hat halt Probleme mit der Transaktionsverwaltung ( keine harten Comitts ohen Trennung der Verbindung

Das ist richtig, aber auch kein Problem, wenn man das beim Commit beachtet.

Gruß Jens

fl63 17. Jan 2010 14:00

Re: TQuery variabel
 
Also werd ich mir mal einige der genannten Dialekte mal ansehen.

Zurück zum Ausgangsthema: Anbei mein Quelltext mit einem Button zur Abfrage von beiden Feldern

Delphi-Quellcode:
Var SQLString1,SQLString2: String;
begin
If Edit1.Text = '' then Edit1.Text := '..';
If Edit2.Text = '' then Edit2.Text := '..';
SQLString1:= StringReplace(Edit1.Text,'#','_',[rfReplaceAll]);
SQLString1:= StringReplace(SQLString1,'..','%',[rfReplaceAll]);
SQLString2:= StringReplace(Edit2.Text,'#','_',[rfReplaceAll]);
SQLString2:= StringReplace(SQLString2,'..','%',[rfReplaceAll]);
  with Query1 do
  begin
    Active:=False;
    SQL.Clear;
    SQL.Add('Select * from gesamt3 where Upper (feld001) Like Upper (:feld1.text) ');
    SQL.Add('And Upper (feld002) Like Upper (:feld2.text) ');
    ParamByName('feld1.text').asString := SQLString1;
    ParamByName('feld2.text').asString := SQLString2;
    Active:=True;
  end;
end;
Jetzt ist nur noch die Tabelle "gesamt3" noch nicht variabel
Muß ich den Quelltext jedesmal ändern wenn eine andere Tabelle benötigt wird??

waldforest 17. Jan 2010 15:15

Re: TQuery variabel
 
Hallo,
da das SQL_ADD als Parameter einen String erwartet dürfte doch eigentlich
Tabellenname := 'gesamt3';
SQL.Add('Select * from '+Tabellenname+' where Upper (feld001) Like Upper (:feld1.text) ');

funktionieren,
oder ??

mkinzler 17. Jan 2010 16:18

Re: TQuery variabel
 
Ja, wobei man wohl besser SQL.Text nehmen sollte.

waldforest 17. Jan 2010 18:23

Re: TQuery variabel
 
Hallo,
da habe ich auch mal wieder etwas gelernt.

Die Sufu hat mit dem Hinweis hier etwas gefunden

SQL.Text


Allerdings habe ich gelesen, dass Firebird/Zeos die `Nodes` nicht kann, werd ich später mal ausbrobiern

blawen 17. Jan 2010 20:33

Re: TQuery variabel
 
Zitat:

Zitat von Jens Hartmann
...die zumindest für den Anfang die kostenlose Komponente ZEOS. Ich sage für den Anfang, weil ich sonst hier gesteinigt werde, da nicht alle hier was von ZEOS halten...

Welche Komponentensammung wäre empfehlenswerter?

Jens Hartmann 17. Jan 2010 21:25

Re: TQuery variabel
 
Hallo,

aus Erfahrung kann ich da nichts zu sagen, weil ich nur mit ZEOS arbeite und zufrieden bin. Aber hier im Forum wird viel von FIBPlus und IBDAC gesprochen. Schau dir mal den folgenden Link an.

Firebird mit Delphi

Gruß Jens

mkinzler 18. Jan 2010 06:52

Re: TQuery variabel
 
Bei reinen Abfragen sollte wohl auch IBX ( Interbase Express) ausreichen, welches bei Delphi dabei ist.

fl63 18. Jan 2010 18:28

Re: TQuery variabel
 
Zitat:

Zitat von waldforest
Hallo,
da das SQL_ADD als Parameter einen String erwartet dürfte doch eigentlich
Tabellenname := 'gesamt3';
SQL.Add('Select * from '+Tabellenname+' where Upper (feld001) Like Upper (:feld1.text) ');

funktionieren,
oder ??


Tabellenname allein macht die Sache doch nicht variabel. Ich stelle mir die Sache mit einer FilelistBox oder einem OpenDialog vor. Ich habs auch damit ausprobiert nur zeigen die Ergebnisse keine Wirkung.

Jens Hartmann 18. Jan 2010 19:20

Re: TQuery variabel
 
Zitat:

Zitat von fl63
Tabellenname allein macht die Sache doch nicht variabel. Ich stelle mir die Sache mit einer FilelistBox oder einem OpenDialog vor. Ich habs auch damit ausprobiert nur zeigen die Ergebnisse keine Wirkung.

Was hast Du denn bislang im Bezug auf die FileListBox oder das OpenDialog ausprobiert.

Gruß Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 Uhr.
Seite 1 von 2  1 2      

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