Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получение списка подключений ODBC: альтернативные методы для 32 и 64 битных систем

Delphi , Графика и Игры , Canvas

При работе с базами данных в Delphi и Pascal часто возникает потребность получить список подключений ODBC на локальной системе. В этом материале мы рассмотрим несколько альтернативных методов получения списка подключений ODBC для 32 и 64 битных систем.

Использование реестра

Один из способов получения списка подключений ODBC заключается в чтении значений реестра. Для этого можно использовать компонент TRegistry из пакета SysUtils. Ниже приведен пример кода, который возвращает список подключений для текущего пользователя:

function GetUserDSN: TStringList;
var
  ini: TRegistry;
  strings: TStringList;
begin
  ini := TRegistry.Create(KEY_READ);
  strings := TStringList.Create;
  with ini do
  try
    RootKey := HKEY_CURRENT_USER;
    if KeyExists('SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources') then
    begin
      OpenKeyReadOnly('SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources');
      GetValueNames(strings);
    end;
    Result := strings;
  finally
    ini.Free;
  end;
end;

Для получения списка подключений для всей системы можно использовать HKEY_LOCAL_MACHINE вместо HKEY_CURRENT_USER. Однако, при чтении реестра для 64 битной версии Windows, 32 битное приложение не имеет доступа к 64 битному разделу реестра. В этом случае можно использовать ключ Wow6432Node, но это не гарантирует получение всех подключений ODBC.

Использование API ODBC

Более надежным способом получения списка подключений ODBC является использование API ODBC. Функция SQLDataSources позволяет получить список подключений, доступных для текущего приложения. Ниже приведен пример кода, который возвращает список подключений для текущего пользователя и всей системы:

procedure GetODBCSources(var dsnList: TStringList; isSystem: Boolean);
var
  hEnv: HDBC;
  hStmt: HSTMT;
  i: Integer;
begin
  if SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, hEnv) = SQL_SUCCESS then
  try
    if SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0) = SQL_SUCCESS then
    try
      if SQLAllocHandle(SQL_HANDLE_STMT, hEnv, hStmt) = SQL_SUCCESS then
      try
        if SQLDataSources(hStmt, isSystem, @i, 0, nil, 0) = SQL_SUCCESS then
        begin
          dsnList := TStringList.Create;
          while SQLDataSources(hStmt, isSystem, @i, 0, nil, 0) = SQL_SUCCESS do
          begin
            SetLength(dsnList, dsnList.Count + 1);
            dsnList[dsnList.Count - 1] := i;
          end;
        end;
      finally
        SQLFreeHandle(SQL_HANDLE_STMT, hStmt);
      end;
    finally
      SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
    end;
  except
    on E: Exception do
      Writeln('Error: ', E.Message);
  end;
end;

В этом примере функция GetODBCSources принимает два параметра: список подключений dsnList и флаг isSystem, указывающий, нужно ли получать список подключений для текущего пользователя или для всей системы. Функция SQLDataSources используется для получения списка подключений, а флаг isSystem указывает, нужно ли получить список подключений для текущего пользователя (SQL_FETCH_FIRST_USER) или для всей системы (SQL_FETCH_FIRST_SYSTEM).

Заключение

В данной статье мы рассмотрели два альтернативных метода получения списка подключений ODBC: чтение реестра и использование API ODBC. Использование API ODBC является более надежным способом, так как оно учитывает различия между 32 и 64 битными версиями Windows и возвращает список подключений, доступных для текущего приложения. При этом, оба метода могут быть полезны в зависимости от конкретной задачи и требований к приложению.

Создано по материалам из источника по ссылке.

Материал описывает альтернативные методы получения списка подключений ODBC для 32 и 64 битных систем в Delphi и Pascal: чтение реестра и использование API ODBC.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Canvas ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 05:40:48/0.0033230781555176/0