аналог Session.GetAliasNames в ADO... ?
От: _silent Россия http://www.bezhetsk.ru
Дата: 25.04.05 21:58
Оценка:
Здавствуйте, уважаемые знатоки!

Очень бы хотелось узнать, как можно узнать список Alias'ов ODBC без использования BDE (Session — это, насколько я знаю работает именно через BDE), а с использованием ADO.
Можно ли так сделать?

Ведь для нормального коннекта через TADOConnection мне все равно нужно название Alias'а, так ведь? А вот получить его хотелось бы нормальным путем (:

Заранее благодарен за ответ
Re: аналог Session.GetAliasNames в ADO... ?
От: kavlad Россия http://www.wavesoft.ru
Дата: 26.04.05 06:15
Оценка:
Здравствуйте, _silent, Вы писали:

_> Очень бы хотелось узнать, как можно узнать список Alias'ов ODBC без использования BDE (Session — это, насколько я знаю работает именно через BDE), а с использованием ADO.

_> Можно ли так сделать?

Прочитать ветку рееста HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI
... << RSDN@Home 1.1.4 beta 4 rev. 302>>
Re: аналог Session.GetAliasNames в ADO... ?
От: kavlad Россия http://www.wavesoft.ru
Дата: 26.04.05 06:22
Оценка:
Здравствуйте, _silent, Вы писали:

Другой путь — использовать ODBC API. Функция SQLDataSources.
... << RSDN@Home 1.1.4 beta 4 rev. 302>>
Re[2]: аналог Session.GetAliasNames в ADO... ?
От: Danchik Украина  
Дата: 26.04.05 15:44
Оценка:
Здравствуйте, 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;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.