![]() |
Datenbank: allgemeine • Version: ?? • Zugriff über: BDE
SQL um Tabellen und Feldnamen rauszufinden?
Hallo,
also ich wusste nicht wo ich das thema hinschieben sollte. Ich frage mich wie ich die Tabellen namen und Feldnamen anzeigen lassen kann? ziel der ganzen sache ist das ich die Tabellen inklusive Spalten in einer listbox anzeigen lassen möchte wie sollte ich da vorgehen? VG Ötzgür |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Hallo,
dazu gibt es keine allgemeine Lösung. SQL-Standard sind Abfragen auf INFORMATION_SCHEMA, aber jeder DB-Hersteller kann es anders lösen. Und die BDE schränkt die Abfragemöglichkeiten erheblich ein. Du musst die Frage also schon genauer spezifizieren. Gruß Jürgen PS. Datenbanken ist schon das richtige Unterforum. |
Re: SQL um Tabellen und Feldnamen rauszufinden?
verdammt :(
das ist ja grade das problem ich weiss es nicht genauer ich will es ja allgemein halten |
Re: SQL um Tabellen und Feldnamen rauszufinden?
es wäre schön
wenn ich zumindest die einzelnen datenbanken rausfinden würde das wäre ein schritt in die richtige richtung es muss unter mssql, oracle, db2, postgresql und mysql laufen andere datenbanken setzen wir nicht ein und da dachte ich mir ich mache das allgemeingültig sprich man weiss ja nie wann man das nochmal gebrauchen kann :( |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Das geht aber leider nicht allgemeingültig.
Btw: Bitte nicht Pushen. Hat noch niemand geantwortet, dann bearbeite bitte deinen letzten Beitrag |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Du kannst ja ein Select auf die Systemtabellen der jeweiligen Datenbank absetzen.
Gibt es einen Fehler, dann war es halt die Falsche. Mit try .. except geht man dann zur nächsten über. Grüße // Martin |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Ich weiß nicht, wie sehr du an die BDE gebunden bist, aber evtl wären die Zeos-Komponenten einen Blick wert, dort gibts eine Komponente (TZSQLMetadata), die dir die benötigten Daten aus einer Datenbank liefert. Und sämtliche von dir genannten Datenbanken werden unterstützt.
|
Re: SQL um Tabellen und Feldnamen rauszufinden?
Die TADOConnection kann das.
|
Re: SQL um Tabellen und Feldnamen rauszufinden?
Hallo,
bei der BDE geht es zumindestens auf DB-Ebene DataBase.GetTables Aber woher soll ein Programm wissen, welche Datenbanken auf einem Server existieren ??? c:\data\data.db d:\data\data.db e:\data\data.db uups CD-Rom ;) f:\data\data.db Vergiss es am besten gleich oder besorg dir schon mal ein schickes Wässerchen gegen die grauen Haare, die du bekommen wirst ;) Heiko |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Hallo,
so riesig dürfte das Problem mit der BDE nun aber auch wieder nicht sein: TSession liefert die Datenbanken. Werden die dann der Reihe nach mit einer TDatabase verbunden, so können mit GetTableNames die Tabellen ermittelt werden und mit GetFieldNames die Spalten. Sind also ca. drei Methodenaufrufe in drei geschachtelten For-Schleifen. Über die ADO-Komponenten dürfte das mit einem ähnlichen Aufwand zu realisieren sein, man ist aber nicht mehr abhängig von der BDE, die auf neueren Betriebssystemen leider immer häufiger Probleme bekommt. |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Für die genannten DB-Systeme gibt es ein paar passende SELECT-Befehle unter
![]() |
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 :( |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Hallo,
Zitat:
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 |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Hallo Hoika,
Zitat:
Zitat:
Delphi-Quellcode:
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.
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. 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. |
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. |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Hallo,
Tschuldigung .. Aber Zitat:
"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 |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Hallo,
Zitat:
|
Re: SQL um Tabellen und Feldnamen rauszufinden?
Liste der Anhänge anzeigen (Anzahl: 1)
So bekommst Du die Namen der ODBC-Verbindungen:
Delphi-Quellcode:
Und im Anhang Tabellen und Felder aus einer Oracle-DB.
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; Ich nutze zwar mODBC aber da kannst Du ohne große Probleme auf ADO umsteigen. Gruß K-H |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Hallo,
wi der Zugriff über das Information_Schema funktioniert, kann man unter ![]() |
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:
was erstellt er da
Create Database lbNord
ein schema ? eine datenbank ? aus meiner sicht eine Datenbank aber was ist nun ein schema? |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Zitat:
Aber Vorsicht, die Speicherverwaltung ist nicht so ausgefeilt, da könnte es schon einmal eng werden (bei mehreren 10.000 Datensätzen). Zitat:
Wobei wahrscheinlich in den meisten Fällen Schema=Datenbank richtig ist, aber nicht immer! |
Re: SQL um Tabellen und Feldnamen rauszufinden?
Zitat:
|
Re: SQL um Tabellen und Feldnamen rauszufinden?
Hallo,
also ein Schema ist ein Katalog, der Informationen über sämtliche Datenbank-Objekte enthält, naja, zumindestens soll er das ;). Datenbank-Objekte sind - Datenbanken selber z.B. stehen in ms-sql alle DB's in einer sysXXX-Tabelle unter Firebird ist das nicht so (ich lasse die firebird.conf mal aussen vor) - DB-User unter FB sind die User in einer eigenen Tabelle können aber ab der 2.5 per SQL gemanaged werden unterhalb einer Tabelle wäre dann folgendes - Tabellen - Felder - Constraints - Indizes zu DB2 habe ich das hier gefunden ![]() MS-SQL ![]() Eine kurze Erklärung (allerdings für MySQL) ![]() Die Google-Suche nach "db2 schema information" sollte was finden Ich habe mich hier nicht auf DB2, sondern auf mssql und Firebird bezogen. DB2 kenne ich nicht so. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr. |
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