{ **** 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. |