DSN
-
Ich habe eine MFC Anwendung und eine MS Access DB und möchte nun das Programm auf einem anderen Rechner laufen lassen, aber ohne dieses einstellen unter der Systemsteuerung/ODBC Datenquelle.
Ich hab mal was mit DSN gehört oder gelesen, aber nicht ganz verstanden wie das gehn soll. Ich bitte daher um Hilfe und vielleicht auch n bisschen C++ code.
Ich benutze MS Visual C++6.0
MFG
-
Du musst in der funktion GetDefaultConnect( ) den Connectionstring übergeben.
Wie der passende ConnectionString aussehen muss kannst du unter http://www.connectionstrings.com/ nachschauen.
-
Und wo muss ich diese Funktion einfügen in meinem Code? Und das wars denn einfach? Einfach nur diese Funktion einfügen mit dem String und schon fertig?
Wäre echt cool wenns so einfach geht.
Danke für die Hilfe
MFG
-
Du musst eine eigene Klasse von CRecordSet ableiten und diese Funktion überschreiben.
http://www.willemer.de/informatik/db/odbcmfc.htm
-
Und muss ich irgendwas beim Erstellen der Anwendung beachten? Irgendwie Datenbankünterstützung oder einfach nur eine Dialogbasierte Anwendung und mir denn alles selbst zusammenschustern. Also Ableiten und Funktionen eintragen und so?
Oder was muss ich da genau machen?
-
Desert Storm schrieb:
Und muss ich irgendwas beim Erstellen der Anwendung beachten? Irgendwie Datenbankünterstützung oder einfach nur eine Dialogbasierte Anwendung und mir denn alles selbst zusammenschustern. Also Ableiten und Funktionen eintragen und so?
Oder was muss ich da genau machen?Wenn du es per Assistent machst erleichterst du dir die Arbeit. Im abgeleitetem CRecordSet kannst du ja dann den DSN von Hand ändern. Ist wahrscheinlich leichter wie alles selbst per Hand zu erstellen.
-
OK hab nun die Anwendun erstellt und die Funktion GetDefaultConnect auch gefunden. Da hab ich jetzt den ConnectionString von der Seite reingeschrieben und der Compiler meldet mir die Warnung:
"m" Nicht erkannte Folge von Escape-Zeichen.
Was auch immer das heißen mag. Ich hab den String genau kopiert und meine DB auch so genannt wies muss. Das "m" ist glaub ich der erste Buchstabe von dem Name der DB.
Hoffe du kannst mir da weiter helfen.
-
Zeig mal dein String!
-
CString GetDefaultConnect() { return _T("Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;"); }
Und denn kommt der Fehler
-
Desert Storm schrieb:
CString GetDefaultConnect() { return _T("Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;"); }
Und denn kommt der Fehler
Das Problem liegt bei C:\mydatabase.mdb. Dies muss C:\\mydatabase.mdb heißen!
-
OK die Fehlermeldung ist weg, aber wenn das Programm fertig geladen ist, wird gar nichts angezeigt. Alle Felder sind leer, obwohl ich den String jetzt richtig hab und die DB vorhanden und an der richtigen Stelle ist.
Und ich hab noch eine Frage. Wie kann ich die DB nach einer bestimmten Spalte alphabetisch sortieren? Soll jedesmal beim Starten des Programms gemacht werden. Denn muss ich ja einfach nur eine Funktion in die Initinstance oder so reinschreiben. Aber welche?
MFG
-
Desert Storm schrieb:
OK die Fehlermeldung ist weg, aber wenn das Programm fertig geladen ist, wird gar nichts angezeigt. Alle Felder sind leer, obwohl ich den String jetzt richtig hab und die DB vorhanden und an der richtigen Stelle ist.
Welche Felder meinst du den?
Desert Storm schrieb:
Und ich hab noch eine Frage. Wie kann ich die DB nach einer bestimmten Spalte alphabetisch sortieren?
MFGDies musst du per SQL Statment in deiner Abfrage machen.
-
Die Felder wo die Daten aus der DB angezeigt werden.
Also die Felder die die Membervariablen m_pSet->m_blubb haben.Und wie mache ich das mit einem SQL Statement?
-
Hab mal n bisschen gesucht für die SQL Statements und hab eins gefunden womit ich denke, dass ich meine DB Filtern kann. Aber es funktioniert wieder nicht. Ich gebe etwas ein, wonach gefiltert werden soll und er gibt keine Fehlermeldung oder so aus, sondern bleibt einfach bei dem aktuellen Datensatz stehen.
Code:CMove movedlg; if (movedlg.DoModal() == IDOK) { //Zeiger auf den Recordset holen CRecordset* pSet = OnGetRecordset(); //Sicherstellen, dass alle Änderungen gespeichert wurden if (pSet->CanUpdate() && !pSet->IsDeleted()) { pSet->Edit(); if (!UpdateData()) return; pSet->Update(); } //Neue Position einstellen UpdateData(TRUE); m_pSet->m_pDatabase->ExecuteSQL("SELECT * FROM Tebelle WHERE Feld = '" + movedlg.m_Move_To + "'"); m_pSet->Requery(); UpdateData(FALSE);
Meine Tabelle heißt wirklich Tabelle und die Spalte heißt Feld.
MFG