Entwickler-Ecke
Datenbanken - Syntaxfehler in From-Klausel
D. Annies - Mo 25.10.10 08:16
Titel: Syntaxfehler in From-Klausel
Hi, Delpher,
ich bekomme bei dem folgenden Code die obige Fehlermeldung.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.BtGesAuswertgClick(Sender: TObject); begin opendialog1.Filter := 'DBDateien (*.dbf)|merge*.dbf'; if opendialog1.Execute then begin DaMod1.ADOTbMerge.Connection := DaMod1.ADOConnection1; DaMod1.ADOTbMerge.Close; DaMod1.ADOTbMerge.TableName := opendialog1.FileName; DaMod1.ADOTbMerge.Open; DaMod1.ADOQyKlaPers.close; DaMod1.ADOQyKlaPers.sql.text := format('select * from "%s" ', [DaMod1.ADOTbMerge.TableName]) + ' where not klasse like ''5%'' and not klasse like ''6%'' ' + 'order by klasse, name, vorname'; DaMod1.ADOQyKlaPers.open; showmessage('Schülerauswahl 78910DaZ ist getroffen');
form2.Button1.Enabled := false; form2.Show; end; end; |
Es wird klaglos kompiliert, der Fehler ist zur Laufzeit.
Wer kann mir da heraushelfen?
Danke, Detlef
zuma - Mo 25.10.10 10:13
Schau dir deinen Code mal genauer an :
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| DaMod1.ADOQyKlaPers.sql.text := format('select * from "%s" ', [DaMod1.ADOTbMerge.TableName]) + ' where not klasse like ''5%'' and not klasse like ''6%'' ' + 'order by klasse, name, vorname'; end; end; |
iKilledKenny - Mo 25.10.10 10:29
Ich denke es liegt an den doppelten Anführungszeichen (").
D. Annies - Mo 25.10.10 16:06
Hi,
nein leider nichts von beidem, habe eben noch einmal ca. 10 verschiedene andere
Versionen dieses Befehls ausprobiert - geht einfach nicht!
Danke für's Hingucken, aber was ist da los?
Gruß, Detlef
bummi - Mo 25.10.10 19:42
Hast Du Dir den erzeugten SQL mal anzeigen lassen?
D. Annies - Mo 25.10.10 22:10
Hi Bummi,
dieser Code funktioniert an einer anderen PrgStelle einwandfrei, das wundert mich ja so.
Gruß, Detlef
Xion - Mo 25.10.10 22:50
Enthält DaMod1.ADOTbMerge.TableName eventuell Leerzeichen?
Gib mal den SQL-Befehl an, wenn die Fehlermeldung kommt (also try, except ausenrum und SQL-String ausgeben lassen).
Wenn wir den SQL-String haben, der den Fehler verursacht, können wir bestimmt eher helfen.
D. Annies - Di 26.10.10 08:47
Jetzt Funktioniert es:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| procedure TForm1.BtGesAuswertgClick(Sender: TObject); var StripFn : string; begin opendialog1.Filter := 'DBDateien (*.dbf)|merge*.dbf'; if opendialog1.Execute then begin StripFn := extractfilename(opendialog1.FileName); delete(StripFn, length(stripfn)-3, 4); DaMod1.ADOTbMerge.Connection := DaMod1.ADOConnection1; DaMod1.ADOTbMerge.Close; DaMod1.ADOTbMerge.TableName := stripfn; DaMod1.ADOTbMerge.Open;
try showmessage(DaMod1.ADOTbMerge.TableName); DaMod1.ADOQyKlaPers.close; DaMod1.ADOQyKlaPers.sql.text := 'select * from ' + DaMod1.ADOTbMerge.TableName + ' where not (klasse like ''5%'') and not (klasse like ''6%'') ' + ' order by klasse, name, vorname'; DaMod1.ADOQyKlaPers.open; showmessage('Schülerauswahl 78910DaZ ist getroffen'); except showmessage(DaMod1.ADOQyKlaPers.sql.text); end; form2.DBGrid1.DataSource := DaMod1.DataSource2; form2.DBGrid1.DataSource.DataSet := DaMod1.ADOTbMerge; form2.DBGrid1.ReadOnly := true; form2.DBGrid1.PopupMenu := form2.PopupMenu1; form2.DBNavigator1.DataSource := form2.DBGrid1.DataSource; form2.DBNavigator1.VisibleButtons := [nbFirst,nbPrior,nbNext,nbLast];
showmessage('form2.DBGrid1 hat Daten');
form2.Button1.Enabled := false; form2.Show; end; end; |
Der Fehler lag also höher im Code.
Wahrscheinlich kann ich try .. except wieder rausnehmen.
LG, Detlef
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!