MyODBC will nur bedingt



  • Hallo,

    ich habe seit gestern MySQL installiert und will versuchen ein C++ Programm zu
    schreiben mit dem ich auf die Tabellen zugreifen kann.

    Ich habe zu der Datenbank mit MyODBC eine Datenquelle hergestellt die auch
    funktioniert. Habe ein simples SDI Programm geschrieben um mal zu testen ob
    dieses MyODBC auf funktioniert. Es lief, konnte mich durch alle Datensätze
    durchklicken.

    Ich habe einige Probleme mit einer Konsolenanwendung. Das komische ist, das
    sie mit anderen ODBC Datenquelle funktioniert. Das Problem taucht auf bei
    SQLCONNECT. Es kann sich nicht mehr der Datenquelle verbinden. Wenn ich den Namen der Datenquell gegen einen anderen Typ ändere gehts. Nur mit MyODBC
    scheint es so nicht zu klappen.

    Die MyODBC Datenquell heist: myodbc
    Und der Tabellenname ist: neuertest

    Ich poste hier einmal den verwendeten Sourcecode

    #include <windows.h>
    #include <sqlext.h>
    #include <stdio.h>
    #include <sql.h>
    #include <string.h>

    //Fehlervariable
    SQLRETURN retcode;

    //Umgebungshandle
    SQLHSTMT hstmt = NULL;
    SQLHDBC hdbc = NULL;
    SQLHENV henv = NULL;

    int jahr;
    int monat;
    int tag;

    long t1,t2,t3=5;

    SDWORD num1;
    SDWORD num2;
    SDWORD num3;

    void main(void)
    {

    retcode = SQLAllocEnv(&henv);

    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
    printf("jo, SQLAllocEnv laeuft!!!\n");
    }

    retcode = SQLAllocConnect(henv, &hdbc);
    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
    printf("jo, SQLAllocConnect laeuft!!!\n");
    }

    retcode = SQLConnect(hdbc, (UCHAR FAR *)"myodbc", SQL_NTS, NULL,0,NULL,0);

    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
    printf("jo, SQLConnect laeuft!!!\n");
    }

    retcode = SQLAllocStmt(hdbc, &hstmt);
    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
    printf("jo, SQLAllocStmt laeuft!!!\n");
    }

    retcode = SQLExecDirect(hstmt,(UCHAR FAR 😉 "SELECT * FROM neuertest", SQL_NTS);
    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
    printf("jo, SQLAllocHandle laeuft!!!\n");
    }

    retcode = SQLBindCol(hstmt, 1, SQL_C_SLONG, (PTR)&tag, sizeof(tag), &num1);
    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
    printf("\tjo, Bindcol1 laeuft!!!\n");
    }
    retcode = SQLBindCol(hstmt, 2, SQL_C_SLONG, (PTR)&monat, sizeof(monat), &num2);
    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
    printf("\tjo, Bindcol2 laeuft!!!\n");
    }

    retcode = SQLBindCol(hstmt, 3, SQL_C_SLONG, (PTR)&jahr, sizeof(jahr), &num3);
    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
    printf("\tjo, Bindcol3 laeuft!!!\n");
    }

    retcode = SQLFetch(hstmt);
    if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
    {
    printf("1. Datensatz: %d\n",tag);
    printf("2. Datensatz: %d\n", monat);
    printf("3. Datensatz: %d\n\n\n", jahr);
    }

    SQLFreeStmt(hstmt, SQL_DROP);
    SQLDisconnect(hdbc);
    SQLFreeHandle(SQL_HANDLE_ENV,hdbc);

    }

    Wie gesagt, wenn ich myodbc durch eine andere Datenquelle von ODBC austausche geht es. Also irgendwie eigenartig!

    Naja, vielen Dank für eure Hilfe.


Anmelden zum Antworten