Apabila aplikasi database yang kita buat dipindahkan atau diinstall di komputer lain, maka kita mesti masuk ke kontrol panel untuk membuat Data Source agar aplikasi yang kita buat dapat berjalan. Tetapi ini akan menyulitkan, apabila user tidak mengerti tentang hal itu. Apalagi nama Data Source tidak diketahui dan mungkin saja suatu saat kita sendiri lupa karena banyak aplikasi yang kita buat.
Berikut ini satu procedure untuk membuat ODBC Data Source yang menggunakan database Microsoft Access.
Const
ODBC_ADD_SYS_DSN = 4;
type
TSQLConfigDataSource = function( hwndParent: HWND;
fRequest: WORD;
lpszDriver: LPCSTR;
lpszAttributes: LPCSTR ) : BOOL; stdcall;
Procedure BuatODBCDataSource(stDsn,stDatabase,stPath:String);
var pFn: TSQLConfigDataSource;
hLib: LongWord;
strDriver: string;
strHome: string;
strAttr: string;
strFile: string;
fResult: BOOL;
ModName: array[0..MAX_PATH] of Char;
srInfo : TSearchRec;
begin
{Windows.GetModuleFileName( HInstance, ModName, SizeOf(ModName));
strHome := ModName;
while (strHome[length(strHome)] <> ‘\’) do
Delete(strHome, length(strHome), 1);
strfile :=strHome + ‘Dta.MDB’;}
strFile := stpath+’\'+stDatabase;
hLib := LoadLibrary( ‘ODBCCP32′ );
if( hLib <> NULL ) then
begin
@pFn := GetProcAddress( hLib, ‘SQLConfigDataSource’ );
if( @pFn <> nil ) then
begin
strDriver := ‘Microsoft Access Driver (*.mdb)’;
strAttr := Format(‘DSN=’+stDsn+#0+’DBQ=%s’+#0+’Exclusive=1′+#0+#0+#0,[strFile] );
fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
if(fResult = false ) then
ShowMessage( ‘Pembuatan ODBC Data Source gagal!’ );
if( FindFirst( strFile, 0, srInfo ) <> 0 ) then
begin
strDriver := ‘Microsoft Access Driver (*.mdb)’;
strAttr := Format( ‘DSN=’+stDsn+#0+ ‘DBQ=%s’+#0+ ‘Exclusive=1′+#0+#0+ ‘CREATE_DB=”%s”‘#0+#0, [strFile,strFile] );
//fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
fResult := pFn( 0, ODBC_ADD_DSN, @strDriver[1], @strAttr[1] );
if( fResult = false ) then
ShowMessage( ‘PPembuatan ODBC Data Source gagal!’ );
end;
//FindClose(srInfo);
end;
FreeLibrary(hLib);
end else
begin
ShowMessage(‘tidak berhasil membuka file ODBCCP32.DLL’);
end;
end;
Contoh penggunaan
Var
stPath,stDatabase,stdsn:String;
Begin
…
Chdir(ExtractFilePath(Application.EXEName));
GetDir(0,stpath);
stDatabase:=’Dataku.mdb’;
stDsn:=’NamaDSODBC’;
BuatODBCDataSource(stDsn,stDatabase,stPath:String);
…
End;