Announcement

Collapse
No announcement yet.

TableName feststellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TableName feststellen

    Hallo,
    stecke fest !

    Um ein SQL-Statement dynamisch zu erstellen, muß ich feststellen, aus welcher Tabelle ein bzw. verschiedene Formularfeld(er) seine/ihre Daten bezieht.

    Den Namen des aktiven Objekts im Formular, dessen Datsource sowie deren Namen, den Namen des Table-Objekts und den zum Eingabefeld zugehörigen Feldnamen festzustellen ist alles kein Problem, aber für die SQL-Anweisung brauche ich den Namen der Tabelle (TableName im Table-Objekt) - und den krieg ich nicht raus !

  • #2
    Hallo Christian,

    die Methode "GetTableNames" der ADOConnection spuckt die Namen aller Tabellen in einer Datenbank aus.

    Noch mehr Informationen kann man mit der "OpenSchema"-Methode erhalten. Beispiele dazu gibt es hier im Forum.

    Vielleicht hilft's dir.

    Gruß, Werne

    Comment


    • #3
      Hab mich vielleicht mit meinem Bandwurmsatz unverständlich ausgedrückt...<BR>

      Jemand drückt im Formular STRG-F, um die Suche aufzurufen. Jetzt muß ich feststellen, in welchem Steuerelement er sich gerade befindet. Soweit kein Problem. Auch die DataSource und das entsprechende Datenbankfeld dieses Steuerelements rauszubekommen ist kein Problem.<BR>
      Aber: Da jetzt mit einem SQL-Statement weitergemacht werden soll, muß ich den tatsächlichen TableName rausbekommen, in dem die Daten für das Steuerelement stehen - und genau das bekomme ich nicht hin.

      <PRE>
      AC := frmHauptformular.ActiveControl;
      .
      .
      InfoDS := (AC as tDBEdit).DataSource;
      Test := InfoDS.DataSet.TableName;
      </PRE>

      Die Zeile, die mit "Test" anfängt, ist das Problem - die wird verweigert, weil "TableName" ein "undefinierter Bezeichner" ist. Der Objektinspektor ist allerdings anderer Meinung :-)<BR>

      Wie also komme ich an den Tablename ran ??

      Comment


      • #4
        Ach so! Mach 'ne Typumwandlung. Falls InfoDS.Dataset eine TTable ist, sollte die kritische Zeile so funktionieren:

        <PRE>
        Test := TTable(InfoDS.Dataset).TableName;
        </PRE>

        Die Typumwandlung ist nötig, weil TDatasource von deiner Tabelle nur diejenigen Eigenschaften kennt, die auf TDataset zurückzuführen sind.

        Werne

        Comment


        • #5
          Hey, so geht's.<BR>
          Toll, danke

          Comment


          • #6
            vielleicht solltest du lieber
            <pre>
            Test := (Info.DataSet As TTable).TableName
            </pre>
            verwenden. Das tut weniger weh, wenn Du mal die TTable durch was anderes ersetzt.

            Gruß,
            Stev

            Comment


            • #7
              Entwickler Forum / Datenbanken / MS SQL Server und MSDE
              spaltenbeschreibung auslesen ?

              hallo Entwickler-Kollegen,
              ich moechte via ADO die TableNames und ColumnNames und DataTypes aus einer Access97-MDE-Datei auslesen.

              Wie funktioniert denn ADOConnection.OpenSchema mit BCB6 und der Access97-db NWIND.EXE ?

              Source:
              int bounds[]= {0,3};
              OleVariant A(bounds,1, varVariant);
              A.PutElement("",0);
              A.PutElement("",1);
              A.PutElement("",2);
              A.PutElement("",3);
              ADOConnection1->OpenSchema(siCatalogs,A,0,ADOSchemaDataSet1);

              Error:
              EOleException
              Die Argumente sind vom falschen Typ, liegen außerhalb des
              Gültigkeitsbereiches oder sind miteinander unvereinbar;

              willi

              Comment

              Working...
              X