Connectionsting wo eingeben? Hilfe!



  • Hallo

    Also ich habe ein Programm geschrieben welches mir daten aus einer access Datenbank per odbc ausliest. Das mach ich mit hile eines CRecordsets.

    Nun will ich diese Appikation leicht für andere nutzen benutzbar machen. Ich habe schon rausgefunden das ich dazu einen Connection stinrg brauche habe mir dann denke ich auch mal den richtigen von connectionstings.com besorg.

    Nur leider weíß ich nicht wo ich den Einitragen muss.

    Kann mir da wer helfen suche schon soooo lange!

    Vielen Dank im vorraus

    Jens



  • Eigentlich solltest Du Deinem CRecordets-Konstruktor ein CDatabase Objekt übergeben. Der enthält dann den Connection-String.
    Falls Du NULL übergibst, wird die Methode "GetDefaultConnect" vom Recordset aufgerufen, die Du natürlich auch überschreiben kannst.
    Bei CDatabase gibst Du den COnnection-String in der "Open" Funktion an...



  • open("Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;" )

    oder ist das falsch? wenn ich auch ne access db zugreifen will. Weil so geht es net.



  • Eigentlich sollte es so gehen, vermutlich ist aber das letzte Semikolon zu viel:
    http://www3.telus.net/public/tmlohnes/ODBC_DSN_Less.htm



  • aso ich hatte kein CDatabase objekt 🙂

    CDatabase affe;
    	affe.OpenEx("Driver={Microsoft Access Driver (*.mdb)};Dbq=datenbank.mdb;Uid=;Pwd=;");
    
    m_artikel.Open();
    m_artikel.MoveFirst();
    MessageBox(m_artikel.m_Beschreibung);
    

    Aber jetzt greift er immer noch über die ODBC verbingung zu die ich am Anfang also beim ertsllen des Recorsets ausgewählt habe.



  • Es geht auch ohne CDatabase - denn um das Objekt zu nutzen, musst du es auch dem Recordset geben. ⚠

    CDeinRecordset recSet(dasDatabaseObjekt);
    

    In deiner Recordsetklasse hast du die Funktion GetDefaultConnect. Da drin steht der Connectionstring. 🙂



  • Jens Bond schrieb:

    open("Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;" )

    oder ist das falsch? wenn ich auch ne access db zugreifen will. Weil so geht es net.

    Du meinst sicher CDatabase::Open.

    MSDN schrieb:

    virtual BOOL Open( LPCTSTR lpszDSN, BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE,LPCTSTR lpszConnect = “ODBC;”, BOOL bUseCursorLib = TRUE );

    ->

    Open("",FALSE,FALSE,"hier der Conn-Str"); //connStr: "ODBC;DRIVER= ...
    

    So muss das aussehen. Und das funzt, weil damit arbeite ich gerade die ganze Zeit^^.
    OpenEx wäre mir hier lieber, aber das macht mir irgendwie dauernd Probleme. Damit habe ich nicht in jedem Fall Verbindung bekommen(greife hier auf Oracle,MSSQL und MySQL zu)



  • Pellaeon schrieb:

    OpenEx wäre mir hier lieber, aber das macht mir irgendwie dauernd Probleme. Damit habe ich nicht in jedem Fall Verbindung bekommen(greife hier auf Oracle,MSSQL und MySQL zu)

    Das macht nicht nur dir Probleme. 😉



  • Jo weist du woran das liegt? Der Vorteil bei OpenEx der mir gefällt: wenn keine Verbindung zustande kommt, kann man den automatischen ODBC_Dialog unterdrücken. Bei Open kommt der ja leider immer. Aber was bringts wenn OpenEx dafür die Verbinfung nicht hinbekommt, wenn es eigentlich gehen müsste ... .



  • Woran es liegt weiß ich nicht. Aber wie man es relativ gut umgehen kann. 😉
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-116639.html



  • estartu_de schrieb:

    Es geht auch ohne CDatabase - denn um das Objekt zu nutzen, musst du es auch dem Recordset geben. ⚠

    CDeinRecordset recSet(dasDatabaseObjekt);
    

    In deiner Recordsetklasse hast du die Funktion GetDefaultConnect. Da drin steht der Connectionstring. 🙂

    ja genau da steht er dirnnen hatte ich auch so gedacht. Aber leider weiß ich da net genau wo. Habe alle mir logisch erscheinen Sachen schon ausprobiert ein Codeschnippel wäre da nicht schlecht.

    CString artikel::GetDefaultConnect()
    {
    	return _T("ODBC;DSN=datenbank");
    
    }
    

    Bisher sieht es so aus. Jetzt will ich das ja automatisieren. Aber irgendwie egal wo ich den String eingeben Es kommen immer fehler.



  • Jens Bond schrieb:

    CString artikel::GetDefaultConnect()
    {
    	return _T("ODBC;DSN=datenbank");
    	
    }
    

    Bisher sieht es so aus. Jetzt will ich das ja automatisieren. Aber irgendwie egal wo ich den String eingeben Es kommen immer fehler.

    Das ist die richtige Stelle. Zeig doch mal deine Versuche. 🙂



  • CString artikel::GetDefaultConnect()
    {
        return _T(""Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;" ");
    
    }
    

    so habe ich dann das gemacht. Aber es funzt net!



  • Das dürfte gar nicht erst compilieren, weil du " statt \" in einem String verwendet hast.
    Mach mal:

    CString artikel::GetDefaultConnect()
    {
        return _T("\"Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;\" ");
    }
    


  • da kommt dann ein Debug assertion fehler 😞

    File afxdb.inl
    Line: 86

    komisch komisch!



  • schreib mal am anfang des Strings "ODBC;"



  • return _T("ODBC;""\"Driver={Microsoft Access Driver (*.mdb)};Dbq=datenbank.mdb;Uid=;Pwd=;\" ");
    

    also so?

    dann kommt die aufforderung eine datasource auszuwählen und dann wieder der fehler.



  • Werden die Anführungszeichen im Connection-String überhaupt benötigt? Wenn nicht, dürfte das hier richtiger sein:

    return _T("Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=; ");
    


  • so habe ich es schon probiert



  • ajo ich sehen schon ihr könnt mir auch nicht wieterhelfen.

    Aber irgendwer muss doch schonmal das gleiche Problem gehabt haben!

    Edit: Wenn ich dann debugge kommt an der stelle. variable benötigt Stack-Rahmen


Anmelden zum Antworten