Arsip: Dynamic ODBC untuk MySQL dan Ms Access


by grounders in Articles more 18 years ago 3490
Dengan unit ini maka tidak perlu lagi melakukan setting manual ODBC jika program dipindahkan antar komputer,
settingan manual ODBC ini yang sering dikeluhkan oleh programmer2 karena dianggap tidak efektif
Nantinya dengan Unit ini program akan secara otomatis membuatkan settingan ODBC untuk komputer yang bersangkutan
Jika program baru pertama kali dijalankan maka running yang pertama akan digunakan sebagai inisialisasi ODBC terlebih dahulu, sehingga running yang pertama kali akan menimbulkan error, namun untuk running selanjutnya tidak akan error.

Gunakan ini dalam suatu unit tersendiri, yang nantinya class function yang ada dalam unit ini bisa dipanggil dari unit lain
Unit ini dapat menggunakan File INI atau registry sebagai parameter masukannya
Atau parameter password dapat mengunakan teknik enkripsi sehingga password yang tertulis di File INI bukan password aslinya
unit UKoneksi;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Registry;
type
// =========  Resulttype  =============
  TResultType1 = Boolean;
// ======== class type =============
  TExistsDriverODBC = TResultType1;
TExistsAliasAccess = TResultType1;
TExistsAliasMySQL = TResultType1;
Alias = class
class function ExistsDriverODBC(driver: string; var DriverDll,
Deskripsi:string): TExistsDriverODBC;
class function ExistsAliasAccess(Alias, dbq, Driver : string): TExistsAliasAccess;
class function ExistsAliasMySQL(Alias, Server, db, User,
Driver, Deskripsi, password : string): TExistsAliasMySQL;
end;
implementation
class function Alias.ExistsDriverODBC(driver: string; var DriverDll, Deskripsi:string): TExistsDriverODBC;
var Registry: TRegistry;
ExistRegistry, Hasil: boolean;
ListDrivers: TStrings;
i, PosDriver: Integer;
begin
//Pengecekan ODBC Driver yg sudah terinstal
  Registry:=TRegistry.Create;
Registry.RootKey:=HKEY_LOCAL_MACHINE;
ExistRegistry:=Registry.OpenKey('SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC DRIVERS',False);
Hasil:=false;
if ExistRegistry then
begin
ListDrivers:=TStringList.Create;
Registry.GetValueNames(ListDrivers);
//memposisikan driver sesuai dengan yg dicari
    i:=0;
while (i < PosDriver) do
begin
if UPPERCASE(Copy(ListDrivers.Strings[i],0,length(driver)))=UPPERCASE(driver) then
begin
Hasil:=true;
posDriver:=i;
end;
i:=i+1;
end;
end;
if Hasil then
begin
Registry.CloseKey;
DriverDll:='';
Registry.OpenKey('SOFTWARE\\ODBC\\ODBCINST.INI\'+ListDrivers.Strings[posDriver],False);
DriverDll:=Registry.ReadString('Driver');
Deskripsi:=ListDrivers.Strings[posDriver];
end;
Registry.Free;
result:=Hasil;
end;
class function Alias.ExistsAliasAccess(Alias, dbq, Driver : string): TExistsAliasAccess;
var Registry: TRegistry;
ExistRegistry, Hasil: boolean;
ListDrivers: TStrings;
i, PosDriver: Integer;
begin
//Pengecekan sesuai spesifikasi Alias ODBC Ms Access
  Registry:=TRegistry.Create;
Registry.RootKey:=HKEY_LOCAL_MACHINE;
ExistRegistry:=Registry.OpenKey('SOFTWARE\\ODBC\\ODBC.INI\'+Alias,False);
if not ExistRegistry then
begin
result:=false;
Registry.OpenKey('SOFTWARE\\ODBC\\ODBC.INI',False);
Registry.CreateKey(Alias);
Registry.OpenKey(Alias,False);
Registry.WriteString('DBQ', dbq);
Registry.WriteString('Driver', driver);
Registry.WriteInteger('Driverid', 25);
Registry.WriteString('Fil', 'MS Access');
Registry.WriteInteger('SafeTransactions', 0);
Registry.WriteString('UID', '');
Registry.CloseKey;
Registry.OpenKey('SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources',False);
Registry.WriteString(Alias, dbq);
Registry.CloseKey;
end
else
begin
result:=true;
Registry.OpenKey('SOFTWARE\\ODBC\\ODBC.INI',False);
Registry.OpenKey(Alias,False);
Registry.WriteString('dbq', dbq);
Registry.CloseKey;
end;
Registry.Free;
end;
class function Alias.ExistsAliasMySQL(Alias, Server, db,
User, Driver, Deskripsi, password, port : string): TExistsAliasMySQL;
var Registry: TRegistry;
ExistRegistry, Hasil: boolean;
ListDrivers: TStrings;
i, PosDriver: Integer;
begin
//Pengecekan sesuai spesifikasi Alias ODBC MySQL
  Registry:=TRegistry.Create;
Registry.RootKey:=HKEY_LOCAL_MACHINE;
ExistRegistry:=Registry.OpenKey('SOFTWARE\\ODBC\\ODBC.INI\'+Alias,False);
if not ExistRegistry then
begin
result:=false;
Registry.OpenKey('SOFTWARE\\ODBC\\ODBC.INI',False);
Registry.CreateKey(Alias);
Registry.OpenKey(Alias,False);
Registry.WriteString('Database',db);
Registry.WriteString('Description',Deskripsi);
Registry.WriteString('Driver',driver);
Registry.WriteString('Option','3');
Registry.WriteString('Password',password);
Registry.WriteString('Port',port);
Registry.WriteString('Server',server);
Registry.WriteString('Stmt','');
Registry.WriteString('User',user);
Registry.CloseKey;
Registry.OpenKey('SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources',False);
Registry.WriteString(Alias,Deskripsi);
Registry.CloseKey;
end
else
begin
result:=true;
Registry.OpenKey('SOFTWARE\\ODBC\\ODBC.INI',False);
Registry.OpenKey(Alias,False);
Registry.WriteString('Server',server);
Registry.WriteString('Description',Deskripsi);
Registry.WriteString('Database',db);
Registry.WriteString('User',user);
Registry.WriteString('Password',password);
Registry.WriteString('Port',port);
Registry.CloseKey;
end;
Registry.Free;
end;
end.
Syntax Highlighted with https://pascal-id.org/syntax
Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com