Using DAO in THREAD

kerian

Erfahrenes Mitglied
Hi zusammen,
bis jetzt habe ich immer mir globale Instanzen von CDaoDatabase CDaoRecordset gebildet und dann damit halt gearbeitet.
Code:
CDaoDatabase db6; //Datenbank-Variable
CDaoRecordset rs6(&db6); //RecordSet zuweisen


Öffnen der Datenbak und des Recordset sieht dann bei mir so aus
Code:
db.Open(_T("GR2.mdb"));
rs6.Open(AFX_DAO_USE_DEFAULT_TYPE,m_dbsqlstr,NULL);//RecordSet öffnen
n = rs6.GetRecordCount();

Jetz kann ich mich in der Datenbank bewegen und halt arbeiten.

Danach das ganze schließe.
Code:
db6.Close();
rs6.Close();

Nun wollte ich das in ein Thread packen! Und bekomme die folgende Meldung!
Code:
	// Get the workspace from the workspaces collection
	DAO_CHECK(pDaoState->m_pDAODBEngine->get_Workspaces(
=>		&m_pDAOWorkspaces));
	DAO_CHECK(m_pDAOWorkspaces->get_Item(var, &m_pDAOWorkspace));


Meine Threadfunftion
Code:
UINT CGR2Data::ThrDA() 
{ 

db6.Open("Test.mdb", FALSE);
rs6.Open(AFX_DAO_USE_DEFAULT_TYPE,m_dbsqlstr,NULL);// RecordSet öffnen
n = rs6.GetRecordCount();
 //
 //Arbeiten in der Datenbank
 // zu Kontrolle 
  AfxMessageBox("TEST");
 //              					
db6.Close();
rs6.Close();
		
}

Bis jetzt hat das immer in anderen Funktionen geklappt :confused:
Ich Arbeite mit VC++ 6.0
 
Zuletzt bearbeitet:
AFAIK ist DAO nicht threadsicher bzw. funktioniert überhaupt nur dann, wenn die DAO-Aufrufe aus dem Hauptthread der Anwendung kommen.
 
Na supi,
Ich will Daten aus einer Datenbank holen und dann in einer Datei speichern.
Da es ganz schön viele Daten werden können wollte ich die Verarbeitung in einem Thread bewerkstelligen!
Bis jetzt habe ich das in der OnTimer(UINT nIDEvent) Methode untergebracht.
Code:
if(OnWertdb(320,1) == 1){           //Abfrage welche Gruppe
saveFile.SeekToEnd();
saveData.m_time = CTime::GetCurrentTime();
saveData.m_temp_u = OnWertdb(3,1);
saveData.m_temp_o = OnWertdb(4,1);
saveData.m_feuchte = OnWertdb(159,1);
saveData.m_kl_luv = OnWertdb(6,1);
saveData.m_kl_lee = OnWertdb(22,1);
saveData.m_veg_hzg = OnWertdb(58,1); 
saveData.m_unter_hzg = OnWertdb(66,1);
saveData.m_ober_hzg = OnWertdb(74,1);
saveData.m_schat = OnWertdb(115,1);
saveData.m_energ = OnWertdb(122,1);
saveData.m_verdu = OnWertdb(135,1);
saveData.m_a_temp = OnWertdb(1,1);
saveData.m_a_feuchte = OnWertdb(157,1);
saveData.m_windsp = OnWertdb(11,1);
saveData.m_windri = OnWertdb(12,1);
saveData.m_licht = OnWertdb(114,1);
saveData.m_regen = OnWertdb(2,1);
saveData.m_gruppe = 1;
saveFile.Write(reinterpret_cast<char*>(&saveData),sizeof(saveData));

Und das braucht soviel Zeit das meine Anwendung stockt wenn diese Methode ausgefürt wierd !
 
Zurück