// 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;