CDaoDatabase Objekt wiederverwenden
-
Hallo !
Ich habe in einer Klasse CDaoDatabase Objekt inizialisiert. Dann habe ich mittels dieses Objekt DatenBank erstellt. Wie kann ich dieses Objekt in einer anderen Klasse verwenden ,um die Datenbank weiter zu verarbeiten?
-
Gib es doch einfach weiter.
-
wie kann ich das machen?
ich habe dises Ojekt in einer Ereignisfunktion initialisiert.
-
Yan, wenn ich dein Programm nicht kenne, kann ich das nur so schwammig sagen, da es immer von der Struktur abhängt.
Stell dir das vor wie Staffellauf, jeder kann die DB nur an einen geben, den erkennt oder von so jemandem erfragen.Ansonsten wurde diese Frage in Abwandlung shcon x mal gestellt - ist da nix dabei für dich?
-
void Ctest1Dlg::OnBnClickedButton1()
{
CFileDialog fileDlg (TRUE, ".", "mdb",
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, "Access Files (.mdb)|.mdb|All Files (.)|.*||"
, 0);// Display the file dialog. When user clicks OK, fileDlg.DoModal()
// returns IDOK.
if( fileDlg.DoModal ()==IDOK );
CString pfad1;
CString name;
pfad1= fileDlg.GetPathName();
CDaoDatabase* m_db= new CDaoDatabase();
m_db->Open(pfad1,FALSE,FALSE,_T(
"" ));
name=m_db->GetName();MessageBox(name);
OnOK();
CMyDia dlg;
dlg.DoModal();}
Ich moechte den Zeiger m_db in einer anderen Klasse benutzen.
Wie kann ich das machen?
-
Du solltest es "andersrum" machen (weil es ein Dialog ist):
Erstelle in deiner Doc oder App-Klasse (wenn du nur ein Doc hast, reicht das Doc) einen Zeiger auf CDaoDatabase.
Den gibst du dem Dialog mit z.B. im Konstruktor.Und im Dialog wird die Datenbank geöffnet.
Wenn der dann wieder geschlossen wird, bleibt die Datenbank aber offen und du kannst jederzeit mit den Zugriffsfunktionen dran kommen.
Schau dir an:
AfxGetApp
AfxGetMainWnd
GetActiveDocument
dynamic_cast
RTTI (das ist eine Projekteinstellung, die du für dynamic_cast brauchst)