Здравствуйте, _silent, Вы писали:
_> Очень бы хотелось узнать, как можно узнать список Alias'ов ODBC без использования BDE (Session — это, насколько я знаю работает именно через BDE), а с использованием ADO.
_> Можно ли так сделать?
Прочитать ветку рееста HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI
... << RSDN@Home 1.1.4 beta 4 rev. 302>>
Здравствуйте, _silent, Вы писали:
Другой путь — использовать ODBC API. Функция SQLDataSources.
... << RSDN@Home 1.1.4 beta 4 rev. 302>>
Здравствуйте, kavlad, Вы писали:
K>Здравствуйте, _silent, Вы писали:
K>Другой путь — использовать ODBC API. Функция SQLDataSources.
Честно нарыто в интернете и слегка подштукатурено
type
SQLSMALLINT = SmallInt;
SQLUSMALLINT = Word;
SQLCHAR = Char;
PSQLCHAR = PChar;
SQLRETURN = SQLSMALLINT;
SQLHANDLE = Pointer;
SQLHENV = SQLHANDLE;
const
SQL_SUCCESS = 0;
SQL_NO_DATA = 100;
SQL_FETCH_NEXT = 1;
SQL_FETCH_FIRST = 2;
SQL_MAX_DSN_LENGTH = 32;
SQL_MAX_OPTION_STRING_LENGTH = 256;
function SQLAllocEnv(var EnvironmentHandle: SQLHENV): SQLRETURN; stdcall; external 'odbc32.dll';
function SQLFreeEnv(EnvironmentHandle: SQLHENV): SQLRETURN; stdcall external 'odbc32.dll';
function SQLDataSources(
EnvironmentHandle: SQLHENV;
Direction: SQLUSMALLINT;
ServerName: PSQLCHAR;
BufferLength1: SQLSMALLINT;
var NameLength1: SQLSMALLINT;
Description: PSQLCHAR;
BufferLength2: SQLSMALLINT;
var NameLength2: SQLSMALLINT): SQLRETURN; stdcall external 'odbc32.dll';
procedure GetODBCDataSources (ResultList : TStrings);
var
EnvironmentHandle: SQLHANDLE;
Buffer1: array[0..SQL_MAX_DSN_LENGTH] of SQLCHAR;
Buffer2: array[0..SQL_MAX_OPTION_STRING_LENGTH] of SQLCHAR;
Len1, Len2: SQLSMALLINT;
ServerName, Description: string;
begin
ResultList.BeginUpdate;
try
ResultList.Clear;
if SQLAllocEnv(EnvironmentHandle) = SQL_SUCCESS then
try
if SQLDataSources(EnvironmentHandle, SQL_FETCH_FIRST,
Buffer1, SizeOf(Buffer1), Len1, Buffer2, SizeOf(Buffer2), Len2) = SQL_SUCCESS
then
repeat
SetString(ServerName, Buffer1, Len1);
ResultList.Add(ServerName);
until SQLDataSources(EnvironmentHandle, SQL_FETCH_NEXT,
Buffer1, SizeOf(Buffer1), Len1, Buffer2, SizeOf(Buffer2), Len2) = SQL_NO_DATA;
finally
SQLFreeEnv(EnvironmentHandle);
end;
finally
ResultList.EndUpdate;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GetODBCDataSources (Memo1.Lines);
end;