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 

Configurar ODBC

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Configurar ODBC Responder citando

Hola Amigos,

Tengo una duda y espero que algien pueda ayudarme...

¿Puedo crear un Origen de datos (DSN de Sistema) a través de código?

Lo que pasa es que tengo lista mi aplicacón y tengo configurado mi DSN con el driver de Access. Ahora bien cuando instalo mi aplicación en otro ordenador tengo que configurar manualmente a través del ODBC mi origen de datos.

Entonces lo que necesito y saber si puedo crear mediante código esta configuración. Es algo asi como crear un Alias en el BDE, pero en mis caso sería en el ODBC.

Por su atención. Gracias.

Saludos, Raúl
Volver arriba
Mensaje    Asunto: Responder citando

Alguna idea o sugerencia...

Gracias.
Volver arriba
Mensaje    Asunto: Responder citando

Te paso el codigo que crea y el que elimina los odbc, espero te sirvan.

bool TfrmPpal::CreateODBCAlias(String sAlias, String sDB, String sDir, String sDescription)
{
typedef BOOL (__stdcall *pSQLConfigDataSource)(HWND, WORD, 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; Description=%s; DefaultDir=%s; DBQ=%s\0", 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);
} // Devuelve true si se crea o false en caso contrario
return bRet;
}

bool TfrmPpal::RemoveODBCAlias(String sAlias)
{
typedef BOOL (__stdcall *pSQLConfigDataSource)(HWND, WORD, 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;\0", 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;
}
Volver arriba
Mensaje    Asunto: Responder citando

Gracias luis.

Lo probaré...

Saludos Raúl
Volver arriba
Mensaje    Asunto: Creacion de ODBC Responder citando

Hola Luis:

Me podrías indicar que librerias utilizas (*.h)
Cambiando el driver para SQL Server funcionaría igualmente.

un saludo y gracias de antemano
Volver arriba
Mensaje    Asunto: Responder citando

Hola,
he probado el código para crear el ODBC pero cuando llega a la linea:

bRetorno = SQLConfigDataSource(NULL, 1 /*ODBC_ADD_DSN*/, "PostgreSQL", szParam);

me sale la pantalla esta de seguimiento de los registros de la CPU o algo así, y realmente no sé qué estoy haciendo mal.
Si alguien sugiere algo,
gracias,
Laura
Volver arriba
Mensaje    Asunto: Responder citando

Nacho, en mi aplicacion no usa ningun .h en particular. Para que funcione para SQL Serverm debes cambiarle la cadena de conexion (szParam) y adecuarla a tu base de datos.
Volver arriba
Mensaje    Asunto: Responder citando

Laura, no se a que se deba tu problema, pero sospecho que es porque el el tercer parametro ("PostgreSQL") debe ser un nombre de driver valido, de los que aparecen en la lista cuando creas un ODBC manualmente. Por ejemplo, estas serian unas cadenas validas:
bRetorno = SQLConfigDataSource(NULL, 1 /*ODBC_ADD_DSN*/, "Microsoft Acces Driver (*.mdb)", szParam);
o
bRetorno = SQLConfigDataSource(NULL, 1 /*ODBC_ADD_DSN*/, "SQL Server", szParam);
Espero que te funcione.
Volver arriba
Mensaje    Asunto: Creacion de ODBC Responder citando

Hola Luis:

Disculpa, pero se me fue un poco el santo al cielo.

El problema que tengo es con la asignación de atributos.

La base de datos, SQL Server, tendría la siguiente ODBC.

Alias: factura1
Descripción: Base de Datos Mensual
SERVER: Aldebaran o 189.245.80.97
user de BD: facturacion
pasw de BD: facturacion
Conexion por TCP y al puerto 1433.

String a1,a2,a3,a4,a5,a6,a7;
a1="factura1";
a2="Base de Datos Mensual";
a3="189.245.80.97";
a4="FACTURACION";
a5="facturacion";
a6="facturacion";
a7="dbmssocn";

sprintf(szParam, "DSN=%s; Server=ALDEBARAN; Description=%s; Address=%s; Database=%s; UID=%s; PWD=%s; Network=%s;",a1.c_str(),a2.c_str(),a3.c_str(),a4.c_str(),a5.c_str(),a6.c_str(),a7.c_str());
bRet = SQLConfigDataSource(NULL, 1 /*ODBC_ADD_DSN*/,
"SQL Server", szParam);


Te agradecería Luis, que me dijeras por que Falla

un saludo
Volver arriba
Mensaje    Asunto: Responder citando

Hola,
a ver yo tuve algunos problemillas con esta función, pero he conseguido arreglarlos, paso mi código de función y si alguien quiere algún tipo de explicación que lo diga vale?


bool __fastcall TForm1::CreateODBCAlias(String sAlias, String sDB, String sDir, String sDescription)
{
typedef BOOL (__stdcall *pSQLConfigDataSource)(HWND, WORD, LPCSTR, LPCSTR);
pSQLConfigDataSource SQLConfigDataSource;
HINSTANCE hLib;
bool bRet;
hLib = LoadLibrary("odbccp32.dll");

if (hLib)
{
SQLConfigDataSource = (pSQLConfigDataSource) GetProcAddress(hLib, "SQLConfigDataSource");
if (SQLConfigDataSource)
{
char szParam[1024];

memset(szParam,'\0',sizeof(szParam));
sprintf(szParam, "DSN=%s;Database=%s;Server=% s;Uid=s;DefaultDir=%s", sAlias.c_str(),sDB.c_str(),sDir.c_str(),"calypso");

char *p;
p = szParam;
while (*p) {
if (*p == ';') {
*p = '\0';
++p;
}
++p;
}

bRet = SQLConfigDataSource(NULL, ODBC_ADD_DSN, "PostgreSQL", szParam);
}
FreeLibrary(hLib);
} // Devuelve true si se crea o false en caso contrario
return bRet;
}

Por cierto mi base de datos está con Postgres.
Saludos,
Laura
Volver arriba
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.