Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL um Tabellen und Feldnamen rauszufinden? (https://www.delphipraxis.net/148907-sql-um-tabellen-und-feldnamen-rauszufinden.html)

Jürgen Thomas 11. Mär 2010 08:11

Re: SQL um Tabellen und Feldnamen rauszufinden?
 
Für die genannten DB-Systeme gibt es ein paar passende SELECT-Befehle unter [Wikibooks] Einführung in SQL: Tipps und Tricks. Jürgen

Yc4s1vtz 11. Mär 2010 17:29

Re: SQL um Tabellen und Feldnamen rauszufinden?
 
ich hab das mal mit der TSession probiert

da ich mit ODBC arbeite ist das ein riesen problem
weil ich immer nur die namen der ODBC verbindungen bekomme :(

total doof

hmm klar das ich mich dahin verbinden muss
mach ich ja auch

aber dennoch läft getdatabasename leider nicht :(

ich würde ja gerne mit zeos arbeiten
aber ich glaube zeos arbeitet nicht mit odbc
und das ist pflicht

komisches projekt :(

hoika 11. Mär 2010 21:40

Re: SQL um Tabellen und Feldnamen rauszufinden?
 
Hallo,

Zitat:

TSession liefert die Datenbanken.
Nee !!!

Tschulligung ;)

Wie ich schon geschrieben habe,
gibt es keine (Standard-)-Möglichkeit,
alle Datenbanken einer DB zu ermitteln.

Bsp.: Firebird:
Die Datei kann sich überall auf dem Server befinden.


Heiko

nahpets 12. Mär 2010 08:01

Re: SQL um Tabellen und Feldnamen rauszufinden?
 
Hallo Hoika,
Zitat:

Zitat von hoika
Hallo,

Zitat:

TSession liefert die Datenbanken.
Unsinn !!!

Tschulligung ;)

Wie ich schon geschrieben habe,
gibt es keine (Standard-)-Möglichkeit,
alle Datenbanken einer DB zu ermitteln.

Bsp.: Firebird:
Die Datei kann sich überall auf dem Server befinden.


Heiko

hast Du schon mal in die Hilfe geschaut?
Zitat:

Zitat von delphihilfe
Die Methoden der Klasse TSession werden hier gezeigt.

Public Methoden
Name Beschreibung
AddAlias Fügt einen bestimmten Alias der Borland Database Engine (BDE) in die Sitzung eines SQL-Datenbankservers ein.
AddDriver Fügt einen bestimmten Alias der Borland Database Engine (BDE) in die Sitzung eines SQL-Datenbankservers ein.
AddPassword Fügt ein Kennwort in die aktuelle Sitzung ein, um auf verschlüsselte Paradox- oder dBASE-Tabellen zuzugreifen.
AddStandardAlias Fügt einen Standardalias der Borland Database Engine (BDE) für Paradox-, dBASE oder ASCII-Tabellen in die Sitzung ein.
Close Trennt die Sitzung von allen Datenbanken und schließt die Sitzung.
CloseDatabase Schließt eine der aktuellen Sitzung zugeordnete Datenbankverbindung.
DeleteAlias Entfernt einen bestimmten Alias der Borland Database Engin (BDE) aus der Sitzung.
DeleteDriver Entfernt einen bestimmten Alias der Borland Database Engine (BDE)-Treiber aus der Sitzung.
DropConnections Gibt alle inaktiven temporären Datenbankkomponenten frei, die einer Sitzung zugeordnet wurden.
FindDatabase Durchsucht in einer Sitzung die Liste der Komponenten nach einer angegebenen Datenbank.
GetAliasDriverName Stellt den Namen des Datenbanktreibers bereit, der von dem angegebenen und der Sitzung zugeordneten Alias der Borland Database Engine (BDE) verwendet wird.
GetAliasNames Fügt die Namen der dauerhaften Aliase der Borland Database Engine (BDE) in eine Stringliste ein.
GetAliasParams Ermittelt die Parameter, die einem Alias der Borland Database Engine (BDE) zugeordnet sind.
GetConfigParams Ruft Informationen über die Konfiguration der Borland Database Engine (BDE) ab.
GetDatabaseNames Fügt die Namen der dauerhaften Aliase der Borland Database Engine (BDE) und die Namen der in der Sitzung bekannten Datenbankkomponenten in eine Stringliste ein.
GetDriverNames Fügt die Namen der in der Sitzung verfügbaren Treiber der Borland Database Engine (BDE) in eine Stringliste ein.
GetDriverParams Fügt die Parameter eines bestimmten Treibers der Borland Database Engine (BDE) in eine Stringliste ein.
GetFieldNames Fügt die Feldnamen einer bestimmten Tabelle in eine Stringliste ein.
GetPassword Löst in der Sitzung die Ereignisbehandlungsroutine für OnPassword aus oder zeigt das Standarddialogfeld für die Kennworteingabe an.
GetStoredProcNames Fügt die Namen aller gespeicherten Prozeduren in eine Stringliste ein, die einer angegebenen, mit einem SQL-Datenbankserver verbundenen Datenbankkomponente zugeordnet sind.
GetTableNames Fügt die Namen der einer bestimmten Datenbankkomponente zugeordneten Tabellen in eine Stringliste ein.
IsAlias Legt fest, ob es sich bei einem String um einen bestehenden und in der Sitzung bekannten Datenbankalias der Borland Database Engine (BDE) handelt.
ModifyAlias Fügt Parameter in einen Alias der Borland Database Engine (BDE) ein oder ändert dessen Parameter.
ModifyDriver Fügt Parameter in einen Alias der Borland Database Engine (BDE) ein oder ändert dessen Parameter.
Open Startet eine Sitzung. Die Sitzung wird zur aktuellen Sitzung.
OpenDatabase Öffnet eine bestehende Datenbank oder erstellt und öffnet eine temporäre Datenbankkomponente.
RemoveAllPasswords Löscht alle Kennwörter für verschlüsselte Paradox-Tabellen, die in die aktuelle Sitzung eingefügt wurden.
RemovePassword Löscht einzelne Kennwörter für verschlüsselte Paradox-Tabellen, die in die aktuelle Sitzung eingefügt wurden.
SaveConfigFile Überträgt die aktuellen Informationen im BDE-Speicher aus dem Arbeitsspeicher in die BDE-Konfigurationsdatei auf der Festplatte.




Die Eigenschaften der Klasse TSession werden hier gezeigt.

Public Eigenschaften
Name Beschreibung
ConfigMode Legt fest, wie die Aliase der Sitzung von der Borland Database Engine (BDE) verwendet werden sollen.
DatabaseCount Gibt die Anzahl der aktiven Datenbankkomponenten an, die der Sitzung aktuell zugeordnet sind.
Databases Enthält ein indiziertes Array mit den Namen aller aktiven Datenbanken einer Sitzung.
Handle Legt das BDE-Handle für die Sitzung fest.
Locale Legt den Sprachtreiber der Borland Database Engine (BDE) für die Sitzung fest.
TraceFlags Legt die Datenbankoperationen fest, die zur Laufzeit mit dem SQL-Monitor überwacht werden.

Dazu noch folgenden Quelltext:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, DBTables, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Database1: TDatabase;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
         i : Integer;
         k : Integer;
         sl1 : TstringList;
         sl2 : TstringList;
begin
  sl1 := TStringList.Create;
  sl2 := TStringList.Create;
  Session.GetAliasNames(memo1.lines);
  for i := 0 to memo1.lines.Count - 1 do Begin
    Database1.Close;
    Database1.AliasName := memo1.Lines[i];
    Database1.DatabaseName := memo1.Lines[i];
    Try
      Database1.Open;
      Database1.GetTableNames(sl1);
      memo2.Lines.Add('--- Datenbank ' + memo1.Lines[i]);
      for k := 0 to sl1.Count - 1 do begin
        memo2.Lines.Add('--- Feldauflistung zur Tabelle ' + sl1[k]);
        Database1.GetFieldNames(sl1[k],sl2);
        memo2.Lines.Add(sl2.Text);
      end;
    Except
      on e : Exception do begin
        memo2.Lines.add('--- ' + e.Message);
      end;
    End;
  End;
  sl2.Free;
  sl1.Free;
end;

end.
und Du hast das vom Threadersteller gewünschte Ergebnis über die BDE für alle Datenbanken die Tabellennamen und Feldname aufzulisten. Beim Einsatz der BDE kann man selbstverständlich nur die der BDE bekannten Datenbanken, Tabellen und Feldnamen auflisten. Die Aufgabenstellung lautet ja nicht: Liste mir alle für den Rechner theoretisch oder praktisch verfügbaren Datenbanken auf, von denen ich nicht mal weiß, ob es sie überhaupt gibt und von denen ich nicht mal weiß, wie ich auf sie zugreifen könnte.
Die BDE kann auf alle für sie konfigurierten Datenbanken zugreifen, hierzu zählen auch die auf dem Rechner eingerichteten ODBC-Treiber. Mehr ist nicht gefordert.

Spar die bitte in Zukunft solche Kommentare a la Unsinn.

Bernhard Geyer 12. Mär 2010 08:13

Re: SQL um Tabellen und Feldnamen rauszufinden?
 
Muss es denn BDE sein? Über BDE hast du eh das Problem das bei vielen neueren Datentypen von Oracle, MS SQL Server etc. über die BDE nur Müll ankommt. AFAIK bekommst du teilweise für NVARCHAR-Spalten den Inhalt nicht geliefert.

Also wenn ODBC gesetzt ist, ist ADO immer noch die bessere Wahl als BDE.

hoika 12. Mär 2010 08:13

Re: SQL um Tabellen und Feldnamen rauszufinden?
 
Hallo,

Tschuldigung ..

Aber

Zitat:

es muss unter mssql, oracle, db2, postgresql und mysql laufen
Es steht hier nicht
"Wie lese ich die Alias-Namen aus"

Ich muss keinen Alias-Namen in der BDE-Konfiguration haben,
um z.B. per TDataBase auf eine MS-SQL-DB zuzugreifen.
Es ist nur der Name des Servers und der DB selber notwendig (plus der Kleinkram ala User/Passwort).


Heiko

nahpets 12. Mär 2010 08:28

Re: SQL um Tabellen und Feldnamen rauszufinden?
 
Hallo,
Zitat:

Zitat von hoika
Zitat:

es muss unter mssql, oracle, db2, postgresql und mysql laufen

und genau das funktioniert auf dem von mir beschriebenen Weg.

p80286 12. Mär 2010 09:33

Re: SQL um Tabellen und Feldnamen rauszufinden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
So bekommst Du die Namen der ODBC-Verbindungen:
Delphi-Quellcode:
function GETDBS(var ll:tstringlist):boolean;
var
  reg : tregistry;
begin
  result:=true;
  reg:=tregistry.create;
  reg.rootkey:=HKEY_LOCAL_MACHINE;
  if reg.openkeyreadonly('\SOFTWARE\ODBC\ODBC.INI\ODBC DATA sources') then begin
    reg.getvaluenames(ll);
  end
  else result:=false;
  reg.closekey;
  reg.free;
end;
Und im Anhang Tabellen und Felder aus einer Oracle-DB.
Ich nutze zwar mODBC aber da kannst Du ohne große Probleme auf ADO umsteigen.

Gruß
K-H

nahpets 12. Mär 2010 10:02

Re: SQL um Tabellen und Feldnamen rauszufinden?
 
Hallo,

wi der Zugriff über das Information_Schema funktioniert, kann man unter http://en.wikipedia.org/wiki/Information_schema nachlesen.

Yc4s1vtz 16. Mär 2010 19:19

Re: SQL um Tabellen und Feldnamen rauszufinden?
 
hmm

entzwischen nutze ich auch mODBC

also ich glaube ich drücke mich falsch aus
also Tabellen und Felder gehen nun ohne probleme

aber z.b. haben wir das problem das wir eine große DB2 einsetzen
wir stellen Zement her

haben deutschlandweit halt gruben wo wir den krams halt fördern.

nun kaufen wir oft firmen und verkaufen sie auch wieder
ist halt sehr beliebt bei uns

dummerweise hat jede ihre eigene datenbank

und die kommen dann auf die große DB2
aber unter einen neuen schema

da haben wir z.b.
LBnord,
sus_Sued,
ftsued,
heidelberg
und so weiter

wie bekomme ich nun mit modbc bitteschön die schemas raus?

und noch eine frage

wenn ich in SQL angebe
SQL-Code:
 Create Database lbNord
was erstellt er da
ein schema ? eine datenbank ?
aus meiner sicht eine Datenbank
aber was ist nun ein schema?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 Uhr.
Seite 2 von 3     12 3      

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