Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
15th
Окт
Получить список DSN средствами WinApi
Posted by bullvinkle under Пост-обзор, Топик-обзор
Начал писать функцию заполняющую список строк источниками данных DSN
Для этого вытащил из odbc32.dll следующие функции:
function SQLDataSources(EnvironmentHandle:LongWord;Direction:Smallint;
ServerName:PAnsiChar;BufferLength1:Smallint;NameLength1Ptr:PSmallInt;
Description:PAnsiChar;BufferLength2:Smallint;NameLength2Ptr:PSmallInt): Smallint; stdcall; external 'odbc32.dll';
function SQLAllocHandle(HandleType:Smallint;InputHandle:Smallint;
OutputHandlePtr:Pointer): Smallint; stdcall; external 'odbc32.dll';
function SQLSetEnvAttr(EnvironmentHandle:LongWord;Attribute:Integer;
ValuePtr:Pointer;StringLength:Integer): Smallint; stdcall; external 'odbc32.dll';
function SQLFreeHandle(HandleType:Smallint;Handle:LongWord): Smallint; stdcall; external 'odbc32.dll';
А вот и сама функция:
procedure TfmConnection.UpdateDSNList(Strins: TStrings);
const
MAX_BUF=1024;
SQL_HANDLE_ENV=1;
SQL_NULL_HENV=0;
SQL_ATTR_ODBC_VERSION=200;
SQL_IS_INTEGER=-6;
SQL_FETCH_FIRST_USER=31;
SQL_FETCH_FIRST=2;
SQL_FETCH_NEXT=1;
SQL_OV_ODBC3=3;
SQL_NO_DATA=100;
var
datasrc,descrip,datasrcoem,descripoem:PAnsiChar;
tmpstr:string;
direction,ValuePtr,ret:Smallint;
rdsrc,rdesc:PSmallInt;
hEnv:Cardinal;
UL3:Cardinal;
begin
ret := SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HENV, @hEnv);
ret := SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION,POINTER(SQL_OV_ODBC3),SQL_IS_INTEGER);
direction:=SQL_FETCH_FIRST;
Strins.Clear;
ret := SQLDataSources(hEnv,direction,
datasrc,MAX_BUF,rdsrc,
descrip,MAX_BUF,rdesc
);
Strins.Add(String(datasrc));
SQLFreeHandle(SQL_HANDLE_ENV, hEnv);
end;
Поидее этот код должен вывести имя первого DSN, но начинаются проблемы в строке.
ret := SQLDataSources(hEnv,direction,
datasrc,MAX_BUF,rdsrc,
descrip,MAX_BUF,rdesc
);
Выкидываются access violation то в модуле odbc32.dll то в ntdll.dll то в kernel32.dll Теряюсь в догадках в чем проблема, помогите кто чем может.
------------------------------------------------------------------------------------------
Форумчанину fedakdenis удалось самому найти ответ на вопрос.
Код:procedure TfmConnection.UpdateDSNList(Strins: TStrings); const MAX_BUF=1024; SQL_HANDLE_ENV=1; SQL_NULL_HENV=0; SQL_ATTR_ODBC_VERSION=200; SQL_IS_INTEGER=-6; SQL_FETCH_FIRST_USER=31; SQL_FETCH_FIRST=2; SQL_FETCH_NEXT=1; SQL_OV_ODBC3=3; SQL_NO_DATA=100; var datasrc,descrip:array [0..MAX_BUF-1] of Char; tmpstr,descstring,datastring:string; direction,ValuePtr,ret:Smallint; rdsrc,rdesc:SmallInt; hEnv:Cardinal; UL3:Cardinal; begin rdsrc:=0; rdesc:=0; datasrc[0]:=#0; descrip[0]:=#0; ret := SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HENV, @hEnv); ret := SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION,POINTER(SQL_OV_ODBC3),SQL_IS_INTEGER); direction:=SQL_FETCH_FIRST; Strins.Clear; while (SQLDataSources(hEnv,direction,@datasrc[0],MAX_BUF,@rdsrc,@descrip[0],MAX_BUF,@rdesc)<>SQL_NO_DATA)do begin Strins.Add(string(datasrc)); direction:=SQL_FETCH_NEXT; end; SQLFreeHandle(SQL_HANDLE_ENV, hEnv); end;
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)