Membuat ODBC Data Source saat run-time dengan Delphi

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;

Tinggalkan Balasan