Entwickler-Ecke
Datenbanken - SQL-Text aus Textdatei (mit Variablen)
peppi - Do 26.08.04 12:11
Titel: SQL-Text aus Textdatei (mit Variablen)
Hallo,
hab ein kleines Problem mit meiner SQL Abfrage.
Benutze Delphi 7 und muß ein Programm, welches mit Delphi 4 geschrieben wurde, wieder nutzbar machen :wink:
Habe nun mehrere Abfragen in mehreren textdateien gespeicher und lade diese dann mit loadfromfile. Hier einmal ein Beispiel:
datei: query1.sql
Quelltext
1: 2: 3: 4:
| select * from tabelle where feld1 = ' + QuotedStr(DBText1.Field.Text + '%')' and feld2 like 'QuotedStr(Edit2.Text + '%')' order by feld1, feld2 |
im delphi-code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Edit1Enter(Sender: TObject); begin with query1 do sql.clear; sql.LoadFromFile('C.\....'); Open; end; end; |
Nun bekomme ich immer die Fehlermeldung:
Allgemeiner SQL-Fehler. Ungültiger Operator für Datentyp MODULO Typ VARCHAR.
Liegt sicher am Prozentzeichen. Aber liegt das an meiner falschen Abfrage oder kann man sowas nicht aus einer Textdatei auslesen??
Puhm, hoffe das war einigermaßen verständlich und mir kann hier jemand helfen :(
Moderiert von
Klabautermann: Code durch Delphi-Tags ersetzt.
MrCoder - Do 26.08.04 12:40
Moin,
Dein Fehler ist offensichtlich und ziemlich dumm (sorry ist so).
So wies aussieht hast du einfach Delphi-Code in eine SQL-Datei getan.
Wie soll das auch funktionieren? (SQL denkt es wäre SQL-Code)
Ich würds so machen:
SQL-Datei
1: 2: 3: 4:
| select * from tabelle where feld1 = '%s' and feld2 like '%s' order by feld1, feld2 |
Delphi-Code
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.Edit1Enter(Sender: TObject); begin with query1 do begin sql.clear; sql.LoadFromFile('C.\....'); sql.Text := Format(sql.Text, [QuotedStr(DBText1.Field.Text + '%'), QuotedStr(Edit2.Text + '%')]); Open; end; end; |
Viel Spass beim Coden! :D
MfG,
MrCoder
Moderiert von
Klabautermann: Code durch Delphi-Tags ersetzt.
peppi - Do 26.08.04 14:11
Titel: Haut nich hin ...
Hey MrCoder,
hab's jetzt mal so versucht wie du geschrieben hast, aber das haut nicht hin. Bekomme den selben fehler wieder (Ungültiger Operator für Datentyp MODULO) :evil:
Hab's jetzt so abgeschrieben wie's bei dir stand. Muß ja immernoch an diesem %-zeichen liegen. Irgend ne Idee??
P.S.: Als DUMM würd ich mich nicht unbedingt bezeichnen, hat doch jeder mal angefangen oder?? :wink:
grayfox - Do 26.08.04 23:34
seas peppi! ;)
versuch es mal so:
Delphi-Quelltext
1: 2: 3:
| SELECT * FROM Tabelle WHERE (Feld1 LIKE "%s") AND (Feld2 LIKE "%s") ORDER BY Feld1 |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TMainDlg.Abfrage1Click(Sender: TObject); var aFilename: TFileName; begin aFilename:= aDatenDir + '\SQLText.TXT'; Label3.Caption:= aFilename; Label3.Update;
with Query1 do begin SQL.clear; SQL.LoadFromFile(aFilename); SQL.Text:= Format(SQL.Text,[Edit1.Text,Edit2.Text]); SQL.SaveToFile(aDatenDir + '\Abfrage.txt'); Open end; end; |
hängen die DBEdit-felder in deinem beispiel an der gleichen datasource wie deine query?
falls ja, dann verwende Edit-felder, sonst kann es zu problemem kommen.
du könntest mir noch erklären, wo der vorteil bei deinem vorgehen liegt - ich konnte darin keinen sehen. Da du die parameter ohnehin erst zur laufzeit übergibst, kannst auch gleich den ganzen SQL-string erzeugen, oder hab ich dabei etwas wesentliches übersehen?
mfg, stefan
peppi - Di 31.08.04 11:23
Hey Stefan,
also ich hab jetzt noch eine Kleinigkeit verändert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| with Query1 do begin SQL.clear; SQL.LoadFromFile(aFilename); SQL.Text:= Format(SQL.Text,[Edit1.Text +'%', Edit2.Text +'%']); SQL.SaveToFile(aDatenDir + '\Abfrage.txt'); Open end; |
Die Prozentzeichen am Ende waren noch wichtig für's "like". Bin ich durch deinen Tipp mit "SaveToFile" gekommen :D
Was ich damit erreichen will: es handelt sich hierbei um ein Suchformular (nach verschiedenen Nummern) und mit jeder weiteren eingebene Nummer werden die Datensätze weiter eingeschränkt. Die Abfrage hab ich in meinem Script allerdings mehrmals enthalten (habe noch einige weitere Suchkriterien). Wenn sich an der Abfrage was ändert muss ich aufpassen das ich auch alle Abfragen im Skript ändere. Daher ist es besser, sie nur einmal in einer Datei zu halten. Mein Skript ist ohnehin noch nicht wirklich optimal aber für den Anfang reicht's.
Dank dir auf alle Fälle für deine Hilfe, läuft jetzt super :wink:
Bis dann, Jana!!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!