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 redefinitionoh, 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