Title: mySQL
Question: How can we register alias Odbc dinamically for mysql ?
Answer:
we connect to mysql by the myODBC. It's possible that driver myOdbc of mysql it aren't installed.
the driver name for connect mysql across to odbc begin for "mysql".
//*******************************************************************
// Funcition EXISTS DRIVER ODBC
// Fecha: 12-07-04
// Descripcin: if exist the odbc driver installed
//
//
// Parametros de Entrada : Name Driver, (e.g.: mysql)
// Parametros de Salida : dll driver, driver name compelte
// Devuelve : True or False
//*******************************************************************
function ExistsDriverODBC(driver: string; var DriverDll, NombreDriver:string): boolean;
var Registro: TRegistry;
ExisteRegistro, Encuentro: boolean;
ListDrivers: TStrings;
i, PosDriver: Integer;
begin
//Abrimos el Registro para Buscar el Driver especifico
Registro:=TRegistry.Create;
Registro.RootKey:=HKEY_LOCAL_MACHINE;
ExisteRegistro:=Registro.OpenKey('SOFTWARE\ODBC\ODBCINST.INI\ODBC DRIVERS',False);
Encuentro:=false;
if ExisteRegistro then
begin
//Recogemos toda la Lista de Drivers ODBC disponibles en la mquina actual
ListDrivers:=TStringList.Create;
Registro.GetValueNames(ListDrivers);
//Comprobar que exista el Driver Pasado Como Parametro
i:=0;
while (i begin
if UPPERCASE(Copy(ListDrivers.Strings[i],0,length(driver)))=UPPERCASE(driver) then
begin
Encuentro:=true;
posDriver:=i;
end;
i:=i+1;
end;
end;
if Encuentro then
begin
Registro.CloseKey;
DriverDll:='';
Registro.OpenKey('SOFTWARE\ODBC\ODBCINST.INI\'+ListDrivers.Strings[posDriver],False);
DriverDll:=Registro.ReadString('Driver');
NombreDriver:=ListDrivers.Strings[posDriver];
end;
Registro.Free;
result:=Encuentro;
end;
Once we have verified that driver this installed we verified that the
alias is created. The following function verifies that is
installed, if it isn`t installed it creates and if it is created it modifies according to parameters.
//*******************************************************************
// Funcin EXISTS ALIAS MYSQL
// Fecha: 12-07-04
// Descripcin: verifies if exists mysql alias.
//
//
// Parametros de Entrada : alias name, server, database name, user,
// dll driver (obtain acrros to ExistsDriverOdbc)
// Parametros de Salida :
// Devuelve : true or false
//*******************************************************************
function ExistsAliasMySQL(Alias, Server, bd, User, Driver, NombreDriver:string): boolean;
var Registro: TRegistry;
ExisteRegistro, Encuentro: boolean;
ListDrivers: TStrings;
i, PosDriver: Integer;
begin
//Abrimos el Registro para Buscar el Driver especifico
Registro:=TRegistry.Create;
Registro.RootKey:=HKEY_LOCAL_MACHINE;
ExisteRegistro:=Registro.OpenKey('SOFTWARE\ODBC\ODBC.INI\'+Alias,False);
if not ExisteRegistro then
begin
result:=false;
Registro.OpenKey('SOFTWARE\ODBC\ODBC.INI',False);
Registro.CreateKey(Alias);
Registro.OpenKey(Alias,False);
Registro.WriteString('database','test');
Registro.WriteString('description',nombredriver);
Registro.WriteString('Driver',driver);
Registro.WriteInteger('option',3);
Registro.WriteString('password','');
Registro.WriteInteger('port',3306);
Registro.WriteString('Server',server);
Registro.WriteString('stmt','');
Registro.WriteString('user',user);
Registro.CloseKey;
Registro.OpenKey('SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources',False);
Registro.WriteString(Alias,nombreDriver);
Registro.CloseKey;
end
else
begin
result:=true;
//Si Existe el Registro, Cambiamos los parametros
//con los del archivo config.ini
Registro.OpenKey('SOFTWARE\ODBC\ODBC.INI',False);
Registro.OpenKey(Alias,False);
Registro.WriteString('Server',server);
Registro.WriteString('database',bd);
Registro.WriteString('user',user);
Registro.CloseKey;
end;
Registro.Free;
end;
I'm sorry for my english.
Thanks.