Tabellennamen aus SQL-DB lesen like: SHOW TABLES nur in c++



  • Hallo, ich versuche die namen der sich in meiner SQL-DB befindlichen tabellen auszulesen. Im QueryBrowser geht das mit SHOW TABLES ... doch Mann kann doch sicherlich nicht nur auf .sql zugreifen und sortieren etc. sondern auch auslesen?! Ide ist folgende:

    if(!sql.IsBOF)
    {
       while(!sql.IsEOF)
       {
       m_combobox=GetVorhandeneTabellen(db.ExecuteSQL(InsertString)); // ! Pseudocode!
       sql.MoveNext();
    }
    


  • Welches Datenbanksystem verwendest Du denn?



  • Hi,

    ich arbeite mit MySqlServer 5.0 und schaue mir meine ergebnisse mit dem QueryBrowser an. Der ConnectorDriver 5.1 ist bereits installiert una habe meine DB (also sql-tablle) bereits in mein MFC-Projekt eingefügt und in die Tabelle daten geschrieben. Das alles funktioniert und mit dem QueryBrowser aus die Ausgabe der Tabellen, die man rechts dort sieht mit SHOW TABLES ... aber wie bekomme ich daraus mit Hilfe meiners ODBC-Doltmetschers daten z.B. die Tabellenamen übergeben?

    greezt



  • Die Show-Befehle kannst Du doch auch als SQL absetzen:

    http://dev.mysql.com/doc/refman/5.0/en/show.html



  • Ja das stimmt. Genrelle Befehle kann ich als String übergeben und damit wunderbar agieren.

    CString InsertString="UPDATE "+actualtable+" SET Wert=Wert/2";
    db.ExecuteSQL(InsertString);
    

    doch mit

    CString InsertString="SHOW TABLES";
    db.ExecuteSQL(InsertString);
    

    bakomme ich kein return der ausgegeben tabellen, die ich z.B. als Auswahl ind eine ComboBox zur verfügung stelle, um damit weiter zu arbeiten. Gefunden habe ich die Memberfunktion von CRecordset:

    const CString & GetTableName() const
    

    http://msdn.microsoft.com/en-us/library/zfs83421(VS.80).aspx

    allerdings habe ich keine Ahnung, wie ich diese implementieren soll. Jene soll laut msdn einen Tabellenamen geben. Vielleicht eine Idee?



  • Lösung:

    CDatabase db;
    Cmessungenmai08 sql(&db);
    int count,running;
    int key;
    ....
    
    int n = rs.GetODBCFieldCount( );  //Anzahl der Spalten ermitteln
    int zeile=0,divrest=0;
    
    while( !rs.IsEOF() ) 
       { 
          for( int i =0; i < n; i++ ) 
    	  {
    	  rs.GetFieldValue( i, Wert );
    	 value=Wert.m_pstring;
    	 if(i==0)	
    	  Vorhandene_Tabellen_Tabellennamen[zeile]=value->GetString();
    	 if(i==1)
    	 Vorhandene_Tabellen_Erstellungsdatum[zeile]=value->GetString();
    	  }
          rs.MoveNext( );
      zeile++; //hier stehen jetzt auch die Anzahl der Spalten drinne ;-)
       }
       rs.Close( );
    ...
    CString InsertString;
    InsertString="DROP TABLE "+actualtable;
    db.ExecuteSQL(InsertString);
    
    InsertString="DELETE FROM vorhandene_tabellen WHERE Tabellenname = \""+actualtable+"\""; GIP1 ;-)
    db.ExecuteSQL(InsertString);
    

    ... das ist zwar nür ´ne gebogene-Lösung, doch somit kann man generell die Tabellen auslesen.

    Hat jemand eine Idee, wie man eine Subtabelle und SQL erstellt? 😉 🤡


Log in to reply