Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi alle Tabellen einer Datenbank anzeigen (https://www.delphipraxis.net/85169-alle-tabellen-einer-datenbank-anzeigen.html)

Megamorph 26. Jan 2007 21:57

Datenbank: MySQL • Version: 5.1 • Zugriff über: mysql.pas - http://www.fichtner.net/delphi/

alle Tabellen einer Datenbank anzeigen
 
Hallo Community,

ich habe jetzt etwas rumgerätzelt, aber ich bekomme es doch nicht auf die Reihe, die Namen aller Tabellen anzuzeigen.
Für PHP fand ich das:
http://www.selfphp.info/funktionsref...ist_tables.php
...was ich versuchte auf Delphi zu übertragen, allerdings fehlt mir die Funktion 'mysql_tablename()'

Zudem bekommt man nicht einmal die Anzahl der Tabellen raus (nach PHP-Art).

Die Datenbankverbindung ist _myCon und wurde auch schon erfolgreich getestet (Tabelle anlegen, Überprüfung mit PMA).

Delphi-Quellcode:
VAR count    :    integer;
    num_res  :    PMYSQL_RES;

begin
  if connect then
  begin
    num_res:= mysql_list_tables(_myCon,db);
    count:= mysql_num_rows(num_res);

    //jetzt ist count trotzdem 0! wieso?
Ich hoffe meine Frage ist nicht zu dumm. Ich habe wirklich 1h daran gehangen + 30min Sufu & Google benutzt.
Thx im Vorraus!

Valle 26. Jan 2007 22:07

Re: alle Tabellen einer Datenbank anzeigen
 
Probier's mal so:

SQL-Code:
SHOW TABLES;

Megamorph 26. Jan 2007 22:14

Re: alle Tabellen einer Datenbank anzeigen
 
Meinst du das so?

Delphi-Quellcode:
query := PChar('SHOW TABLES');
mysql_real_query(_myCon, query, Length(query));
Wie komme ich dann jetzt an die Namen ran?

Valle 26. Jan 2007 22:21

Re: alle Tabellen einer Datenbank anzeigen
 
Hier steht wie du die Daten abrufst.
Dann brauchst du nurnoch alle Erebnisse durchgehen, dabei mitzählen und die Daten aus der ersten Spalte holen (Bei diesem
Query gibt's nur eine Spalte).

MfG,

Valle

Megamorph 26. Jan 2007 22:27

Re: alle Tabellen einer Datenbank anzeigen
 
Nach diesem Tut bin ich auch vorgegangen (mit der Verbindung usw.).
http://www.delphipraxis.net/internal...ect.php?t=7266

Trotzdem nochmal zur Absicherung:


query := PChar('SHOW TABLES');
mysql_real_query(_myCon, query, Length(query));
_myRes := mysql_store_result(_myCon);
_myRow := mysql_fetch_row(_myRes);

for i:= 0 to length(_myRow) do
begin
memo.lines.add(_myRow[i]);
end;

Wäre das so ok?

Valle 26. Jan 2007 22:38

Re: alle Tabellen einer Datenbank anzeigen
 
Naja fast, so müsste es eigentlich gehen:

Delphi-Quellcode:

query := PChar('SHOW TABLES');
mysql_real_query(_myCon, query, Length(query));
_myRes := mysql_store_result(_myCon);
_myRow := mysql_fetch_row(_myRes);

for i:= 0 to length(_myRow) do begin
  memo.lines.add(_myRow[0]);
end;
Ungetestet.

Megamorph 26. Jan 2007 22:43

Re: alle Tabellen einer Datenbank anzeigen
 
Ok, vielen Dank!
Ich probiere es morgen gleich aus.
Gn8.

Megamorph 27. Jan 2007 11:15

Re: alle Tabellen einer Datenbank anzeigen
 
Leider funktioniert es noch nicht ganz!

Delphi-Quellcode:
query := PChar('SHOW TABLES');
mysql_real_query(_myCon, query, Length(query));
_myRes := mysql_store_result(_myCon);
_myRow := mysql_fetch_row(_myRes);

for i:= 0 to length(_myRow) do begin
  memo.lines.add(_myRow[0]);
end;

bei length(_myRow) sagt er "Incompatible types".
Also habe ich aus Spaß die Anzahl der Tabellen eingetragen (aus PMA).
Dann sah das ganze so aus:
Delphi-Quellcode:
for i:= 0 to 4 do begin
Jetzt ist das Problem, dass er mir 5x die 1. Tabelle ausgibt!

Also schaute ich mir das Array _myRow an.
_myRow[0] enthält den 1. Tabellennamen
_myRow[1] enthält Buchstabensalat
_myRow[2] gibt es nicht

Also wie kann ich jetzt die Anzahl der Tabellen feststellen und auch auch die anderen Tabellennamen erfahren?

Thx 4 help!

marabu 27. Jan 2007 12:10

Re: alle Tabellen einer Datenbank anzeigen
 
Hallo,

ich würde es mal so probieren:

Delphi-Quellcode:
procedure GetTables(conn: PMYSQL; s: TStrings);
var
  res: PMYSQL_RES;
  row: PMYSQL_ROW;
  i: Integer;
  lengths: PMYSQL_LENGTHS;
  value: String;
begin
  res := mysql_list_tables(conn, nil);
  repeat
    row := mysql_fetch_row(res);
    if Assigned(row) then
    begin
      lengths := mysql_fetch_lengths(res);
      SetString(value, row[0], lengths[0]);
      s.Add(value);
    end;
  until not Assigned(row);
  mysql_free_result(res);
end;
Grüße vom marabu

Megamorph 27. Jan 2007 12:40

Re: alle Tabellen einer Datenbank anzeigen
 
Wow, es geht!!
Vielen Dank euch beiden für die gute Hilfe!

mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz