ADO Data Control, ConnectionString
-
Moin,
in einem Dialog benutze ich ein ADO Data Control zur Verbindung mit einer Access-Datenbank und ein DataGrid Control zur Anzeige der Datensätze. In den Eigenschaften des ADO Data Control wird die Verbindung zur Datenbank festgelegt, z.B.:Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\machines.mdb;Persist Security Info=False
Dabei wird natürlich die Existenz von C:\machines.mdb vorausgesetzt, was ich nicht möchte. Wenn ich nun vor dem (modalen) Aufruf des Dialogs die Verbindung per SetConnectionString einstellen möchte, bekomme ich eine Debug-Assertion. Wenn aber OnInitDialog aufgerufen wird, wurde die Verbindung mit C:\machines.mdb schon hergestellt. Weiss jemand, wie ich es ermöglichen kann daß der ConnectionString erst zur Laufzeit festgelegt wird, bzw. die voreingestellte Datenbank erst gar nicht geöffnet wird?
Vielen Dank im Voraus!
-
muss das in der OnInit sein?
olsen schrieb:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\machines.mdb;Persist Security Info=False
sonst mach das doch in ne eigene FKT in die kannst dann zuvor SetConnectionString rein machen. Nur so ne Idee ich arbeite halt mit Rekordsets
-
Danke erstmal für die Antwort,
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\machines.mdb;Persist Security Info=False
wird in den Eigenschaften des Steuerelements festgelegt. Irgendwo zwischen
CMeinDialog dlg; dlg.DoModal();
und
BOOL CMeinDialog::OnInitDialog()
wird die in den Steuerelement-Eigenschaften festgelegte Datenbank geöffnet. Ich weiss halt nicht wo genau das passiert, bzw. wie ich es verhindern kann. Ich möchte einfach nur vermeiden, daß auf dem Zielrechner eine im Prinzip überflüssige Datei existieren muss. Letzlich soll die Datenbank in einem Verzeichnis liegen, in dem auch auch noch andere Anwendungsdaten liegen. Wo dieses Verzeichnis liegt bestimmt der Benutzer. Nachdem die Datenbank (C:machines.mdb) geöffnet wurde, ist es auch kein Problem von OnInitDialog aus auf eine andere Datenbank (egal wo) umzustellen.
-
Wenn ich jetzt einfach mal versuche, eine Parallele zwischen ADO und ODBC zu ziehen, dann würde ich mal testen, was passiert, wenn du KEINEN Dateinamen angibst.
Leider kenne ich die Controls, die du da verwendest überhaupt nicht.
-
hm ich weiß es leider auch nicht so genau, da ich weder mit Dao noch mit Datadings arbeite ich mach es über ODBC und Recordsets, aber wenn es sehr unschön sein darf, dann lass doch eine leere Datenbank auf C:\machines.mdb, die frisst ja kein Brot wenn sie leer ist und die anderen kannst du ja dann verwalten. Oder du speicherst halt immer den Pfad von der vom User zuletzt geöffneten DB und sprichst beim nächsten mal die an und hoffst dass die da ist. Wenn dir das zu wackelig ist protokollier 10 oder 20 aufrufe und geh dann von hinten ran bis du eine findest, ist zwar alles nicht schön aber mehr fällt mir auch nicht ein.
-
@estartu_de:
Wenn ich jetzt einfach mal versuche, eine Parallele zwischen ADO und ODBC zu ziehen, dann würde ich mal testen, was passiert, wenn du KEINEN Dateinamen angibst.
-> hab ich schon probiert, bringt aber nix. Ohne den Dateinamen, bzw. den ConnectionString gibts Mecker (machines.mdb nicht gefunden). Wenn ich versuche ihn vor DoModal einzustellen, bekomme ich eine Debug-Assertion.Leider kenne ich die Controls, die du da verwendest überhaupt nicht.
-> ActiveX, MS ADO Data Control 6.0, MS DataGrid Control 6.0@Polofreak:
Im Zweifelsfall wird es darauf hinauslaufen, daß die Datei an einem vordefinierten Ort existieren muss, ist halt nur unschön und bringt Probleme, wenn Sie vom Anwender gelöscht wird.
-
olsen schrieb:
@estartu_de:
Wenn ich jetzt einfach mal versuche, eine Parallele zwischen ADO und ODBC zu ziehen, dann würde ich mal testen, was passiert, wenn du KEINEN Dateinamen angibst.
-> hab ich schon probiert, bringt aber nix. Ohne den Dateinamen, bzw. den ConnectionString gibts Mecker (machines.mdb nicht gefunden). Wenn ich versuche ihn vor DoModal einzustellen, bekomme ich eine Debug-Assertion.Hast du das so versucht?
Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False
-
Ja, unter anderem. Ich habe auch mal den kompletten ConnectionString weggelassen. Das bringt aber alles nichts, weil ich wenn ich solche Sachen vor dem modalen Aufruf meines Dialogs einstellen möchte eine Debug-Assertion bekomme.