Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Modificar valores conexión ODBC (https://www.clubdelphi.com/foros/showthread.php?t=67727)

vpepen 03-05-2010 15:17:51

Modificar valores conexión ODBC
 
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

Con Esto Lo Soluciona....
 
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:

Código Delphi [-]
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ó....


La franja horaria es GMT +2. Ahora son las 18:03:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi