![]() |
Datenbank: Paradox und BDE • Zugriff über: SQL
TQuery variabel
Hallo!
Ich beschäftige mich seit kurzem mit SQL. Meine erste Abfrage
Delphi-Quellcode:
funktioniert.
with Query1 do
begin Active:=False; SQL.Clear; SQL.Add('Select * from gesamt3 where feld001 = "AACHEN" '); Active:=True; end; Nun möchte ich "AACHEN" variabel machen
Delphi-Quellcode:
das funktioniert nicht.
with Query1 do
begin Active:=False; SQL.Clear; SQL.Add('Select * from gesamt3 where feld001 = Edit1.text '); Active:=True; end; Wo ist mein Fehler? und wie mache ich sowas richtig. |
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; |
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. |
Re: TQuery variabel
Hallo fl63,
das mit Like ist schon ganz OK.
SQL-Code:
Gruß Jens
SQL.Add('Select * from gesamt3 where feld001 Like 'AA_HEN');
|
Re: TQuery variabel
Wildcards im SQL:
Für ein Zeichen "_" Für beliebige Anzahl von Zeichen "%" |
Re: TQuery variabel
Dann sieht also der vollständige Text so aus:
Delphi-Quellcode:
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.
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; 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? |
Re: TQuery variabel
Alles ist möglich. Ersetzte dann einfach auf dem Weg zum SQL-Statement das '#' durch das '_' ;)
Sherlock |
Re: TQuery variabel
@ sherlock
Was heißen soll...?? |
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: ![]() Sherlock |
Re: TQuery variabel
Meine Frage bezog sich auf SQL Statement.
|
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 |
Re: TQuery variabel
Das wollte Sherlock Dir damit sagen..
Delphi-Quellcode:
[EDIT]@Sherlock Ich glaube das hat er auch gemeint [/EDIT]
SQLString := StringReplace(Edit1.Text, #, '_', [rfReplaceAll]);
Gruß Jens |
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. |
Re: TQuery variabel
Na, dann passt ja jetzt alles.
Abgesehen davon, daß hier natürlich an einer Stelle die Anführungszeichen fehlen. Zitat:
Sherlock |
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 |
Re: TQuery variabel
Das hier ist der vollständige Code den ich bis jetzt habe
Delphi-Quellcode:
Leider funktioniert die Abfrage nur direkt also:
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; 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? |
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; |
Re: TQuery variabel
Also mit der Änderung von mschaefer
Zitat:
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? |
Re: TQuery variabel
Delphi-Quellcode:
Die % vor und nach dem Text sind dafür zuständig. // Grüße Martin
SQL.Add('Select * from gesamt3 where feld002 Like %:text% ');
|
Re: TQuery variabel
Wenn du mit Schreibweise Groß-/Kleinschreibung meinst, benötigst musst du beide gleichschalten
SQL-Code:
... where Upper( <Feld>) like Upper( :text);
|
Re: TQuery variabel
verändert Upper nicht alle Zeichen in Groß bzw. Kleinbuchstaben?
Chemiker --> CHEMIKER |
Re: TQuery variabel
Genau das soll es doch für den vergleich, es weden ja nicht die gespeicherten Daten verändert...
|
Re: TQuery variabel
Zitat:
aber da beide zu vergleichenden Werte entsprechend geändert werden Chemiker wird zu CHEMIKER und chemiker auch, was wieder das selbe ist |
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 |
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!)
|
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. |
Re: TQuery variabel
Ich kann MySQL und Firebird empfehlen.
|
Re: TQuery variabel
Kostenlos sind z.B. FireBird, SQLite, MSSQL express, Oracle express, MySQL( für OpenSource), ...
|
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... ![]() ![]() ![]() Gruß Jens |
Re: TQuery variabel
Zitat:
|
Re: TQuery variabel
Zitat:
Gruß Jens |
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:
Jetzt ist nur noch die Tabelle "gesamt3" noch nicht variabel
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; Muß ich den Quelltext jedesmal ändern wenn eine andere Tabelle benötigt wird?? |
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 ?? |
Re: TQuery variabel
Ja, wobei man wohl besser SQL.Text nehmen sollte.
|
Re: TQuery variabel
Hallo,
da habe ich auch mal wieder etwas gelernt. Die Sufu hat mit dem Hinweis hier etwas gefunden ![]() Allerdings habe ich gelesen, dass Firebird/Zeos die `Nodes` nicht kann, werd ich später mal ausbrobiern |
Re: TQuery variabel
Zitat:
|
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. ![]() Gruß Jens |
Re: TQuery variabel
Bei reinen Abfragen sollte wohl auch IBX ( Interbase Express) ausreichen, welches bei Delphi dabei ist.
|
Re: TQuery variabel
Zitat:
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. |
Re: TQuery variabel
Zitat:
Gruß Jens |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 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-2025 by Thomas Breitkreuz