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 

Función para crear/borrar un alias ODBC
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Tips & Tricks
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Función para crear/borrar un alias ODBC Responder citando

- Con esta función podemos crear un alias ODBC en tiempo de ejecución. Usandola del siguiente modo por ejemplo:

bool ret;
ret = CreateODBCAlias("MiAlias",
"miBase.mdb",
"C:\\directorio\\datos\\",
"Esto es una prueba");
// Devuelve true si se crea correctamente
ShowMessage(ret ? "Creado" : "Error");

Añadimos #include <stdio.h> /*sprintf*/


code:
bool 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;
}

- Y con esta función podemos borrar un alias ODBC en tiempo de ejecución. Usandola del siguiente modo por ejemplo:

bool ret = RemoveODBCAlias("Rebeca");
// devuelve true en caso de que se borre
ShowMessage(ret ? "Borrado" : "Error");[/code]


code:
bool 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;
}

Las dos funciones son totalmente independientes, aunque claro que si las usamos las dos no es necesario repetir tantas declaraciones ni abrir y cerrar la dll...

Probado en BCB3 y BCB5.

Volver arriba
Mensaje    Asunto: Responder citando

Para modificar un alias en vez de borrarlo y volver a crearlo podemos sustituir en la primera rutina:

    1 /* ODBC_ADD_DSN */

por:

    2 /* ODBC_CONFIG_DSN */
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: ya use el crear odbc en tiempo de ejecucion Responder citando

hola puse en practica el codigo publicado aquí para crear el alias en tiempo de ejecucion pero cuando lo compilo me aparecen los siguientes errores:
1.- [C++ Error] Unit1.cpp(22): E2268 Call to undefined function 'CreateODBCAlias'

2.- [C++ Error] Unit1.cpp(30): E2141 Declaration syntax error

3.- [C++ Error] Unit1.cpp(52): E2139 Declaration missing ;

4.- [C++ Error] Unit1.cpp(52): E2190 Unexpected }

el codigo lo coloqué en el formulario principal, en el evento OnCreate, osea cuando se crea el formulario, me podrias ayudar con esto, este es el codigo:

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
bool ret;
ret = CreateODBCAlias("MiAlias",
"gimnasio.mdb",
"C:\\Programas\\Gym\\",
"Esto es una prueba");
// Devuelve true si se crea correctamente
ShowMessage(ret ? "Creado" : "Error");

bool 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;
return bRet;
}
}
//---------------------------------------------------------------------------

a esto lo estoy haciendo en el builder 5, de antemano gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola...
hazlo tal cual esta aqui. ya que yo he usado ese codigo de esta forma y cero problemas, solo agregue la libreria stdio y lo puse en un boton.

Código:

//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


bool 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;
}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
bool ret;
ret = CreateODBCAlias("MiAlias",
"bd.mdb",
"C:\\bd\\",
"Esto es una prueba");
// Devuelve true si se crea correctamente
ShowMessage(ret ? "Creado" : "Error");


}
//---------------------------------------------------------------------------



Espero te funcione
Wink
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Debo agregar que el codigo del Button1 del mensaje anterior lo probe en el evento OnCreate del form y ningun problema tampoco...

cuando te sale el error Call to undefined function CreateODBC... es porque la estas llamando fuera de lugar, es decir, puedes poner el prototipo de la funcion o hacerla parte del Form, agregandola en el archivo cabecera del respectivo form. (unit1.h).

Bueno....
Eso-
Suerte!
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

muchas gracias viktor, ya logre hacer que funcionara.

gracias a todos y un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Wink
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

alguien conoce otra manera de crear el DSN, talves dentro de un .bat, que instale al mismo tiempo que el programa, si lo saben se los agradesco que me lo digan, para tener mas conocimiento y tener diferentes salidas al problemas. bueno adioss y gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: DSN del Sistema Responder citando

Interesante esta función, pues evita tener que pensar en la creación de ALIAS en el momento de instalar el programa, pero tengo una Duda, como hago para crear un DSN del sistema? ya que esta función me crea el DSN pero del Usuario.
_________________
ssv
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Cambiar las siguientes coincidencias:

    1 /*ODBC_ADD_DSN*/
    2 /*ODBC_CONFIG_DSN*/
    3 /*ODBC_REMOVE_DSN*/

por las siguientes:

    4 /*ODBC_ADD_SYS_DSN*/
    5 /*ODBC_CONFIG_SYS_DSN*/
    6 /*ODBC_REMOVE_SYS_DSN*/
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Crear ODBC para SQL SERVER Responder citando

Buenas tardes a todos:

Como se haría para crear la odbc, pero para el caso de SQL Server

Saludos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Crear ODBC para SQL SERVER Responder citando

Buenas a todo el foro:

He seguido intentando averiguar como generar automaticamente la odbc para sql Server pero no me funciona.

alguien ha podido indagar en este asunto.

gracias de antemano y un saludo a todos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Puedes reemplazar el 3er parametro y colocar el nombre del driver que deseas...
ya no quedaria

Código:

SQLConfigDataSource(NULL, 1 /*ODBC_ADD_DSN*/,"Microsoft Access Driver (*.mdb)", szParam);


si no
Código:

SQLConfigDataSource(NULL, 1 /*ODBC_ADD_DSN*/,"SQL Server", szParam);

para tu ejemplo

Espero q t sirva


Salu2
_________________
Read what I mean, not what I write!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: y alguien sabe como hacerlo para FireBird Interbase ? Responder citando

Obviamente no es solo cambair el parametro
Código:

           //bRet = SQLConfigDataSource(NULL, 1 /*ODBC_ADD_DSN*/,"Microsoft Access Driver (*.mdb)", szParam);
           bRet = SQLConfigDataSource(NULL, 1 /*ODBC_ADD_DSN*/,"FireBird/Interbase(r) driver", szParam);

por que ademas hay que poner usuario y password.

Estoy que me jalo los pelos solo por eso.

Help
_________________
La caja decía, requiere Win95 o superior así que instalé Linux.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Crear password ODBC Responder citando

Si no me equivoco deberias pasarlo por parametro y colocarlo en el szParam algo asi...

Código:

           sprintf(szParam, "DSN=%s; Description=%s; DefaultDir=%s; User=%s; Password=%s; DBQ=%s\0; ",
                          sAlias.c_str(), sDescription.c_str(), sDir.c_str(), User.c_str(), Pass.c_str(), sDB.c_str());


Salu2
_________________
Read what I mean, not what I write!
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.