Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ODBC Schnittstellen und Datenbanken-Namen auslesen??? (https://www.delphipraxis.net/8734-odbc-schnittstellen-und-datenbanken-namen-auslesen.html)

Nexio 11. Sep 2003 01:18


ODBC Schnittstellen und Datenbanken-Namen auslesen???
 
Ich möchte einen Server z.B. MS-SQL Server 7/2000 auslesen und erfahren was für Datenbanken(mit welchen Tabellen) sich drauf befinden.
Aber auch interessiert ist, wie ich ODBC-Schnittstellen von System auslesen kann und neue definieren.

Ich habe W2k, WinXP Pro., Linux (Suse/RedHat), Delphi 5/6/7 zu Verfügung.

Dank im voraus !!!!!

neolithos 11. Sep 2003 07:19

Re: ODBC Schnittstellen und Datenbanken-Namen auslesen???
 
Dazu brauchst du erst mal eine ODBC-Api. Und in der gibts den Befehl

SQLDataSources

Weil ich nicht so bin ...
Delphi-Quellcode:
procedure TSQLEnviroment.EnumDataSources(afTyp: TDSNTypes; apEnumProc : TDSNEnumProc; apData : Pointer);
const
  ciFirstFetch : array [TDSNTypes] of SQLUSMALLINT =
    (SQL_FETCH_FIRST, SQL_FETCH_FIRST_SYSTEM, SQL_FETCH_FIRST_USER);

var cDSN : array [0..SQL_MAX_DSN_LENGTH] of Char;
    cDriver : array [0..1023] of Char;
    iLenDSN,
    iLenDriver : SQLSMALLINT;
begin
  if SQLCheck(SQLDataSources(hHandle, ciFirstFetch[afTyp],
       @cDSN, SQL_MAX_DSN_LENGTH + 1, iLenDSN,
       @cDriver, 1024, iLenDriver)) <> SQL_NO_DATA then
     repeat
       apEnumProc(cDSN, cDriver, apData); // übergebe
     until SQLCheck(SQLDataSources(hHandle, SQL_FETCH_NEXT,
       @cDSN, SQL_MAX_DSN_LENGTH + 1, iLenDSN,
       @cDriver, 1024, iLenDriver)) = SQL_NO_DATA;
end;
Achtung damit es nicht sinnlos kopiert habe ich absichtlich einige Funktionen nicht mit kopiert.

Die ganzen Klassen haben mir viel Zeit gekostet.

Nexio 11. Sep 2003 07:51

Re: ODBC Schnittstellen und Datenbanken-Namen auslesen???
 
Ich will mich gleich bedanken für die rasche antwort bedanken !!!
Jedoch kann ich dienen Quelltext nicht so nachvollziehen?!

Danke Dir :?

neolithos 11. Sep 2003 08:20

Re: ODBC Schnittstellen und Datenbanken-Namen auslesen???
 
Delphi-Quellcode:
// Dieses Procedure ist gehört zu einem Enviroment-Object
procedure TSQLEnviroment.EnumDataSources(afTyp: TDSNTypes; apEnumProc : TDSNEnumProc; apData : Pointer);
// afTyp: gibt an welche DSN's man sehen will
// apEnumProc: ist eine CallBack-Funktion
// apData: Platzhalter für Parameter an die CallBack
const
  ciFirstFetch : array [TDSNTypes] of SQLUSMALLINT =
    (SQL_FETCH_FIRST, // System und User
     SQL_FETCH_FIRST_SYSTEM, SQL_FETCH_FIRST_USER);

var cDSN : array [0..SQL_MAX_DSN_LENGTH] of Char;
    cDriver : array [0..1023] of Char;
    iLenDSN,
    iLenDriver : SQLSMALLINT;
begin
  // SQLCheck prüft auf Fehler, hab ich selbst geschrieben
  //   function SQLCheck(hr : SQLRESULT) : SQLRESULT;
  //     gibt Exception mit ODBC-Error zurück falls ein Fehler auftrat
  // SQLDataSources ist eine ODBC-Funktion
  if SQLCheck(SQLDataSources(hHandle, ciFirstFetch[afTyp],
       @cDSN, SQL_MAX_DSN_LENGTH + 1, iLenDSN,
       @cDriver, 1024, iLenDriver)) <> SQL_NO_DATA then // erster Eintrag
     repeat
       apEnumProc(cDSN, cDriver, apData); // übergebe an Callback
     until SQLCheck(SQLDataSources(hHandle, SQL_FETCH_NEXT,
       @cDSN, SQL_MAX_DSN_LENGTH + 1, iLenDSN,
       @cDriver, 1024, iLenDriver)) = SQL_NO_DATA; // alle weiteren
end;
Sag was genau jetzt noch unklar ist...

inetdancer 18. Jan 2005 12:56

Re: ODBC Schnittstellen und Datenbanken-Namen auslesen???
 
Hallo !
Ich bräuchte den gesamten Pfad zur mdb (Access). Bekomm' ich den über die Funktion SQLDataSources ??
Oder besser über die Registry ??
In welcher DLL Ist denn überhaupt die Funktion ??

Danke im Voraus !!!

clues1 18. Jan 2005 13:36

Re: ODBC Schnittstellen und Datenbanken-Namen auslesen???
 
Greif doch einfach auf die ADO schnittstellen zu. Von dort aus kannst du mit ConnectionStrings einfach eine Verbindung über eine ODBC / OLEDB zu einer Datenbank herstellen.

PS:
MSSQL:
SQL-Code:
  SELECT * FROM master.dbo.Sysdatabases // Datenbanken
  SELECT * FROM master.dbo.SysObjects WHERE xtype = 'U' // Tabellen
MySQL:
SQL-Code:
SHOW Databases // Datenbanken
SHOW Tables // Tabellen
Für die anderen, www.google.de

inetdancer 18. Jan 2005 13:43

Re: ODBC Schnittstellen und Datenbanken-Namen auslesen???
 
Ich möchte aber gerne die Datenbank überprüfen ob die ODBC richtig ist. Manchmal wenn der Server ausfällt wird der Pfad von einer Application automatisch auf einen Standard zurückgestellt. Der stimmt dann aber nicht.
Ich kann also die Datenbank garnicht mehr öffnen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 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