PDA

Ver la Versión Completa : Modificar valores conexión ODBC


vpepen
03-05-2010, 15:17:51
Buenos días a tod@s.

Por favor, les agradecería si pudieran orientarme un poco con respecto a modificar los valores de una conexión a una base de datos a través de ODBC. Tenemos un sistema llamado PixelPoint, desarrollado en Delphi y con base de datos Sybase SQL Anywhere 5.0. Es un sistema de punto de ventas. Tenemos cuatro servidores con pixelpoint y sys respectivas cajas que apuntan a esos servidores. El sistema tiene una parte administrativa que para acceder a ella se puede hacer simplemente modificando los valores de la conexión ODBC (Server Name y Database Name). De esta manera si los usuarios (supervisores) quieren acceder a la base de datos de un servidor especifico solo tienen que modificar estos valores con los valores del servidor que le corresponda (fmspuj, salonvip, segafredo, realson, etc).

Me gustaría saber si es posible desde delphi poder modifica estos valores en la conexión ODBC. Aclaro que se utiliza la misma conexión y lo único que se modifica son los valores (Server Name y Database Name) para acceder a una determinada base de datos. Esto lo deseo hacer para que el usuario no tenga que estar modificando manualmente la conexión ODBC.

Traté de hacerlo a través de un .bat o script pero no me resultó.

Saludos.

manuc
03-05-2010, 20:54:38
Hola vpepen,

Desconozco si existe un método más "Adecuado" pero: ¿has probado a cambiarlo en el registro de windows?

Con Delphi, puedes cambiar el valor de la clave "Server" y "Database" en la rama HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI\"nombre-de-tu-conexion"

No lo he probado, pero creo que puede ser una solución a tu problema.

Un saludo.

jmandrake
03-05-2010, 21:08:52
Hola, te pongo un trozo de codigo que hice para algo parecido, en el creo la conexion ODBC por codigo, como te muestro a continuacion:

procedure TForm1.Button1Click(Sender: TObject);
var
pFn: TSQLConfigDataSource;
hLib: LongWord;
strDriver: string;
strHome: string;
strAttr: string;
strFile: string;
fResult: BOOL;
ModName: array[0..MAX_PATH] of Char;
srInfo: TSearchRec;
RutaPrg,RutaPrg2:String;
begin
Windows.GetModuleFileName(HInstance, ModName, SizeOf(ModName));
strHome := ModName;

if rgIdioma.ItemIndex = 0 then
RutaPrg:='c:\Archivos de programa'
else RutaPrg:='c:\Program Files';


while (strHome[length(strHome)] <> '\') do
Delete(strHome, length(strHome), 1);
strFile := strHome + 'TestData.MDB'; // Test Access Rights (Axes = Access)
hLib := LoadLibrary('ODBCCP32'); // load from default path
if (hLib <> NULL) then
begin
@pFn := GetProcAddress(hLib, 'SQLConfigDataSource');
if (@pFn <> nil) then
begin
// force (re-)create DSN
strDriver := 'Firebird/InterBase(r) driver';
strAttr := Format('DSN=MyDataSource' + #0 +
'DBQ=%s' + #0 + 'Database='+RutaPrg2+'data\Ejemplo.gdb'+ #0+
'Client='+ RutaPrg+'\Firebird\Firebird_1_5\bin\fbclient.dll'+#0+
'UID=SYSDBA'+#0+
'Password=masterkey'+#0+
'Description=Test Data' + #0 + #0,
[strFile]);
fResult := pFn(0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1]);
if (fResult = false) then
ShowMessage('Create DSN (Datasource) failed!');

// test/create MDB file associated with DSN
if (FindFirst(strFile, 0, srInfo) <> 0) then
begin
strDriver := 'Firebird/InterBase(r) driver';
strAttr := Format('DSN=MyDatasource' + #0 +
'DBQ=%s' + #0 +'Database='+RutaPrg2+'data\Ejemplo.gdb'+ #0+
'Client='+RutaPrg+'\Firebird\Firebird_1_5\bin\fbclient.dll'+#0+
'UID=SYSDBA'+#0+
'Password=masterkey'+#0+
'Description=Conexion de Datos' + #0 +
'CREATE_DB="%s"'#0 + #0,
[strFile, strFile]);
fResult := pFn(0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1]);
if (fResult = false) then
ShowMessage('Conexion Creada!');
end;
FindClose(srInfo);

end;

FreeLibrary(hLib);
end
else
begin
ShowMessage('Unable to load ODBCJDBC.DLL');
end;


end;

Nota: Si te fija lo que hago es una conexion a Firebird via ODBC, pero con pocas modificaciones puede hacerlo para cualquier tipo de conexion segun sean los Drivers de datos que vayas a utilizar, pues recuerda que dependiendo del tipo de conexion ODBC varian los parametros solicitado.

Saludo y espero saber si te funcionó....