== Suche hilfe bei DB-Telefon Projekt ==



  • hallo ich brauch mal wieder hilfe

    hat jemand erfahrung mit cpp ODBC?
    ich will ja an den filmaker anbendeln

    blos hab irgend n schreiß problem

    0xa0001c4c Failed to connect
    
    The driver reported the following diagnostics whilst running SQLDriverConnect
    

    mit dem SQLDriverConnect()
    http://msdn2.microsoft.com/en-us/library/ms715433.aspx

    schätze mal es liegt am Connection string
    habe mir den richtigen für den filemaker hier rausgesucht
    http://www.connectionstrings.com/default.aspx?carrier=filemaker

    funzt aber trozdem nicht
    treiber ist installiert - check

    habe ich mir mit diesem code anzeigen lassen

    #include <stdio.h>
    #include <sql.h>
    #include <sqlext.h>
    
    main() {
      SQLHENV env;
      char dsn[256];
      char desc[256];
      SQLSMALLINT dsn_ret;
      SQLSMALLINT desc_ret;
      SQLUSMALLINT direction;
      SQLRETURN ret;
    
      SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
      SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0);
    
      direction = SQL_FETCH_FIRST;
      while(SQL_SUCCEEDED(ret = SQLDataSources(env, direction,
    					einsetze   dsn, sizeof(dsn), &dsn_ret,
    					   desc, sizeof(desc), &desc_ret))) {
        direction = SQL_FETCH_NEXT;
        printf("%s - %s\n", dsn, desc);
        if (ret == SQL_SUCCESS_WITH_INFO) printf("\tdata truncation\n");
      }
    }
    
    odbcfms - FileMakerODBCsystem
    odbcfmu - FileMakerODBCuser
    
    test has exited with status 0.
    

    egal welchen von beinden treibernnamen ich nun einsetze es funzt nicht

    hier mein SQLDriverConnect()

    SQLDriverConnect(dbc, NULL,
    (SQLCHAR*)"AllAsText=0;ApplicationUsingThreads=1;FetchChunkSize=100;Driver=odbcfms;FileOpenCache=0;IntlSort=0;MaxTextlength=255;ServerAddress=127.0.0.1;TranslationOption=0;UseRemoteConnection=1;",
    sizeof("AllAsText=0;ApplicationUsingThreads=1;FetchChunkSize=100;Driver=odbcfms;FileOpenCache=0;IntlSort=0;MaxTextlength=255;ServerAddress=127.0.0.1;TranslationOption=0;UseRemoteConnection=1;"),
    outstr, 255, &outstrlen,SQL_DRIVER_NOPROMPT);
    

    kann mir jemand helfen?



  • oh, grausam!

    sizeof liefert dir so NICHT die Länge des Strings zurück.

    Mach es besser so:

    SQLCHAR *pStr = "AllAsText=0;ApplicationUsingThreads=1;FetchChunkSize=100;Driver=odbcfms;FileOpenCache=0;IntlSort=0;MaxTextlength=255;ServerAddress=127.0.0.1;TranslationOption=0;UseRemoteConnection=1;";
    
    SQLDriverConnect(dbc, NULL, pStr, strlen(pStr), outstr, 255, &outstrlen,SQL_DRIVER_NOPROMPT);
    

    Edit: Tippfehler beseitigt



  • thx

    aber hat nix genützt bringt immer noch den selben fehler

    so siehts jetzt aus

    char *pStr = "AllAsText=0;ApplicationUsingThreads=1;FetchChunkSize=100;Driver=odbcfms;FileOpenCache=0;IntlSort=0;MaxTextlength=255;ServerAddress=127.0.0.1;TranslationOption=0;UseRemoteConnection=1;"; 
    
    SQLDriverConnect(dbc, NULL,(SQLCHAR*) pStr, strlen(pStr),outstr, sizeof(outstr), &outstrlen,SQL_DRIVER_COMPLETE);
    


  • nino2 schrieb:

    thx

    aber hat nix genützt bringt immer noch den selben fehler

    so siehts jetzt aus

    char *pStr = "AllAsText=0;ApplicationUsingThreads=1;FetchChunkSize=100;Driver=odbcfms;FileOpenCache=0;IntlSort=0;MaxTextlength=255;ServerAddress=127.0.0.1;TranslationOption=0;UseRemoteConnection=1;"; 
    
    SQLDriverConnect(dbc, NULL,(SQLCHAR*) pStr, strlen(pStr),outstr, sizeof(outstr), &outstrlen,SQL_DRIVER_COMPLETE);
    

    Wäre hier nicht std::string zusammen mit str.c_str() & str.size() mehr zu empfehlen?



  • ^^

    so funktioniert es jetzt wunderbar

    char *pStr = 
    	"AllAsText				= 0;"
    	"ApplicationUsingThreads= 1;"
    	"FetchChunkSize			= 100;"
    	"DRIVER					= odbcfms;"			//	<-- der treiber name den ich im "ODBC Administrator.app" angelegt habe
    	"UID					= user"		//	<-- der nutzername der im filemaker angelegt wurde
    	"PWD					= pw"			//	<-- pw des nuzers
    	"FileOpenCache			= 0;"
    	"IntlSort				= 0;"
    	"MaxTextlength			= 255;"
    	"ServerAddress			= 127.0.0.1;"		// <- server adresse natürlich local   
    	"TranslationOption		= 0;"
    	"UseRemoteConnection	= 1;"; 
    
    	SQLDriverConnect(dbc, NULL,(SQLCHAR*) pStr, strlen(pStr),outstr, sizeof(outstr), &outstrlen,SQL_DRIVER_COMPLETE);
    
    cout<<"\n\nConnect to Filemaker ODBC Driver .... ";
    
    	if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) 
    	{		
    		cout<<"OK\n\nReturned connection string was:\n\t"<<outstr<<"\n\n\n";
    		if (ret == SQL_SUCCESS_WITH_INFO) 
    		{
    			cout<<"Driver reported the following diagnostics\n"<<endl;
    			extract_error("SQLDriverConnect", dbc, SQL_HANDLE_DBC);
    		}
    	} 
    	else 
    	{
    		cout<<stderr<<" Failed to connect\n"<<endl;
    		extract_error("SQLDriverConnect", dbc, SQL_HANDLE_DBC);
    	}
    
    Connect to Filemaker ODBC Driver .... OK
    
    Returned connection string was:
    	\367\210\277\377\367\210
    

    jetz hängt er sich aber an der nächsten stelle auf

    return = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
    

    mag er nich machen

    bringt mir der debuger

    SQLAllocStmt_Internal  -> 0x9893d130  <+0056>  lwz     r0,36(r3)
    SQLAlloHandle_Internal -> 0x9894529c  <+0180>  b       0x989453f4 <SQLAllocHandle_Internal+524>
    SQLAlloHandle          -> 0x989454dc  <+0212>  lwz     r0,0(r26)
    
    und main.cpp eben      -> ret = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
    

    weis jemand rat?



  • was soll return = SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt); für ne syntax sein? meinst du vielleicht return SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);?



  • nein
    return is ein objekt vom typ SQLRETURN ich speichere da den rückgabewert rein

    habs schon umgenant in ret

    SQLRETURN ret;

    ^^



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Projekte verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Dieser Thread wurde von Moderator/in Korbinian aus dem Forum Projekte in das Forum Datenbanken verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ach scheiß der SQLDriverConnect() hat deshalb gefunzt weil ich oben zeile 16

    SQLDriverConnect(dbc, NULL,(SQLCHAR*) pStr, strlen(pStr),outstr, sizeof(outstr), &outstrlen,SQL_DRIVER_COMPLETE);
    

    das "ret = " vergessen habe
    so rutscht er natürich durch die fehler behandlung den in ret ist ja noch SQL_SUCCESS vom letzten allochandlering 😑

    weil ichs hier ausm forum kopiert habe

    also kommando zurück SQLDriverConnect() funt immer noch nich leig immer noch am connecting string als parameter schätze ich


Anmelden zum Antworten