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:

    http://www.c-plusplus.net/forum/viewtopic.php?t=76989

    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;
    

Anmelden zum Antworten