Создание ODBC драйвера для MSAccess

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Konstantin Einstein

WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****

>> Создание ODBC драйвера для MSAccess

Функция создает ODBC драйвер для MSAccess.

В функцию передается имя файла и имя для драйвера.

В конкретной редакции драйвер создается в разделе «System DSN».

Зависимости: Windows, SysUtils, Dialogs, Variants;

Автор: Konstantin Einstein

Copyright: Konstantin Einstein

Дата: 9 декабря 2002 г.

***************************************************** }

unit CreateODBCforMDB;

interface

uses

Windows, SysUtils, Dialogs, Variants;

const

ODBC_ADD_DSN = 1; (* Add data source *)

ODBC_CONFIG_DSN = 2; (* Configure (edit) data source *)

ODBC_REMOVE_DSN = 3; (* Remove data source *)

ODBC_ADD_SYS_DSN = 4; (* add a system DSN *)

ODBC_CONFIG_SYS_DSN = 5; (* Configure a system DSN *)

ODBC_REMOVE_SYS_DSN = 6; (* remove a system DSN *)

type

TSQLConfigDataSource = function(hwndParent: HWND;

fRequest: WORD;

lpszDriver: LPCSTR;

lpszAttributes: LPCSTR): BOOL; stdcall;

function CreateODBCDriver(fail_name, driver_name: string): Boolean;

implementation

function CreateODBCDriver(fail_name, driver_name: string): Boolean;

var

pFn: TSQLConfigDataSource;

hLib: LongWord;

strDriver, strAttr: string;

fResult: BOOL;

srInfo: TSearchRec;

begin

Result := True;

hLib := LoadLibrary(‘ODBCCP32’); //load from default path

if (hLib NULL) then

begin

@pFn := GetProcAddress(hLib, ‘SQLConfigDataSource’);

if (@pFn nil) then

begin (* force (re-)create DSN *)

strDriver := ‘Microsoft Access Driver (*.mdb)’;

strAttr := Format(‘DSN=’ driver_name #0

‘DBQ=%s’ #0

‘Exclusive=0’ #0

‘Description=’ driver_name ‘ DSN’ #0 #0,

[fail_name]);

fResult := pFn(0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1]);

if (fResult = false) then

begin

ShowMessage(‘Create DSN (Datasource) failed!’);

Result := False;

Exit;

end;

// test/create MDB file associated with DSN

if (FindFirst(fail_name, 0, srInfo) 0) then

begin

strDriver := ‘Microsoft Access Driver (*.mdb)’;

strAttr := Format(‘DSN=’ driver_name #0

‘DBQ=%s’ #0

‘Exclusive=0’ #0

‘Description=’ driver_name ‘ DSN’ #0

‘CREATE_DB=»%s»‘#0 #0,

[fail_name, fail_name]);

fResult := pFn(0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1]);

if (fResult = false) then

begin

ShowMessage(‘Create MDB (Database file) failed!’);

Result := False;

end;

end;

FindClose(srInfo);

end;

FreeLibrary(hLib);

end

else

begin

ShowMessage(‘Unable to load ODBCCP32.DLL’);

Result := False;

end;

Result := fResult;

end;

end.

{/codecitation}

Добавить комментарий