|
|
主要代码如下:5 {9 }; f* s E+ l d' v [
/ T! k: K4 a3 D+ V/ k+ Cvoid RegisterDBSource(CString strDSName, CString strDBPath)
5 B9 {2 v) V( Y: S2 P' w{0 m3 j3 L1 |/ m9 J
HKEY hKey;
) o7 H5 f% ?% N# G2 Z8 v; ~( l, ^! V DWORD nLabel; 1 O" A2 J9 S ^; l
6 G8 b) Y( n0 p- t2 J/ V) H
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");# _; b0 x j; J5 r
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
1 T# e+ D: u& m! R4 Y, j5 S% D+ o8 R* R
if(strDSName.IsEmpty()) return;7 \# f# J6 I" }" U2 `( g
if(strDBPath.IsEmpty()) return;1 v$ I- h9 G2 k! S" n2 k
8 D1 R; k ~- `+ s* N2 [9 ]
CString strDataSource = strBaseKey + _T("\\") + strDSName;
, R% b# a9 o% `; X! X# t3 ]; A# G4 r; ^# `% I; I
CString strMdb = _T("Microsoft Access Driver (*.mdb)"); J* M# u2 C5 B+ x/ o, U+ D. |
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
: R, u( G- [& f& B8 h CString strFIL = _T("Ms Access;");
! R! E, _$ T. |0 T7 _, W CString strUID = _T("");0 ~, M! ^ I' i% x
# w9 B2 h( `& F4 n7 [0 M
8 k, X8 j) i" ~4 P) v1 E) [3 T% V( T1 v
RegCreateKeyEx(HKEY_CURRENT_USER,) m+ ]5 z5 e4 O5 A; U- r
strMid,2 q& o! g, A& d A2 k
0, + a% H! R! E7 }4 \4 I1 i, T) i
NULL,
$ f% V2 u' a9 }- ~9 _- u% j% P$ t REG_OPTION_NON_VOLATILE,
: {$ R) J# r0 r% J7 y9 y, F KEY_ALL_ACCESS,% a" G( T0 R! U6 r0 C) S
NULL,' s. e3 t1 V1 b
&hKey, % b- Z$ X, E4 i3 e w* m+ v* G
&nLabel );//获取数据源键值句柄# Y: n0 F N% l7 U; O5 @
& e( K8 F. j1 E8 f
RegSetValueEx(hKey,4 @) _, v; Q8 X0 d
strDSName,
8 T8 Q/ z4 X" \3 q( Q 0,
" s, C" @% }# | REG_SZ,
% z8 H: `+ I2 e9 p4 M (const unsigned char *)((LPCTSTR)strMdb),
3 J# [. g# A6 Y strlen((LPCTSTR)strMdb)+1);///设置数据源类型
- C4 o- c2 L) Q* n* F' S8 Q9 p1 z; A% W& @+ X
RegCreateKeyEx(HKEY_CURRENT_USER,) o9 L# V+ Q+ u
strDataSource,
" c- M4 B A+ W2 q2 R/ w. H' i 0,
A; B6 `5 U+ J" F f NULL, / c5 m4 J$ X) H) K# E, L7 H
REG_OPTION_NON_VOLATILE, " B% g3 I, B( k/ u; P
KEY_ALL_ACCESS,
( N4 c# h. _5 G NULL,: K! h3 a8 R, e" M- ^) i- O
&hKey,
+ [3 k5 g4 o" [. b2 v &nLabel );//创建数据源子键
5 }* e7 T* N) U0 b, ~( G* o6 Y1 S+ x1 M, Q: }1 `5 m5 z
RegSetValueEx(hKey,
9 v1 h4 b) ^- g( f, w& a _T("DBQ"),. p/ X: `4 F# r& J! Y3 G" [7 i
0,
* g9 ?7 T7 L, ?! i- T REG_SZ,
2 _+ j0 p' O: s; n' {: `7 X! D (const unsigned char *)((LPCTSTR)strDBPath),
r7 [1 V8 N/ F: H/ Y, ?) K/ |/ T strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径4 k; ~, e" m- N% Q
: E8 @% U$ T( l( ]! N3 F+ A3 Q
RegSetValueEx(hKey,% \! ^- Z( U8 M
_T("Driver"),5 m7 ~! S! M k: c
0,
+ \) L; j& g4 Y* U$ X REG_SZ,$ R7 @! ^$ u9 Q1 O. a9 ~( ]% x8 b
(const unsigned char *)((LPCTSTR)strDBDriver),
4 r {+ }/ T4 C p4 V5 P strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径$ U' ^2 w" X m7 }
$ C0 i: l9 J; m; C8 p1 c RegSetValueEx(hKey,
, ~; G8 U# r, `3 T6 g o: p7 w& ?( F _T("FIL"),7 R E. H0 N' K$ j# w# [
0,
7 t0 o+ N2 z! q5 ? REG_SZ,
& t3 }2 {! v. D (const unsigned char *)((LPCTSTR)strFIL),
+ S3 t2 T! u0 U) j- J4 v" m3 w strlen((LPCTSTR)strFIL)+1);//表的类型2 t$ {& p z2 x9 i
7 }7 x, C0 C8 A4 O8 }( v0 M0 _# H; R RegSetValueEx(hKey,, v- f5 `! K& u$ n! W9 c
_T("UID"),/ w% z! Z9 K/ ^7 H+ x6 |: j7 m
0,
- n! G( ?5 Q; f% ^* r* O" m REG_SZ,. V8 J, J& H* E: r" i) Z1 O
(const unsigned char *)((LPCTSTR)strUID),
+ ?0 x1 Y3 i7 y7 c2 Z; J strlen((LPCTSTR)strUID)+1);//必须项: Z& L0 `" s) Q
( g0 B, i" R" g7 l1 I
& f8 ^8 r9 u; E9 H* y9 ]& [ DWORD DriverId = (DWORD)25;
' a6 p1 o8 \4 Y3 h9 {8 L RegSetValueEx(hKey,
" u# ^/ c Q: t4 o' u _T("DriverId"),4 Q) l0 N! o9 s' w! T
0,4 n) b' E' K0 c" v3 G9 B6 E
REG_DWORD,. Z& H6 H: _ b
(const BYTE *)(&DriverId),
' u5 I( A8 b/ ^ \4 k7 S( d: `; ^ sizeof(DWORD));//必须项2 l- k5 x$ j* A7 U, ?
- ?: @3 [2 v. P
: N) p0 ?9 W: Y% C3 h7 C1 u' {+ |/ r+ I
DWORD SafeTrans = (DWORD)0;2 p3 a% t7 S+ Z( l6 S& b
RegSetValueEx(hKey,
9 N& Y4 Z0 o B8 K1 ?1 H( N' u, _ _T("SafeTransactions"),7 q, c$ ?$ j) _% Y
0,
2 T. A. I3 [. z- f) { REG_DWORD,
1 y5 z$ J: B7 t* w1 p# s (const BYTE *)(&SafeTrans),
) M' U2 P0 d3 z' b& v sizeof(DWORD));//可选项) ?6 ^) J: ~. p: y& p
}
$ P5 A* W. n6 X, R: t" p
6 |3 Y# ?3 E% S: i2 U' i# X % Y5 _! R% S! D4 Q) s0 b" ^
1 y) A9 d1 @8 }3 B3 }% ]7 I调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|