Frage zu Access Datebank und C++/ADO



  • Kann mir einer helfen und sagen wie ich mit hilfe von ADO eine Datenbank Datei von Access erzeuge, Und wie liste ich die enthaltenen Tabellen auf.

    die tabellen erzeuge ich so,

    // This creates a table in the database with a table name and string of column values
    void CMyDatabase::CreateTable(string strTable, string strValues)
    {
      // Use the CREATE TABLE keyword to create a table and columns
      char szSQLStatement[255] = {0};
      sprintf_s(szSQLStatement, "CREATE TABLE %s (%s)", strTable.c_str(), strValues.c_str());
    
      // Run the SQL statement
      RunSQL(szSQLStatement);
    }
    
    // This selects a specific table
    void CMyDatabase::SelectTable(string strTable)
    {
      // Select all the columns from the desired table
      char szSQLStatement[255] = {0};
      sprintf_s(szSQLStatement, "SELECT * FROM %s", strTable.c_str());
    
      // Run the SQL statement
      RunSQL(szSQLStatement);
    }
    

    nur hab ich bisher nur mit einer Tabelle gearbeitet und wollte nun fragen wie ich die Tabellen in der datenbank aufliste damit ich einen dynamischen zugriff nutzen kann.

    THX für alle vorschläge 😃



  • Mittels Schemata.

    Aus der Doku zum MDAC 2.8 SDK:

    //...
    pRstSchema = pConnection2->OpenSchema(adSchemaTables,&Array);
    
    while(!(pRstSchema->EndOfFile))
    {
        printf("Table Name: %s\n", (LPCSTR) (_bstr_t) pRstSchema->
            Fields->GetItem("TABLE_NAME")->Value);
    
        printf("Table type: %s\n\n",(LPCSTR) (_bstr_t) pRstSchema->
            Fields->GetItem("TABLE_TYPE")->Value);
    
        pRstSchema->MoveNext();
    
        int intLine = intLine + 1;
            if (intLine % 5 == 0)
            {
                printf("\nPress any key to continue...");
                getch();
                //Clear the screen for the next display
                system("cls");
            }
    }
    //...
    

    (Das printf wäre natürlich in C++ Source dubios)

    Btw. das Stringhandling im Codeausschnitt scheint etwas inkonsistent:

    - string statt const std::wstring&
    - char und "C"-Funktionen zur Manipulation von ANSI-Strings
    - ADO braucht aber BSTR resp _bstr_t;

    Insgesamt wärst Du mit UNICODE besser dran.

    Grüsse

    *this



  • aha dafür verwendest du kein sql statement



  • Ascharan schrieb:

    aha dafür verwendest du kein sql statement

    Es gibt Datenbanken bei denen es sowas wie eine Tabelle "systables" gibt.
    Da geht dann

    SELECT * FROM systables WHERE DB_NAME = 'MyDB';
    

    Keine Ahnung ob's das bei Access gibt; aber da Du eh ADO einsetzt kannst Du's ja auch allgemein formulieren.

    Grüsse

    *this



  • so kenn ich das aus mysql

    [cpp]
    mysql_query(pConnection,"SHOW tables");	
    [/cpp]
    

    usw , das listet mir die aktellen tabellen in der sql tabelle doch by Access blick ich nich ganz durch hab mir mal die doku zum MDAC 2.8 SDK geladen is zwar english aber hoffe ich blick da durch.

    möchte nämlich die tabellen der datenbank in einer Combobox laden 😕



  • MDAC 2.8 SDK
    => ADO Help
    => ADO Programmer's Reference
    => ADO Methods
    => OpenSchema()
    => Visaul C++ Sample (im Footer)

    Viel Erfolg !

    Grüsse

    *this



  • thanks werd mein bestes versuchen werd da ne weile brauchen so wies aussieht 😕 😃


Anmelden zum Antworten