kelkun pourrai m'aider à crée dynamiquement un lien ODBC vers une database Oracle.
merci
kelkun pourrai m'aider à crée dynamiquement un lien ODBC vers une database Oracle.
merci
salut,
regarde dans la faq si tu ne trouves pas ton bonheur ...
http://c.developpez.com/faq/vc/?page=ODBC
![]()
Ce qui est affirmé sans preuve peut être nié sans preuve Euclide.
Les conversions numériques en C,C++,C++/CLI
DLL d'extensions : écriture d'un plug-in de classe
Démarrer avec les MFC 2/2
Création d'un ActiveX MFC
Intégration d'une imprimante PDF pour éditions automatisées
Migrer du code de Visual C++ 6.0 vers Visual C++ 2005
Démarrer avec les MFC sous Visual C++1/2
la Faq Visual C++ 500 Q/R,Mon blog
Aide en Ligne MFC
Cours et tutoriels C++ - FAQ C++ - Forum C++.
Avec SQLConfigDataSource.
Petit exemple pour SqlServer (en QT):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 /* * OdbcWrapper : classe encapsulant l'utilisation d'ODBC pour la manipulation * de source de données. * Les sources crées / manipulées sont des sources locales * (spécifiques à l'utilisateur courant) */ #ifndef ODBCWRAPPER_H #define ODBCWRAPPER_H class QWidget; class QString; class OdbcWrapper { public: /// crée une source ODBC avec authentification faite par SqlServer static bool CreateDSN( const QString & SourceName, /// nom de la source ODBC const QString & SourceDescr, /// description const QString & Server, /// nom du serveur const QString & DatabaseName /// nom de la base de données ); /// affiche la boite d'édition manuelle de la source ODBC dont le nom /// est donné static void ConfigureDSN( QWidget * Parent, /// Widget parent du dialogue const QString & SourceName /// nom de la source ODBC ); /// supprime source ODBC dont le nom est donné static bool RemoveDSN( const QString & SourceName /// nom de la source ODBC ); /// teste si la source donnée est déjà créée static bool IsExistingDSN( const QString & SourceName /// nom de la source ODBC ); /// en cas d'erreur, cette fonction renvoie un message explicatif static QString GetLastErrorMsg(); }; #endif
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133 #include "OdbcWrapper.h" #include <qwidget.h> #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <odbcinst.h> /// crée une source ODBC avec authentification faite par SqlServer bool OdbcWrapper::CreateDSN( const QString & SourceName, /// nom de la source ODBC const QString & SourceDescr, /// description const QString & Server, /// nom du serveur const QString & DatabaseName /// nom de la base de données ) { std::string odbc_cfg_params; odbc_cfg_params += "DSN="; odbc_cfg_params += SourceName.data(); odbc_cfg_params += '\0'; odbc_cfg_params += "Description="; odbc_cfg_params += SourceDescr.data(); odbc_cfg_params += '\0'; odbc_cfg_params += "Server="; odbc_cfg_params += Server.data(); odbc_cfg_params += '\0'; odbc_cfg_params += "Database="; odbc_cfg_params += DatabaseName.data(); odbc_cfg_params += '\0'; odbc_cfg_params += "Trusted_Connection=no"; odbc_cfg_params += '\0'; BOOL ret = ::SQLConfigDataSource( NULL, ODBC_ADD_DSN, "SQL Server", odbc_cfg_params.c_str() ); return ret == TRUE; } /// affiche la boite d'édition manuelle de la source ODBC dont le nom /// est donné void OdbcWrapper::ConfigureDSN( QWidget * Parent, /// Widget parent du dialogue const QString & SourceName /// nom de la source ODBC ) { HWND hwnd = Parent->winId(); std::string odbc_cfg_params; odbc_cfg_params += "DSN="; odbc_cfg_params += SourceName.data(); odbc_cfg_params += '\0'; ::SQLConfigDataSource( hwnd, ODBC_CONFIG_DSN, "SQL Server", odbc_cfg_params.c_str() ); } /// supprime source ODBC dont le nom est donné bool OdbcWrapper::RemoveDSN( const QString & SourceName /// nom de la source ODBC ) { std::string odbc_cfg_params; odbc_cfg_params += "DSN="; odbc_cfg_params += SourceName.data(); odbc_cfg_params += '\0'; BOOL ret = ::SQLConfigDataSource( NULL, ODBC_REMOVE_DSN, "SQL Server", odbc_cfg_params.c_str() ); return ret == TRUE; } /// teste si la source donnée est déjà créée bool OdbcWrapper::IsExistingDSN( const QString & SourceName /// nom de la source ODBC ) { // on teste l'existence / l'accès de la clé dans la BDR // à HKCU\Software\ODBC\ODBC.INI\<source_name> std::string hkey_path = "Software\\ODBC\\ODBC.INI\\"; hkey_path += SourceName.data(); HKEY hKey; if ( ::RegOpenKeyEx( HKEY_CURRENT_USER, hkey_path.c_str(), 0, KEY_READ, &hKey ) == ERROR_SUCCESS ) { ::RegCloseKey( hKey ); return true; } return false; } /// en cas d'erreur, cette fonction renvoie un message explicatif QString OdbcWrapper::GetLastErrorMsg() { DWORD ErrorCode; const int ErrorMsgMaxSize = 1000; char ErrorMsg[ ErrorMsgMaxSize ]; WORD ErrorMsgSize; #ifdef SQLInstallerError // UNICODE... #undef SQLInstallerError #endif if ( ::SQLInstallerError( 1, &ErrorCode, ErrorMsg, ErrorMsgMaxSize, &ErrorMsgSize ) == SQL_SUCCESS ) { return ErrorMsg; } return "<Erreur inconnue>"; }
merci beaucoup, cella m'a bien aidé.
j'ai fais une petite fonction pour Oracle.
bien sur il faut initialier un objet de type stDSN et lui passer les bon param.
ca marche super bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 struct stDsn { CString strOdbcDriverName; CString strServerName; CString strDsnName; CString strUserId; CString strPassword; }; BOOL CMyDatabase::CreateDynamicOracleDSN(stDsn stDsnTemp) { char* pBuf; CString strDSN,strConnect; strDSN.Format("DSN=%s",stDsnTemp.strDsnName); //Recreate DSN SQLConfigDataSource(NULL,ODBC_REMOVE_DSN,stDsnTemp.strOdbcDriverName,strDSN); SQLConfigDataSource(NULL,ODBC_REMOVE_SYS_DSN,stDsnTemp.strOdbcDriverName,strDSN); strConnect.Format( "DSN=%s#" "UID=%s#" "PWD=%s#" "SERVER=%s#", stDsnTemp.strDsnName,stDsnTemp.strUserId,stDsnTemp.strPassword,stDsnTemp.strServerName); int iLength = strConnect.GetLength(); pBuf = strConnect.GetBuffer(iLength); for (int i=0; i< iLength; i++) if (pBuf [i] == '#') pBuf [i] = 0; // Creation du DSN SYSTEM BOOL bResult = SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Oracle dans OraHome92",strConnect); return bResult; }
Partager