SQLConfigDataSource
-
kann mir jemand sagen warum es funk
LPCSTR szAttributes = "DSN=test\0" "SERVER=test\0" "DATABASE=d_Test\0" "Trusted_Connection=1."; if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN,szDriver,szAttributes) ) { AfxMessageBox("ODBC - Fehler"); }und es nicht
CString szAttributes; szAttributes.Format("%s\0%s\0%s\0Trusted_Connection=1.","test", "test","d_Test")); LPCSTR test = szAttributes; if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN,szDriver,szAttributes) ) { AfxMessageBox("ODBC - Fehler"); }es scheint das ich es irgend wie nicht richtig von CString auf LPCSTR umwandle
habe auch so versucht
LPCSTR test = (LPCSTR )szAttributes;
leider auch ohne erfolg
-
Hallo,
das verstehe ich nicht, was funktioniert denn nicht, und test wird ja gar nicht verwendet im zweiten Fall:
LPCSTR test = szAttributes; // wo ist test, wird hier nicht benutzt if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN,szDriver,szAttributes) )
ich kann es mir denken
, aber besser, du stellst das Problem noch einmal richtig dar.MfG
-
-
Abgesehen davon fehlt dir hier z.B. "DSN="
-
CMatt schrieb:
dachte ich auch, leider ist es nicht der Fall
-
OK, noch mal
Das funktioniert
LPCSTR pSAttributes = "DSN=TEST\0" "SERVER=TEST\0" "DATABASE=D_TEST\0" "Trusted_Connection=1."; if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN,szDriver,pSAttributes)) { AfxMessageBox("ODBC - Fehler"); }Und das nicht

CString sstr; sstr.Format("%s%s%sTrusted_Connection=1.","DSN=TEST","SERVER=TEST","DATABASE=D_TEST"); LPCSTR pSAttributes = (LPCSTR)sstr; if(!SQLConfigDataSource(NULL,ODBC_ADD_DSN,szDriver,pSAttributes)) { AfxMessageBox("ODBC - Fehler"); }Bitte Hilfe
-
die einzelnen parameter enden nicht mit 0x00...
dachte ich auch, leider ist es nicht der Fall
0x00 == ende eins strings, das war immer schon so, ist so, und wird sicher noch länger so bleiben.
Du kannst das nicht alles in nen CString stopfen, weil nach jedem parameter ein \0 rein muss und du das ding dann nicht mehr raus bekommst weil strlen, strcpy, strblabla,.. nur bis zum erstem \o zählen.
-
CMatt schrieb:
Du kannst das nicht alles in nen CString stopfen, weil nach jedem parameter ein \0 rein muss und du das ding dann nicht mehr raus bekommst weil strlen, strcpy, strblabla,.. nur bis zum erstem \o zählen.
ja es stimmt, dass Problem ist aber dass ich die alle Parameter wie DSN usw
einzeln bekomme wenn ich jetzt als LPCSTR oder TCHar* kriege wie bastle ich die dann zusammen ??
Sagen wir ich habe so:LPCSTR dsn = "DSN=test"; LPCSTR SERVER = "SERVER=TEST"; LPCSTR DATABASE = "DATABASE=D_TEST"; LPCSTR zusammen = dsn +SERVER +DATABASE ; // geht doch nicht !!!!!Wie kann ich dann die zusammen stellen ??
-
so z.b:
class CSqlConfigString : public CStringArray { char *m_buffer; int m_iBufferSize; public: CSqlConfigString() :m_buffer(NULL) :m_iBufferSize(0) {} ~CSqlConfigString() { delete[] m_buffer; } operator const char*() { int iSize = 0; for(int i=0;i<GetSize();i++) iSize += GetAt(i).GetLength()+1; if(iSize+1>m_iBufferSize) { delete[] m_buffer; m_buffer = new char [iSize+1]; m_iBufferSize=iSize+1; } char *ptr = m_buffer; for(int n=0;n<GetSize();n++) { strcpy(ptr,GetAt(n)); ptr+=GetAt(n).GetLength(); *ptr=0;++ptr; } *ptr = 0; return m_buffer; } };CSqlConfigString str; str.Add("DSN=test"); str.Add("SERVER=TEST"); str.Add("DATABASE=D_TEST"); const char* pSAttributes = (const char*)str;