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
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
Kommentar