Создание ODBC драйвера для MSAccess
Автор: 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.
|