 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
_Leo Invitado
|
Publicado: Jue 16 Nov, 2000 1:06 pm Asunto: Función para crear/borrar un alias ODBC |
|
|
| - 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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 08 Jul, 2003 3:28 am Asunto: |
|
|
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 |
|
 |
carlos_lue Cdt

Registrado: 19 Sep 2003Mensajes: 9
|
Publicado: Vie 19 Sep, 2003 3:36 am Asunto: ya use el crear odbc en tiempo de ejecucion |
|
|
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 |
|
 |
_Viktor Master


Registrado: 20 Jul 2003Mensajes: 463Ubicación: Santiago, Los Angeles - Chile
|
Publicado: Vie 19 Sep, 2003 5:14 am Asunto: |
|
|
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
 _________________ "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 |
|
 |
_Viktor Master


Registrado: 20 Jul 2003Mensajes: 463Ubicación: Santiago, Los Angeles - Chile
|
Publicado: Vie 19 Sep, 2003 5:21 am Asunto: |
|
|
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 |
|
 |
carlos_lue Cdt

Registrado: 19 Sep 2003Mensajes: 9
|
Publicado: Vie 19 Sep, 2003 5:59 am Asunto: |
|
|
muchas gracias viktor, ya logre hacer que funcionara.
gracias a todos y un saludo. |
|
| Volver arriba |
|
 |
_Viktor Master


Registrado: 20 Jul 2003Mensajes: 463Ubicación: Santiago, Los Angeles - Chile
|
|
| Volver arriba |
|
 |
carlos_lue Cdt

Registrado: 19 Sep 2003Mensajes: 9
|
Publicado: Vie 19 Sep, 2003 5:41 pm Asunto: |
|
|
| 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 |
|
 |
Sigi Cdt


Registrado: 04 Oct 2002Mensajes: 17Ubicación: Colombia
|
Publicado: Vie 16 Jul, 2004 10:33 pm Asunto: DSN del Sistema |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Vie 16 Jul, 2004 11:25 pm Asunto: |
|
|
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 |
|
 |
Wasnulfo Cdt

Registrado: 20 Ago 2002Mensajes: 4
|
Publicado: Mie 04 Ago, 2004 7:51 am Asunto: Crear ODBC para SQL SERVER |
|
|
Buenas tardes a todos:
Como se haría para crear la odbc, pero para el caso de SQL Server
Saludos |
|
| Volver arriba |
|
 |
Wasnulfo Cdt

Registrado: 20 Ago 2002Mensajes: 4
|
Publicado: Lun 13 Sep, 2004 10:38 am Asunto: Crear ODBC para SQL SERVER |
|
|
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 |
|
 |
Cri_sys Master


Registrado: 13 Feb 2004Mensajes: 198Ubicación: Maringá, Brazil
|
Publicado: Mie 24 Oct, 2007 1:24 pm Asunto: |
|
|
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 |
|
 |
tronxx Lt JG


Registrado: 30 May 2003Mensajes: 56Ubicación: Merida, Yucatan, Mexico
|
Publicado: Jue 24 Ene, 2008 7:15 pm Asunto: y alguien sabe como hacerlo para FireBird Interbase ? |
|
|
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 |
|
 |
Cri_sys Master


Registrado: 13 Feb 2004Mensajes: 198Ubicación: Maringá, Brazil
|
Publicado: Vie 25 Ene, 2008 2:34 am Asunto: Crear password ODBC |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|