|
|
主要代码如下:5 w+ ?: C+ u" P: s/ C1 j0 o& T
# w3 a& G8 ^: d4 d) K
void RegisterDBSource(CString strDSName, CString strDBPath)
L' W- S; b6 S{; g ?% r* R, m2 H. {
HKEY hKey;
* R: r8 }6 ~2 T3 n, R# [$ z DWORD nLabel; ' u% A2 p, p. ]1 X3 D
1 f: [' M* X2 O! b
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
. I, m( ^ e4 a' M& @5 g CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;, ~* K7 I& n( y0 T/ A+ m
8 P+ A7 P. x& R9 t- ?( d% y3 Z
if(strDSName.IsEmpty()) return;! c* B/ @9 R$ @& Z! N6 I) c" j
if(strDBPath.IsEmpty()) return;; C/ ?/ j0 j! U+ B( g
1 B( r/ u" q# q
CString strDataSource = strBaseKey + _T("\\") + strDSName;3 I( H6 U' c T/ u6 b) J
" o: d: ^2 K* F+ _2 `1 ? CString strMdb = _T("Microsoft Access Driver (*.mdb)");! ]. A+ y( ]% {# V; O
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");" f% m$ ~3 W; T8 z
CString strFIL = _T("Ms Access;");
7 e2 @/ d# r1 z% S: l CString strUID = _T("");
9 v9 _3 O* f0 [5 O0 W# i6 V8 }- M8 G! D+ G9 q
/ f9 x* F5 Z! v- j7 W
% @4 d% d* n% z& V RegCreateKeyEx(HKEY_CURRENT_USER,2 k9 O# j0 O; `" y. i
strMid,2 B6 ]* [" a5 M" x
0, - _9 @9 i/ M: X7 ^
NULL, * O8 g: x* n) R9 m5 i: i9 c& W
REG_OPTION_NON_VOLATILE,
( S2 Q( _6 J0 T" P3 E% s, }4 ? V4 C KEY_ALL_ACCESS,( p& u/ T" F2 A' B0 k
NULL,( |. e0 U3 `! o9 K$ F+ a5 L
&hKey, " F; E. H8 z* ?4 s% ]( ~2 c
&nLabel );//获取数据源键值句柄
1 y/ L: e& o# v; q! L" n# b. P- {& F
RegSetValueEx(hKey,# N$ a# C2 \- G1 g+ T7 d
strDSName,2 Y; ^0 \1 Q: L! d4 [/ z6 T
0,
! y: ]# ^5 m7 D/ X8 u( P REG_SZ,+ Q5 e! K+ s( |% _* c7 O/ r
(const unsigned char *)((LPCTSTR)strMdb),
6 @, G% {6 A3 m1 m; `' Z4 R strlen((LPCTSTR)strMdb)+1);///设置数据源类型
! `4 O; U X2 p1 o) s: p4 `- C t+ ]9 z
RegCreateKeyEx(HKEY_CURRENT_USER,
2 e; P: r" L) x) I$ ^ strDataSource,
1 m; b2 ` Q+ f# W" y! G 0, $ q# Z! B/ Y) t
NULL, & S% F1 @$ _( b8 ?: n* g
REG_OPTION_NON_VOLATILE, 3 s: C/ h/ G0 M( A0 L
KEY_ALL_ACCESS,
1 M% W6 M* j1 c NULL,& S- F' m6 _' R2 ~: K2 l# r
&hKey, ) G( N1 @0 A( N2 ?) I8 S, [3 |
&nLabel );//创建数据源子键" D$ p9 V5 F4 W. d
h$ y- Y* Y. D, _5 ^/ ?# e RegSetValueEx(hKey,$ M4 i( K1 r; m0 O! e% ~
_T("DBQ"),, v, u: B, R, I Y
0,
# Y$ {( _! H- k- d' {6 _2 @" @ REG_SZ,2 F: R6 S- F0 C% w0 i
(const unsigned char *)((LPCTSTR)strDBPath),: z D- H$ [" _4 X; m7 v
strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
( n4 a% }: x$ i" F G4 f
; O. o* |5 p& k) ]* @ RegSetValueEx(hKey," z* |" X2 j( c) [' X: U# Y& X$ |
_T("Driver"),
! Z5 n/ s; z6 |. w# C6 E 0,
. Q$ n- q' c [1 K# |8 M Q' F REG_SZ,0 J7 y/ y% u# R$ H$ N, `. s$ Q3 x
(const unsigned char *)((LPCTSTR)strDBDriver),# ^# W/ A" c' D2 ?7 t9 D
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径- q$ F. j$ W+ x0 l- s+ O
% E5 t0 k! o' l# [1 e3 L! N: R( T RegSetValueEx(hKey,
+ q5 N" ~* o" n4 E# X& o7 F. H _T("FIL")," k" x" E! b9 L. U
0,; b. _3 q' I: l
REG_SZ,& p; l$ t" J& \4 ]/ k w2 w7 t9 ^
(const unsigned char *)((LPCTSTR)strFIL),7 m* y0 h/ z! p, r0 Z/ G% b4 A9 o
strlen((LPCTSTR)strFIL)+1);//表的类型) w" J3 U O& ]
# K& |0 M+ W; @8 ]9 A' E
RegSetValueEx(hKey,2 D; a( V, } z4 O+ V
_T("UID"),
. Q* O- f+ Q' Z% {( K0 s 0,
% @5 D, h7 m1 D0 D' X REG_SZ,* g' O5 x, u' d, N& j
(const unsigned char *)((LPCTSTR)strUID),
0 H A- @: \- R- {( q! D" j strlen((LPCTSTR)strUID)+1);//必须项
3 {+ u( l5 z% }+ }* ~3 `) c7 T
% y H" F! Z7 } DWORD DriverId = (DWORD)25;
' Z W3 p1 U9 c2 o; r9 `1 u RegSetValueEx(hKey,- \& c; z3 Y7 q. f9 H
_T("DriverId"),9 y1 X& I2 d; [" ~. j" W
0,/ {" A5 w- S# A
REG_DWORD,6 K2 Y& K6 B* j- c) k. g
(const BYTE *)(&DriverId),. _! `0 A' E# I
sizeof(DWORD));//必须项. f/ u( c1 D( o1 |
' f. H2 k* y. T9 B3 G
+ w/ c0 q9 l: J) R4 ~5 K! X DWORD SafeTrans = (DWORD)0;
! C. `( D1 {+ \' ] RegSetValueEx(hKey,
, }' h6 q) N6 q7 Q7 | _T("SafeTransactions"),# Z# a% B+ Z3 c% l$ R' Z, |5 h
0,
' E9 s4 q/ t- }8 U5 M REG_DWORD,
& H9 F! l) B' c1 E+ Y. x8 y2 D9 k (const BYTE *)(&SafeTrans),
, _3 o3 P9 h- s& d' j sizeof(DWORD));//可选项% T7 E: X. g4 ^( {) v/ L
}" K, w1 J `* }' _- R1 }
( g0 n9 u- L8 C, a1 V, h) k ( _9 @* c7 f& _
% k5 `8 S% @6 W
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|