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;

Mengecek ODBC lewat delphi

Untuk mengecek apakah setting ODBC yang dibutuhkan aplikasi database sudah ada pada system atau belum, maka sebelum proses koneksi diaktifkan kita harus mengecek dahulu statusnya. Apabila ini tidak dilakukan dan ternyata pada system tidak ada konfigurasi ODBC yang dibutuhkan, maka aplikasi akan terhenti secara tidak normal.

Sebaiknya kita melakukannya sesaat setelah Initialize pada Source project.

Program Test;
uses
 Forms,
 Windows,
 Sysutils,
 DBTables,
 UMain in 'UMain.pas' {FrmMain},
 UDtaMdl in 'UDtaMdl.pas' {DtaMdl: TDataModule},
 ....
 ....
{$R *.res}
Var OK : Boolean;
stPath,stDatabase,stdsn:String;
begin
Application.Initialize;
Chdir(ExtractFilePath(Application.EXEName));
GetDir(0,stpath);
stDatabase:='DATANYA.mdb';
stDsn:='NamaDSN';
Ok:=True;
//============= intinya======
If Not Session.IsAlias(stDsn) Then
Ok:=False;
 If Not Ok Then
Begin
Application.MessageBox('Konfigurasi ODBC belum   ada','Konfigurasi Database',0);
Application.Terminate;
 End else
 Begin
Application.CreateForm(TFrmMain, FrmMain);
Application.CreateForm(TDtaMdl, DtaMdl)
...
...
 End;
Application.Run;
end.