Autor |
Beitrag |
D. Annies
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Mo 25.10.10 08:16
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
_________________ ut vires desint, tamen est laudanda voluntas
|
|
zuma
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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; |
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
iKilledKenny
Beiträge: 394
Erhaltene Danke: 8
Win XP
D5 Prof, C# Express 2005
|
Verfasst: Mo 25.10.10 10:29
Ich denke es liegt an den doppelten Anführungszeichen (").
|
|
D. Annies
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: 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
_________________ ut vires desint, tamen est laudanda voluntas
|
|
bummi
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mo 25.10.10 19:42
Hast Du Dir den erzeugten SQL mal anzeigen lassen?
|
|
D. Annies
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Mo 25.10.10 22:10
Hi Bummi,
dieser Code funktioniert an einer anderen PrgStelle einwandfrei, das wundert mich ja so.
Gruß, Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
Xion
Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: 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.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
D. Annies
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Di 26.10.10 08:47
Jetzt Funktioniert es:
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
_________________ ut vires desint, tamen est laudanda voluntas
|
|
|