![]() |
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 |
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]);
|
AW: SQL über Memo und edit text
Zitat:
Delphi-Quellcode:
Und wenn man das nicht nur ausführen, sondern wirklich den SQL-Text haben will,
SQLKomponente.SQL.Text := 'select * from Tabelle where (Feld1=:edit1 and Feld2=:edit2 and Feld3=:edit3) or (Feld1=:edit2)';
SQLKomponente.ParamByName('edit1').Value := Edit1.Text; 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. |
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; |
AW: SQL über Memo und edit text
Zitat:
![]()
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] |
AW: SQL über Memo und edit text
'' + label25.Caption + ''
Wieso funktioniert das? Hätte sowas erwartet: '''' + label25.Caption + '''' |
AW: SQL über Memo und edit text
Mmm "'+irgendwas+'" wäre meine wahl.
Gruß K-H |
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. |
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.
|
AW: SQL über Memo und edit text
Zitat:
Aber wie gesagt, Parameter oder zumindestens eine Escape-Funktion, die das richtig macht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 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