Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL über Memo und edit text (https://www.delphipraxis.net/204025-sql-ueber-memo-und-edit-text.html)

Tommi1966 16. Apr 2020 09:52

Datenbank: SQLite3 • Version: 3 • Zugriff über: zconnect

SQL über Memo und edit text
 
Hallo zusammen,
folgendes Problem beschäftigt mich
auf einer Form habe ich folgende Komponenten
Memo1,edit1,edit2,edit3,Button1

Wie kann man nun folgendes realisieren
memo1 wird zur Laufzeit rein geschrieben
edit1.text wird zur Laufzeit mit z.B. Test1 gefüllt
edit2.text, edit3.text ebenso

in dem Memo möchte ich nun folgendes eingeben ( die select soll Variable sein )

select * from Tabelle where (Feld1=edit1.text and Feld2=edit2.text and Feld3=edit3.text) or (Feld1=edit2.text)

wie muss ich in dem Memo die edit angeben, so das wenn ich auf den Button klicke folgendes erscheint

select * from Tabelle where (Feld1=Test1 and Feld2=Test2 and Feld3=Test3) or (Feld1=Test2)

Vorab schon mal vielen Dank für eure Mühe

DeddyH 16. Apr 2020 10:03

AW: SQL über Memo und edit text
 
Das Einfachste (wenn auch nicht das Eleganteste oder Performanteste) wäre wohl eine Stringersetzung mit StringReplace.
Delphi-Quellcode:
Memo1.Text := StringReplace(Memo1.Text, 'edit1.text', '' + Edit1.Text + '', [rfReplaceAll, rfIgnoreCase]);

himitsu 16. Apr 2020 10:51

AW: SQL über Memo und edit text
 
Zitat:

Das Einfachste
wären Parameter.

Delphi-Quellcode:
SQLKomponente.SQL.Text := 'select * from Tabelle where (Feld1=:edit1 and Feld2=:edit2 and Feld3=:edit3) or (Feld1=:edit2)';
SQLKomponente.ParamByName('edit1').Value := Edit1.Text;
Und wenn man das nicht nur ausführen, sondern wirklich den SQL-Text haben will,
dann gibt es bei so mancher Komponente oft auch eine Funktion, wo man sich den SQL-Text so zurückgeben lassen kann, dass dort die Makros und Parameter durch das Zugewiesene ersetzt wurden.

Tommi1966 16. Apr 2020 10:58

AW: SQL über Memo und edit text
 
Ich möchte euch danken

habe die Antwort von DeddyH in meinem Programm schon verarbeitet und es dient meinem Zweck voll und ganz

den Vorschlag von himitsu werde ich auch noch probieren

das Thema hätte sich so mit erledigt

der Programmiercode sieht nun so aus

text1:=query3.FieldByName('repmemo').AsString;
text1:=StringReplace(text1, 'edit8.text', '' + label25.Caption + '' , [rfReplaceAll, rfIgnoreCase]);
text1:=StringReplace(text1, 'edit9.text', '' + label26.caption + '' , [rfReplaceAll, rfIgnoreCase]);
text1:=StringReplace(text1, 'edit3.text', '' + Edit3.Text + '' , [rfReplaceAll, rfIgnoreCase]);
try
query1.active:=false;
query1.sql.clear;
query1.sql.add(text1);
query1.sql.text:=text1;
query1.active:=true;
except
on e: Exception do begin
MessageDLG('Fehler!'+#13#10+'Keine Auswahldaten vorgegeben !'+#13#10+e.message,mtError,[mbOk],0);
exit;

himitsu 16. Apr 2020 11:20

AW: SQL über Memo und edit text
 
Zitat:

Delphi-Quellcode:
'' + xxx + ''

Wer böse ist, der verwendet zumindest Delphi-Referenz durchsuchenQuotedStr, auch wenn das eigentlich die Maskierung von Delphi-Stings ist und rein garnichts mit SQL zu tun hat, welches z.B. auch ein
Delphi-Quellcode:
\
kennt. (aber in unzähligen Deplhi-SQL-Tutorials wird das Verbrechen begangen diese Funktion zu verwenden, drum machen das zuviele)

Irgendwo in den Units der Query-Komponenten sollte sich aber eine Funktion verstecken, welche SQL-Namen und SQL-Strings richtig maskieren kann.
(meistens auch mit "Quote" oder "Escape" im Namen)


PS: [DELPHI]...[/DELPHI]

Jumpy 16. Apr 2020 11:42

AW: SQL über Memo und edit text
 
'' + label25.Caption + ''

Wieso funktioniert das? Hätte sowas erwartet:

'''' + label25.Caption + ''''

p80286 16. Apr 2020 12:56

AW: SQL über Memo und edit text
 
Mmm "'+irgendwas+'" wäre meine wahl.

Gruß
K-H

Delphi.Narium 16. Apr 2020 13:11

AW: SQL über Memo und edit text
 
Damit erhälst du dann aber einen String der '+irgendwas+' enthält ;-)

Will man in 'nem String ein Hochkomma haben, so muss man zwei Hochkommas schreiben.

Will man nun am Anfang eines Strings ein Hochkomma haben, muss man drei Hochkommas schreiben.

Soll ein String aus einem Hochkomma bestehen, muss man vier Hochkommas schreiben.

Meiner Meinung nach ist Jumpys Erwartung richtig.

[edit]
Wenn jedoch in label25.Caption und label26.Caption sowie Edit3.Text der Inhalt bereits in Hochkommata steht, dürfte es auch funktionieren.

In dem Falle wären jedoch das '' + bzw. das + '' entbehrlich.

Medium 16. Apr 2020 13:59

AW: SQL über Memo und edit text
 
Die Hochkommata (egal welche jetzt) wären jedoch falsch, wenn das entsprechende DB Feld kein Text wäre, und in dem Edit z.B. eine Zahl steht. Diese Unsicherheit allein würde mich schon dazu bewegen, das wie bereits vorgeschlagen mit Parametern zu machen.

himitsu 16. Apr 2020 14:09

AW: SQL über Memo und edit text
 
Zitat:

Zitat von Jumpy (Beitrag 1462223)
'' + label25.Caption + ''

Wieso funktioniert das? Hätte sowas erwartet:

'''' + label25.Caption + ''''

Stimmt.

Aber wie gesagt, Parameter oder zumindestens eine Escape-Funktion, die das richtig macht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 Uhr.
Seite 1 von 3  1 23      

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