Autor Beitrag
peppi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Do 26.08.04 12:11 
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

ausblenden 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:

ausblenden 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 user profile iconKlabautermann: Code durch Delphi-Tags ersetzt.
MrCoder
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65

WinXP, SuSE Linux
D7 Ent
BeitragVerfasst: 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:


ausblenden SQL-Datei
1:
2:
3:
4:
select * from tabelle  
where feld1 = '%s'  
and feld2 like '%s'
order by feld1, feld2



ausblenden 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 user profile iconKlabautermann: Code durch Delphi-Tags ersetzt.
peppi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 800

win98, winXP
D4 Standard; D6 Personal
BeitragVerfasst: Do 26.08.04 23:34 
seas peppi! ;)

versuch es mal so:

ausblenden Delphi-Quelltext
1:
2:
3:
SELECT * FROM Tabelle  
WHERE (Feld1 LIKE "%s") AND (Feld2 LIKE "%s") 
ORDER BY Feld1


ausblenden 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? user defined image

mfg, stefan
peppi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65


delphi 7
BeitragVerfasst: Di 31.08.04 11:23 
Hey Stefan,

also ich hab jetzt noch eine Kleinigkeit verändert:

ausblenden 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!!