使用Delphi以编程方式获取ODBC数据源名称列表,可以通过调用Windows API函数SQLDataSources
来实现。以下是一个简单的示例代码:
uses
Windows, SysUtils, DB, ODBC;
function GetODBCDataSourceNames: TStringList;
var
hEnv: SQLHENV;
hDsn: SQLHDBC;
RetCode: SQLRETURN;
ServerName, UserName: array[0..1024] of Char;
NameLength1, NameLength2: SQLSMALLINT;
begin
Result := TStringList.Create;
try
RetCode := SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, hEnv);
if RetCode <> SQL_SUCCESS then
Exit;
RetCode := SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, @SQL_OV_ODBC3, 0);
if RetCode <> SQL_SUCCESS then
Exit;
RetCode := SQLAllocHandle(SQL_HANDLE_DBC, hEnv, hDsn);
if RetCode <> SQL_SUCCESS then
Exit;
RetCode := SQLDriverConnect(hDsn, 0, nil, 0, nil, 0, @NameLength1, SQL_DRIVER_NOPROMPT);
if RetCode <> SQL_SUCCESS then
Exit;
RetCode := SQLDataSources(hEnv, SQL_FETCH_FIRST, ServerName, 1024, NameLength1, UserName, 1024, NameLength2);
while RetCode = SQL_SUCCESS do
begin
Result.Add(Format('%s (%s)', [ServerName, UserName]));
RetCode := SQLDataSources(hEnv, SQL_FETCH_NEXT, ServerName, 1024, NameLength1, UserName, 1024, NameLength2);
end;
finally
SQLFreeHandle(SQL_HANDLE_DBC, hDsn);
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
end;
end;
在这个示例代码中,我们首先调用SQLAllocHandle
函数来分配环境句柄,然后调用SQLSetEnvAttr
函数来设置环境属性,接着调用SQLAllocHandle
函数来分配连接句柄,然后调用SQLDriverConnect
函数来建立与数据源的连接。最后,我们调用SQLDataSources
函数来获取ODBC数据源名称列表,并将其添加到TStringList
对象中。
需要注意的是,这个示例代码只是一个简单的示例,实际应用中可能需要更多的错误处理和资源管理。
领取专属 10元无门槛券
手把手带您无忧上云