DAO multithreaded
-
Hallo allerseits,
Ich bastel gerade an einer größeren DB-Anwendung, die mehrere DBs synchronisiert.
Ich hab schon rausgefunden, das DAO Multithreading nicht sonderlich mag. Man sollte immer in dem Thread Open'en und Close'en in dem man auch damit arbeiten will. Soweit so gut ://symbolic code... UINT ThreadProc( void* pParam ) { AfxDaoInit(); OpenDbs() while(1){...do some stuff with Dbs...} CloseDbs(); AfxDaoTerm();
}
Funktioniert soweit. OpenDbs öffnet alle Dbs mit einem normalen CDaoDatabase::Open. Das ist alles kein problem, solange Open keine exception wirft. Dann funktiniert das ganze nur einmal : sprich, wenn ich ThreadProc beende und den Thread noch einmal starte, stürtzt die Anwendung ganz böse ab.
Als Workaround würde ich gerne einfach vor dem Open checken, ob die Datenquelle zu öffnen ist. Bei einer MDB checke ich einfach, ob es das File giebt. Kann ich eine ODBC-Quelle auch irgendwie einfach ohne sie zu öffnen auf "Erreichbarkeit" testen?
-
DAO im Jahr 2005
-
Yop, willkommen in der Gegenwart.
Hab auch schon überlegt auf ADO zu switchen. Aber wie vor längerer Zeit hier in einem Thread hier im Forum angedeutet war ADO nach ersten Benchmarks einfach zu lahm (will nicht ausschließen, das man das nicht noch hätte optimieren können).
Ich werde jetzt wohl mittels ODBC direkt vorher abchecken, ob die Datenquelle erreichbar ist. Ist zwar ein bisschen von hinten durchb die Brust ins Auge, aber da der Rest vorerst super funktioniert habe ich irgendwie keine Lust DAO komplett zu kicken.