ADOConnection ConnectionString Problem
-
Hallo Leute,
ich möchte eine db verbinden, logisch!
Sollte allerdings die netzwerkressource nicht zur verfügung stehen, liegt auf dem desktop eine backup der db!ich möchte da eben eine auswahl machen, das wenn die abfrage auf die db im netzwerk fehlschlägt, das man da die vom desktop verbindet (ohne opendialog usw)
habe mir das so gedacht:
if(DatenbankvomDesktopverbinden1->Checked) { DatenbankvomDesktopverbinden1->Checked=false; ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\\Dokumente und Einstellungen\\SchneiderS\\Desktop\\EKSMESSW.mdb;Mode=Share Deny None;Extended Properties="";Persist Security Info=False;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"; } else { DatenbankvomDesktopverbinden1->Checked=true; ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=\\Energie\IBK800\bDat1000\data\EKSMESSW.mdb;Mode=Share Deny None;Extended Properties="";Persist Security Info=False;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"; }so, und wenn ich nun umschalte, kommt eine exception, das dies bei einem geöffnetn objekt nicht möglich ist!
mache ich vor dem String ein ADOConnection->Close(); kommt ungültiger dateiname als exception!
Also wie löse ich das problem richtig?
-
Hm, versuch mal vor dem Starten der Anwendung in der IDE bei der ADOConnections Connected = false zu setzen.
-
hab ich schon!
keine änderung
Ich habe als connection string in der IDE den vom Netzwerkpfad eingegeben!
Umschalten kann ich über MainMenu-Eintrag!Wenn ich Abfrage ohne Umschalten geht es ohne probleme!
Sobald ich umschalte und erneut abfragen möchte, kommt "Ungültiger Dateiname"Ich habe vor dem Umschalten die Conenction per Close() geschlossen, und nach dem umschalten eigentlich über Open() geöffnet!
-
so sieht aktuell die sache aus:
void __fastcall TForm1::DatenbankvomDesktopverbinden1Click(TObject *Sender) { ADOConnection1->Close(); ADOConnection1->Connected=false; if(DatenbankvomDesktopverbinden1->Checked==false) { DatenbankvomDesktopverbinden1->Checked=true; ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=C:\\Dokumente und Einstellungen\\SchneiderS\\Desktop\\EKSMESSW.mdb;Mode=Share Deny None;Extended Properties="";Persist Security Info=False;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"; } else { DatenbankvomDesktopverbinden1->Checked=false; ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=\\Energie\IBK800\bDat1000\data\EKSMESSW.mdb;Mode=Share Deny None;Extended Properties="";Persist Security Info=False;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False"; } ADOConnection1->Connected=true; ADOConnection1->Open(); }
-
warum setzt du in der Funktion nochmal die Checkboxen auf true/false
(DatenbankvomDesktopverbinden1->Checked=true;) ?schau dazu bitte hier
eventuell löst das schon dein Problem
-
naja, es ist ja keine checkbox, sondern ein MainMenu Eintrag!
Der setzt die haken nicht selber!
hab das jetzt auch rausgenommen, da funktioniert es garnicht mehr!
-
ok, dann halt Menüpunkt
dein Quellcode funktioniert so einwandfrei, zumindest das Stückchen (mit setzten von true/false)an welcher stelle im Quellcode kommt denn der Fehler?
-
bei ADOConnection1->Connected=true;
ich denke es hat was mit dem ändern des connectionstrings der connection zu tun!
-
ich vermute eher es hat was mit dem ConnectionString an sich zu tun
findet er wirklich beide datenquellen? ich mein hast du beide mal für sich allein getestet?[Edit]kommt der Fehler wenn du versuchst auf die Netzwerk-Date zuzugreifen?
den willst du doch eigentlich sowieso abfangen, versuch mal eine Fehlerbehandlung mit try - catch
-
ja, wenn ich sie in der IDE eingebe, klappt es ohne probleme!
der fehler passiert auch immer erst nach dem umschalten!
-
In deinen Connection Strings sind Gänsefüße. Im Quellcode müssen die mit vorangestelltem Backslash geschrieben werden:
[...]Extended Properties=\"\";[...]