Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Conectar alias con BDAccess por linea de comandos

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Conectar alias con BDAccess por linea de comandos Responder citando

Hola!

He hecho un programa en Borland C++ que utiliza una base de datos de Access. Para acceder a la base de datos utilicé la creacción de un alias en panel de control/herramientas de programa/... y luego la seleccióne desde el programa. El problema es que me gustaría que el programa fuera "autosuficiente" es decir, no tener que hacer esos pasos manualmente, sino dejarlo programado para que cada vez que active el programa, se cree este alias, aunque sea de manera temporal. Sabéis si es posible? Sé que para otras bases de datos (dBase, Paradox...) hay una función "AddStandardAlias" que hace precisamente esto, pero no he encontrado nada para Access.

Me podéis ayudar?

Gracias!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

hola y bienvenido.

encontre este codigo para delphi y lo adapte, espero que te sirva...

Código:


#include <windows.h>

typedef BOOL (__stdcall *pSQLConfigDataSource)(HWND, WORD, LPCSTR, LPCSTR);

//sAlias - nombre de alias
//sDB - nombre de base de datos access
//sDir - path para encontrarla
//sDescription - lo que quieras

bool CreateODBCAlias(AnsiString sAlias, AnsiString sDB, AnsiString sDir, AnsiString sDescription)
{
pSQLConfigDataSource SQLConfigDataSource;
HINSTANCE hLib;
bool bRet = false;
hLib = LoadLibrary("odbccp32.dll");
 if (hLib)
   {
     SQLConfigDataSource =  (pSQLConfigDataSource) GetProcAddress(hLib, "SQLConfigDataSource");
     if (SQLConfigDataSource)
       {
           char szParam[1024];
           sprintf(szParam, "DSN=%s; Description=%s; DefaultDir=%s; DBQ=%s",
                  sAlias.c_str(), sDescription.c_str(), sDir.c_str(), sDB.c_str());
           bRet = SQLConfigDataSource(NULL, 1 /*ODBC_ADD_DSN*/,
                   "Microsoft Access Driver (*.mdb)", szParam);
       }
     FreeLibrary(hLib);
 }

return bRet;
}

-------------------------------------------------------------------------------------
//sAlias - nombre de alias
bool RemoveODBCAlias(AnsiString sAlias)
{
// typedef BOOL (__stdcall *pSQLConfigDataSource)HWND,ORD, LPCSTR, LPCSTR);
pSQLConfigDataSource SQLConfigDataSource;
HINSTANCE hLib;
bool bRet = false;
hLib = LoadLibrary("odbccp32.dll");
if (hLib)
   {
       SQLConfigDataSource = (pSQLConfigDataSource) GetProcAddress(hLib, "SQLConfigDataSource");
       if (SQLConfigDataSource)
        {
           char szParam[1024];
           sprintf(szParam, "DSN=%s;", sAlias.c_str());
           bRet = SQLConfigDataSource(NULL,3 /*ODBC_REMOVE_DSN*/,"Microsoft Access Driver (*.mdb)", szParam);
       }
       FreeLibrary(hLib);
   }
// Devuelve true si se borra o false en caso contrario
    return bRet;
}



Yo lo he hecho funcionar varias veces y es OK. Espero que seas asiduo al foro, Wink
Volver arriba
Mensaje    Asunto: Responder citando

best_guitar escribió:
hola y bienvenido.

encontre este codigo para delphi y lo adapte, espero que te sirva...

Código:


#include <windows.h>

typedef BOOL (__stdcall *pSQLConfigDataSource)(HWND, WORD, LPCSTR, LPCSTR);

//sAlias - nombre de alias
//sDB - nombre de base de datos access
//sDir - path para encontrarla
//sDescription - lo que quieras

bool CreateODBCAlias(AnsiString sAlias, AnsiString sDB, AnsiString sDir, AnsiString sDescription)
{
pSQLConfigDataSource SQLConfigDataSource;
HINSTANCE hLib;
bool bRet = false;
hLib = LoadLibrary("odbccp32.dll");
 if (hLib)
   {
     SQLConfigDataSource =  (pSQLConfigDataSource) GetProcAddress(hLib, "SQLConfigDataSource");
     if (SQLConfigDataSource)
       {
           char szParam[1024];
           sprintf(szParam, "DSN=%s; Description=%s; DefaultDir=%s; DBQ=%s",
                  sAlias.c_str(), sDescription.c_str(), sDir.c_str(), sDB.c_str());
           bRet = SQLConfigDataSource(NULL, 1 /*ODBC_ADD_DSN*/,
                   "Microsoft Access Driver (*.mdb)", szParam);
       }
     FreeLibrary(hLib);
 }

return bRet;
}

-------------------------------------------------------------------------------------
//sAlias - nombre de alias
bool RemoveODBCAlias(AnsiString sAlias)
{
// typedef BOOL (__stdcall *pSQLConfigDataSource)HWND,ORD, LPCSTR, LPCSTR);
pSQLConfigDataSource SQLConfigDataSource;
HINSTANCE hLib;
bool bRet = false;
hLib = LoadLibrary("odbccp32.dll");
if (hLib)
   {
       SQLConfigDataSource = (pSQLConfigDataSource) GetProcAddress(hLib, "SQLConfigDataSource");
       if (SQLConfigDataSource)
        {
           char szParam[1024];
           sprintf(szParam, "DSN=%s;", sAlias.c_str());
           bRet = SQLConfigDataSource(NULL,3 /*ODBC_REMOVE_DSN*/,"Microsoft Access Driver (*.mdb)", szParam);
       }
       FreeLibrary(hLib);
   }
// Devuelve true si se borra o false en caso contrario
    return bRet;
}



Yo lo he hecho funcionar varias veces y es OK. Espero que seas asiduo al foro, Wink

_________________
Be water my friend.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.