System DNS (ODBC) für Access DB erstellen
-
Hi Leute!
Ich habe ein prog mit Borland C++ Builder6 erstellt....welches eine Datenbank benutzt, auf die über ODBC zugegriffen wird!
Da mein Programm per setup (installshield
auch auf anderen rechnern installiert werden soll, frage ich mich, wie ich da für die mit installierte Datenbank eine System DNS einricht!Mache ich das über WinAPI? Wenn ja wie?
Oder kann ich das sogar im InstallShield einstellen?!
danke schonmal!
-
Du brauchst nicht zwingend ein DNS für deine Datenbank anzugeben. Du kannst direkt im Quelltext sagen das für ein Treiber du nutzen willst und wo die AccessDatei liegt.
Beispiel:
Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;"
-
Achso...
und wo genau muss ich das eingeben?
Also header oder so?
Welche form?Vielleicht kannst mir mal ein beispiel geben?!
-
Du musst nur eine Änderung bei der Funktion GetDefaultConnect() vornehmen.
Weitere Connectionstrings findest du unter www.connectionstrings.com
Hier ein kleines Beispiel:// myrecordset.cpp: Implementierungsdatei // #include "stdafx.h" #include "xxx.h" #include "myrecordset.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // myrecordset IMPLEMENT_DYNAMIC(myrecordset, CRecordset) myrecordset::myrecordset(CDatabase* pdb) : CRecordset(pdb) { //{{AFX_FIELD_INIT(myrecordset) m_ID = 0; m_Name = _T(""); m_nFields = 2; //}}AFX_FIELD_INIT m_nDefaultType = snapshot; } CString myrecordset::GetDefaultConnect() { // Neuer Connectionstring return _T("ODBC;Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\db1.mdb;"); } CString myrecordset::GetDefaultSQL() { return _T("[name]"); } void myrecordset::DoFieldExchange(CFieldExchange* pFX) { //{{AFX_FIELD_MAP(myrecordset) pFX->SetFieldType(CFieldExchange::outputColumn); RFX_Long(pFX, _T("[ID]"), m_ID); RFX_Text(pFX, _T("[Name]"), m_Name); //}}AFX_FIELD_MAP } ///////////////////////////////////////////////////////////////////////////// // Diagnose myrecordset #ifdef _DEBUG void myrecordset::AssertValid() const { CRecordset::AssertValid(); } void myrecordset::Dump(CDumpContext& dc) const { CRecordset::Dump(dc); } #endif //_DEBUG
-
und ich habe ja schon ein projekt, wo sehr viele wuerys und tables drin sind, die auf eine ODBC quelle zugreifen!
Kann ich da einfach das jetzt so machen wie oben beschrieben, oder geht das nicht mehr?!
PS:
Wäre für nähere erläuterung des oben gezeigten beispieles dankbar!
-
und noch ein problem, da ich ja sehe das ich hier den Datenbankpfad fest eingebe, mein Programm aber mit Installshield installiert wird, is ja nochn prob!
Da bei der installation der Pfad für das programm selbst angegeben werden kann!
-
also, bei dem connectionstring wird im einfach nur mitgeteilt was für ein Treiber er verwenden soll und wo die Accessdatei liegt. Es gibt noch möglichkeiten den User und das Passwort anzugeben.
Also wie oben beschrieben, dann geht dies.
Ob du dein projekt einfach so ändern kannst ist schwer zu sagen, da ich die struktur nicht kenne. Du könntest aber mal hingehen, ein Backup von dem projekt machen und es mal ändern, dann wirst du sehen ob dies funktioniert. Normalerweise sollte es aber klappen. Das dein Pfad zur Datei immer unterschiedlich ist wäre ja kein problem. Lies einfach den Pfad auf wo die datei liegt. Das kannst du auch unterschiedliche weise machen. Vorher per Registry speichern, diese dann auslesen, Pfad der exeDatei auslesen und dann weiter zur MDB Datei verweisen wenn diese im gleichen Verzeichnis liegt...
-
ich merke schon das ich im bereich WINAPI nich so der fuchs biN!
Hört sich für mich sehr kompliziert an, also das werde ich erst bei einem neuen Projekt umsetzten!
Jetzt paar blöde fragen, wo find ich die Funktion?
Wie und wo binde ich diese Funktion ein?Sorry, aber da bin ich echt noob!