Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Tabellenname eines Feldes ermitteln

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Tabellenname eines Feldes ermitteln

    Hi!

    Ich habe da ein Problem mit MSSQL in Verbindung mit PHP und ADODB.

    TECHNISCHE DATEN:
    ~~~~~~~~~~~~~~~~~
    Datenbank: Microsoft SQL Server (MSSQL 7.0)
    Interpreter: PHP 4.2x
    PHP Modul: ADODB 4.52


    WORUM ES GEHT:
    ~~~~~~~~~~~~~~
    Es geht um ein php Tool, dass auf Basis von den aus einer SQL-Abfrage gewonnenen Informationen, eine Übersicht und ein
    Eingabeformular erstellt.

    In der Übersicht sollen alle Daten, die aus der SQL-Abfrage resultieren angezeigt werden.

    Das Eingabeformular soll aber nur für eine der Tabellen, die in dieser SQL-Abfrage vorkommen,
    angelegt werden, so dass man diese bestimmte Tabelle mit dem Formular füllen kann.


    MEIN PROBLEM:
    ~~~~~~~~~~~~~
    Ich erhalte alle möglichen Informationen über die Datenbank, die Tabellen und die Felder.
    Auch das ermitteln der in der SQL-Abfrage verwendeten Felder ist kein Problem.
    Aber mir bleibt zu jedem Feld die Vater-Tabelle verborgen.
    Keine Ahnung zu welcher Tabelle ein Feld gehört ?!?

    Vor kurzem habe ich gelesen, dass in den MSSQL Datenbanken Version 7 und 2000 der PHP Befehl "mssql_fetch_field"
    das Element "column_source" nicht mehr mit dem Tabellennamen bestückt, sondern noch einmal den Feldnamen hergibt.
    Ebenso liefert auch ADODB's FetchField($field) zweimal den Feldnamen.

    Zweimal den Feldnamen auszugeben macht meines erachtens nicht wirklich Sinn .. handelt es sich da um einen Bug?

    Da ich aber zu jedem ermittelten Feld zwingend den Tabellennamen benötige bin ich für jegliche Hilfe dankbar!
    Was kann ich tun?
    Gibts da draußen jemand der sich etwas besser mit MSSQL auskennt als ich?


    MÖGLICHE ANSÄTZE:
    ~~~~~~~~~~~~~~~~~
    Folgende Lösungsansätze hab ich bislang in Erwägung gezogen:

    1. Zerlegen der SQL-Abfrage und herausfiltern der Tabellennamen und der Feldnamen.
    Bedingung: Vor jedem Feldnamen muss der Tabellenname stehen.
    Nachteile: Die SQL-Abfrage muss zwingend nach einem vordefiniertem Chema aufgebaut sein, so das der Parser ihn verstehen kann.

    2. Nachträgliche Ermittlung des Tabellennamens mittels einer weiteren SQL-Abfrage.
    Bedingung: Es muss irgendwie eine Möglichkeit bestehen, mittels des Feldnamens die passende Tabelle zu finden.
    Nachteile: Nicht eindeutige Feldbezeichner können nicht eindeutig einer Tabelle zugeordnet werden.
    (z.B. ein Feld mit der Bezeichnung "ID" könnte in verschiedenen Tabellen vorkommen)

    3. Mit der Feld Objekt ID den Tabellennamen ermitteln:
    Bedingung: Man braucht diese Feld Objekt ID.

    Beispiel SQL-Abfrage zum ermitteln des Tabellennamens mittels der Feld Objekt ID:

    SELECT dbo.syscolumns.name, dbo.syscolumns.id, dbo.syscolumns.xtype, dbo.syscolumns.typestat, dbo.sysobjects.name
    FROM dbo.syscolumns INNER JOIN dbo.sysobjects ON dbo.syscolumns.id = dbo.sysobjects.id WHERE (dbo.syscolumns.id = ".$object_id.")

    WIE komme ich an diese Feld Objekt ID heran?

    IRGENDWELCHE IDEEN ?
    ~~~~~~~~~~~~~~~~~~~~
    So langsam bin ich mit meinem Latein am Ende.
    Wenn ihr noch irgendwelche Ideen habt dann immer her damit .. wäre doch gelacht wenn mir diese Tabellennamen auf ewig verborgen blieben!

    Schonmal danke für eure Mühe
    - Frank -

    -------------------------------
    fjacob at SolTeCon.com
    www dot SolTeCon dot com

  • #2
    Das Eingabeformular soll aber nur für eine der Tabellen, die in dieser SQL-Abfrage vorkommen,
    angelegt werden, so dass man diese bestimmte Tabelle mit dem Formular füllen kann.

    Kurze Frage wie wählst Du die "Tabelle" aus welche Du dann
    befüllen willst ?

    Oder verstehe ich das falsch ? Da Du ja entweder vorher eine
    Tabelle auswählen musst woher Du die Infos der Tabelle beziehst
    oder Du hast eine Sql-Abfrage in der die Tabelle schon steht ?

    Ich habe das so verstanden an das Script wird eine Anweisung-Sql geschickt ...

    SELECT id,name FROM tabelle WHERE ...

    und nun willst Du daten oder die Struktur der Tabelle Darstellen und
    ein Eingabe formular für eben diese tabelle....

    -> tabellennamen
    $res=mysql_query(SELECT id,name FROM tabelle WHERE ...);
    $erg=mysql_field_table($res,1);

    ECHO $erg;

    -> ausgabe sollte doch
    tabelle
    sein , oder !?

    Kommentar


    • #3
      Kurze Frage wie wählst Du die "Tabelle" aus welche Du dann
      befüllen willst ?
      Mein Tool erhält eine benutzerdefinierte SELECT-Abfrage, die im schlimmsten Fall aus hunderten von JOINTS besteht und eine Ergebnismenge, bestehend aus den Feldern und den Daten liefert.

      Zu jedem Feld dieser Ergebnismenge brauche ich nun die Tabelle, um
      dem Benutzer eine distinkte Liste mit allen Tabellen zu liefern aus der er sich nun eine aussuchen darf.
      -> tabellennamen
      $res=mysql_query(SELECT id,name FROM tabelle WHERE ...);
      $erg=mysql_field_table($res,1);

      ECHO $erg;

      -> ausgabe sollte doch
      tabelle
      sein , oder !?
      Wenn es sich bei meiner Datenbank um eine MySql Datenbank handeln würde, ja.

      Aber es ist ja gerade ein Problem von Microsoft MSSQL 7/2000, dass diese Funktion nicht so funktioniert wie sie funktiionieren sollte.

      Kommentar


      • #4
        hi,

        das ganze sieht schwer nach einem bug aus :[

        http://groups.google.de/groups?q=mss....edu.tw&rnum=1

        gruss
        Sike

        Kommentar

        Lädt...
        X