beim dynamischen DSN erzeugen Pfad aus INI



  • Hi kann mir jemand sagen wie ich beim dynamischen erzeugen meiner DSN den Pfad zu DB aus einer INI lesen kann?
    Das mach ich bisher:

    GetPrivateProfileString(strSection,strKey3,"Default",Pfad.GetBuffer(200),200,filename);//hier les ich aus meiner INI
    SQLConfigDataSource(NULL, // Handle des Fensters, welsches die Registrierung durchführt
    		ODBC_ADD_SYS_DSN, // Ein Datensatz soll hinzugefügt werden
    		ODBCDRIVER,
    		DSN
    		DESCRIPTION
    		FILETYPE
    		DBPFAD  //hier soll der String aus der INI rein aber das bekomm ich irgendwie nicht hin!
    		SCANROWS);
    

    Vielen Dank schon im Voraus



  • so z.b

    char* SerializeToSqlConfigString(const CStringArray& arr)
    {
       size_t bfrSize = 0;
       for(int i=0;i<arr.GetCount();i++)
          bfrSize += (arr[i].GetLength()+1);
    
       char *res = new char[bfrSize+1];
       memset(res,0,bfrSize+1);
       char *ptr = res;
       for(int i=0;i<arr.GetCount();i++)
       {
          strcpy(ptr,arr[i]);
          ptr += (arr[i].GetLength()+1);
       }
    
       return res;
    }
    
    void doit()
    {
    //..
    CStringArray arr;
    arr.Add("DSN=New Excel Data Source\0");
    arr.Add("Description=New Excel Data Source\0");
    arr.Add("FileType=Excel\0" );
    arr.Add("DataDirectory=C:\\EXCELDIR\0");
    arr.Add("MaxScanRows=20\0");
    
    char* sql_param = SerializeToSqlConfigString(arr);
    // SQLConfigDataSource call
    delete[] sql_param;
    //..
    }
    


  • WOW cool hat doch noch jemand ne Idee vielen Dank schon mal im Voraus. Ich hab aber noch ein paar Fragen, ich kommentier sie grad mal in den Source:

    CMatt schrieb:

    char* SerializeToSqlConfigString(const CStringArray& arr)
    {
       size_t bfrSize = 0;
       for(int i=0;i<arr.GetCount();i++) // GetCount ist kein member der Klasse was soll das tun?
          bfrSize += (arr[i].GetLength()+1);
    
       char *res = new char[bfrSize+1];
       memset(res,0,bfrSize+1);
       char *ptr = res;
       for(int i=0;i<arr.GetCount();i++) // für i sagt er hier redefinition
       {
          strcpy(ptr,arr[i]);
          ptr += (arr[i].GetLength()+1);
       }
    
       return res;
    }
    
    void doit()
    {
    //..Fehlen hier nicht ein paar sachen? die Angabe des ODBC-Treibers etc?
    CStringArray arr;
    arr.Add("DSN=New Excel Data Source\0");
    arr.Add("Description=New Excel Data Source\0");
    arr.Add("FileType=Excel\0" );
    arr.Add("DataDirectory=C:\\EXCELDIR\0");
    arr.Add("MaxScanRows=20\0");
    
    char* sql_param = SerializeToSqlConfigString(arr);
    // SQLConfigDataSource call
    //wie muss hier der call aussehen? Das wäre auch interessant, was ich da nun einsetze
    delete[] sql_param;
    //..
    }
    


  • // GetCount ist kein member der Klasse was soll das tun?
    // für i sagt er hier redefinition

    oh, ein VC++ 6 benutzer 🙂
    GetCount leifert die anzalh der strings in deinem CStringArray. GetSize macht das selbe, womöglich ist je das da 🙂
    bei punkt 2: einfach int weg machen. ´Für den VC++ 6 sind die definitionen im for(..) in scope der funktion, aber da gibts schon ein int i, das aus dem obereren for(..)

    //..Fehlen hier nicht ein paar sachen? die Angabe des ODBC-Treibers etc?

    jo, war ja nur ein beispiel

    //wie muss hier der call aussehen? Das wäre auch interessant, was ich da nun einsetze

    void doit()
    {
    //..
    GetPrivateProfileString(strSection,strKey3,"Default",Pfad.GetBuffer(200),200,filename);
    
    CStringArray arr;
    arr.Add(DSN);
    arr.Add(DESCRIPTION);
    arr.Add(FILETYPE);
    arr.Add(filename);
    arr.Add(SCANROWS);
    
    char* sql_param = SerializeToSqlConfigString(arr);
    
    SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,ODBCDRIVER,sql_param); 
    
    delete[] sql_param;
    
    }
    


  • OK da ist mir jetzt so einiges klar geworden! Vielen Dank schon mal für deine Hilfe, aber es will immernoch nicht so wie ich es gerne hätte.

    error LNK2001: unresolved external symbol "public: char * __thiscall CDokumentenVerwaltungSet::SerializeToSqlConfigString(class CStringArray const &)" (?SerializeToSqlConfigString@CDokumentenVerwaltungSet@@QAEPADABVCStr
    ingArray@@@Z)

    Hab keine Plan woher das kommt. Kannst du mir auch hier helfen?

    Vielen Dank!



  • Natürlich weiß ich woher das kommt hab den Fehler ja jetzt nicht das erste mal 😃
    hatte wieder mal die Klasse vor der Funktion vergessen.
    Jetzt läuft das soweit, aber er kann trotzdem keine DSN einrichten, da return res nur DSN=BlaBla zurück gibt und die ganzen anderen sachen nicht. Hat einer ne Ahnung woran das liegt? Es geht um die SerializeToSqlConfigString Funktion.

    Vielen Dank schon im Voraus


Anmelden zum Antworten