Un lugar de encuentro para los programadores de habla hispana

Un lugar de encuentro para los programadores de habla hispana

Buscar

Entrar

Puedes acceder utilizando tu cuenta de usuario del foro.

Si no dispone de cuenta, puede crear una accediendo al formulario de registro del foro.



Crear un DSN de MsAccess Imprimir
Ideas - C++ Builder

 
//---------------------------------------------------------------------------
// CrearDSNAccess
//   Esta función crea un Nombre de Origen de Datos para poder establecer una
//   conexión via ODBC con una base de datos Access.
//   Si el DSN ya existe con anterioridad, se modifica la ruta al archivo MDB
//   si esta fuera diferente.
//
//   Parámetros:
//     stNombreDSN      : Nombre para el origen de datos
//     stDescripcion    : Descripción del origen de datos, puede ser una
//                        cadena vacia
//     stPathArchivoMDB : Ruta completa al archivo MDB
//     bEsSistema       : true si queremos crear un DSN de sistema o false si
//                        queremos un DSN de usuario
//
//   Notas: Es necesario incluir la cabecera "Registry.hpp"
//---------------------------------------------------------------------------
void CrearDSNAccess(String stNombreDSN, String stDescripcion,
                String stPathArchivoMDB, bool bEsSistema)
{
  TRegistry* reg = new TRegistry;
 
  try
  {
    // Escogemos si queremos un DSN de sistema o usuario
    if (bEsSistema)
      reg->RootKey = HKEY_LOCAL_MACHINE;
    else
      reg->RootKey = HKEY_CURRENT_USER;
 
    // Abrimos la clave que contiene las cadenas con los DSN instalados.
    reg->OpenKey("\\Software\\ODBC\\ODBC.INI\\ODBC Data Sources", true);
 
    // Comprobamos si existe nuestro DSN, es decir, si al leer se devuelve ""
    // significa que el DSN no existe y hay que crearlo.
    if (reg->ReadString(stNombreDSN) == "")
    {
      // No existe una entrada para este DSN, por lo tanto hay que crearla.
      reg->WriteString(stNombreDSN, "Microsoft Access Driver (*.mdb)");
 
      // Creamos también una SubClave para contener los parámetros del DSN
      reg->OpenKey("\\Software\\ODBC\\ODBC.INI\\"+stNombreDSN, true);
 
      // Escribimos los datos necesarios
      reg->WriteString("DBQ", stPathArchivoMDB);
      reg->WriteString("Description", stDescripcion);
 
      // Tenemos que poner el path completo a la DLL odbcjt32.dll. Esta se
      // encuentra en el directorio Windows\System en Win9x/Me ó en
      // Winnt\System32 en NT/2000
      String stPathSystem = "";
      stPathSystem.SetLength(MAX_PATH);
      stPathSystem.SetLength(GetSystemDirectory(stPathSystem.c_str(), MAX_PATH));
      reg->WriteString("Driver", stPathSystem + "\\odbcjt32.dll");
 
      reg->WriteInteger("DriverId", 25);
      reg->WriteString("FIL", "MS Access");
      reg->WriteInteger("SafeTransactions", 0);
      reg->WriteString("UID", "");
 
      // Creamos otra subclave para contener más información propia del driver
      // de Access.
      reg->OpenKey("\\Software\\ODBC\\ODBC.INI\\"+stNombreDSN+"\\Engines\\Jet",
                    true);
 
      reg->WriteString("ImplicitCommitSync", "");
      reg->WriteInteger("MaxBufferSize", 2048);
      reg->WriteInteger("PageTimeout", 32);
      reg->WriteInteger("Threads", 3);
      reg->WriteString("UserCommitSync", "Yes");
    }
    else // El DSN ya existe.
    {
      // Abrimos la Subclave que contiene información sobre el DSN
      reg->OpenKey("\\Software\\ODBC\\ODBC.INI\\"+stNombreDSN, true);
 
      // Comprobamos si el path es el mismo para actualizarlo.
      if (reg->ReadString("DBQ") != stPathArchivoMDB)
        reg->WriteString("DBQ", stPathArchivoMDB);
    }
  }
  __finally
  {
    delete(reg);
  }
}
 
 
Comentarios (0)
Para escribir un comentario debes estar registrado