Spaltennamen aus einer ACCESS Tabelle auslesen



  • Hi,
    ich möchte die Spaltennamen aus einer ACCESS Tabelle in einem Dropdown Listenfeld anzeigen. Habe dafür folgenden Code:

    {
     AnsiString sql_query = "SHOW COLUMNS FROM taPERSON ;";
     Query1->SQL->Clear() ;
     Query1->SQL->Add(sql_query) ;
     Query1->Open() ;
     Query1->FindFirst();
    
     ComboBox1->Clear();
     while(!Query1->Eof)
     {
      AnsiString result = Query1->Fields->Fields[0]->AsString;
      ComboBox1->Items->Add(result);
      Query1->Next() ;
     }
     Query1->Close() ;
    }
    

    Aber das funktioniert natürlich nicht, da Open den SQL (oder mySQL) Befehl SHOW nicht kennt. Hat jemand einen Tip?



  • Schon mal mit ExecSQL() ausprobiert?

    Gruß,

    Alexander



  • Hallo

    offenbar unterstützt die BDE oder Paradox7 das SHOW-Kommndo nicht.
    Wenn du die Namen der Felder haben willst, kannst du auch einfach ein

    "SELECT * FROM taPERSON"
    

    ausführen. Dann kannst du bei geöffneter Datenmenge aus der Eigenschaft TQuery::Fields deine Feldnamen auslesen.

    bis bald
    akari



  • ok und was muss ich

    Query1->Fields->GetFieldNames()
    

    übergeben? Er will einen String glaub ich.



  • Ich habe es mal so probiert:

    Query1->Fields->GetFieldNames(Query1->SQL);
    

    gint zwar keinen Fehler aber es gibt auch nix aus, obwohl sicher Spalten existieren.



  • Hallo

    lies dir doch mal die Texte zu TFields in der BCB-Hilfe zu den einzelnen Eigenschaften und Mehtoden duch.
    Bei GetFieldNames must eine TStrings-Instanz übergeben, zum Beispiel die einer ComboxBox :

    Query1->Fields->GetFieldNames(ComboBox1->Items);
    

    Oder du iterierst über das Array Fields

    AnsiString CurName;
    for (int Lv = 0; Lv < Query1->Fields->Count; Lv++)
    {
      CurName = Query1->Fields->Field[Lv]->FieldName;
      ...
      }
    

    bis bald
    akari



  • Show ist SQL aus dem Hause Microsoft nicht.

    Bei MS-SQL geht's so:

    select Column_Name
    from INFORMATION_SCHEMA.COLUMNS
    where TABLE_NAME = 'TABELLENNAME'
    and TABLE_SCHEMA = 'LOGIN'

    Bei Access weiß ich nicht. Ich wage aber zu bezweifeln, daß es eine gute Idee ist, Spaltennamen in eine ComboBox zu schreiben.

    Mach eine Übersetzungstabelle mit den Spalten Table,Column,NickName ... ggf. Language dann kannst Du verständliche Texte ausgeben ohne Deine Tabellenspalten jedesmal ändern zu müssen. Die Namen Tabellenspalten sind meist nicht sonderlich Klartext und wenn, in welcher Sprache (Deutsch,Englisch, DataBaseCreator ...) ? 🤡


Anmelden zum Antworten