|
|
主要代码如下:
" E! z# L6 z5 P. h' o$ \5 c! p4 Z5 b$ L1 T7 L* H% c9 Q8 ]) d6 k" H
void RegisterDBSource(CString strDSName, CString strDBPath)8 m7 a# |% n8 |3 L5 ?
{
4 e$ @( n: {+ H# A% }" n6 u HKEY hKey;* r/ l" d. A+ g2 {4 e2 ~
DWORD nLabel; 3 M; P& f4 m; y9 \3 v" t; D0 K
4 ]- E4 N& q! }1 X/ d CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
3 W( c$ q+ X2 ^' ^ CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;* S% W C( B3 p- W' s
/ ~7 ~& G' t* Q) F if(strDSName.IsEmpty()) return; {2 ]6 n+ d! o. ^& u" E2 ` ?$ I
if(strDBPath.IsEmpty()) return;- U" N/ a4 O! L% q2 v* h
: X$ O4 V: I6 q0 F4 Y$ n# n- Q CString strDataSource = strBaseKey + _T("\\") + strDSName;! N$ O! b% V/ \! K0 }4 R/ K( g) k3 i R- y
2 q6 l6 z, E$ }: a
CString strMdb = _T("Microsoft Access Driver (*.mdb)");# c! H; I7 C1 |7 m% v9 l/ w8 @
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");* X9 M# c g& b. C; T
CString strFIL = _T("Ms Access;");
- e6 H" }0 v M" c CString strUID = _T("");
4 q: D' |% T: e
9 T1 X& b% Y5 G % ^7 Z/ T2 y5 w# [1 O
; y u: g" x/ W4 G! ~ RegCreateKeyEx(HKEY_CURRENT_USER,9 `; Q$ y' J: F. i* a
strMid,
) u1 J0 C B6 @ 0,
+ q$ ?; z; M W6 |6 C* L* x9 a7 L NULL, $ D4 }! }# t: w
REG_OPTION_NON_VOLATILE,
& a, b6 }" X6 |% f1 G/ r KEY_ALL_ACCESS,
( i% n5 |; ~' D+ p NULL,, q; b( ~9 E& L4 E6 U( e8 e
&hKey, & R; E9 q- p7 p9 g
&nLabel );//获取数据源键值句柄! {; O ~) d, f) p: ~7 K
- w0 x9 C: r) `- [# |3 w( _* \
RegSetValueEx(hKey,
" F( ]9 G2 m9 y- O/ H4 N' y strDSName,2 I2 d: Q6 Q7 _$ b# T, x8 |8 A
0,
* i: Q; a( [ D REG_SZ,
! G) y9 c1 ?( g4 E P1 A+ r (const unsigned char *)((LPCTSTR)strMdb),
& I4 m. j2 s1 F% J strlen((LPCTSTR)strMdb)+1);///设置数据源类型
2 d) v4 S: @" J6 X2 w1 u5 {4 |) E2 |$ o6 i) c o
RegCreateKeyEx(HKEY_CURRENT_USER,1 E7 g% O7 _% V9 G1 B! B4 r
strDataSource,
+ t0 p8 W5 O2 i( @1 O 0, - T+ L5 ?, v9 P, e7 s+ N1 p
NULL, 3 @$ ?( {; m( ?& p$ U
REG_OPTION_NON_VOLATILE, . x3 g6 C1 k& R- h0 A
KEY_ALL_ACCESS,' u7 l. Z9 X* _7 d8 u
NULL,
, G; |% H' U: i: w o6 L4 B &hKey,
/ |& n4 E1 {/ {* X7 d &nLabel );//创建数据源子键+ n* [$ P+ i( D9 ~6 d9 H
d. l' S& C6 ?$ s% ?; k+ Y: P' y
RegSetValueEx(hKey,' r7 n/ S% u! ?# I# G5 P6 v/ t- X
_T("DBQ"),8 I7 t% ^* `: ` X P6 |" Z
0,% z8 m# ^; z. m% z. ?* q) v' ~
REG_SZ,4 @ K+ X* r; N* o. W
(const unsigned char *)((LPCTSTR)strDBPath),7 _7 ~. g: `8 P6 A* l
strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
$ w. {3 X' A) c, f8 g; s! X+ A- o Q" Y) F7 @
RegSetValueEx(hKey,8 f/ |$ D3 _3 W% L$ c3 Z
_T("Driver"),
0 o+ s( M0 d! U0 a 0,
2 i, J: o# H3 G8 p+ j$ T/ h. D REG_SZ,
" f! D/ _' U. z7 a$ J9 n4 I (const unsigned char *)((LPCTSTR)strDBDriver),$ ^/ f3 F! }8 L" w2 J- C
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径9 r, u& N4 k! |) K) s! C, Q- ?
! Q) ?( ~$ J6 z4 G RegSetValueEx(hKey,
/ i. ^+ ^" p& p! i0 d) q' u0 N _T("FIL"),
& @8 t0 [/ u% G" f, J8 n4 j 0,
( A- W) P, E/ e/ a K1 O0 T2 @6 q REG_SZ,+ Q. ^! V& z0 T1 Z* T+ ~
(const unsigned char *)((LPCTSTR)strFIL),$ K* q4 K! C" u/ R2 R) [
strlen((LPCTSTR)strFIL)+1);//表的类型/ ^4 B: z1 Z! Y
( p# Z8 Q& e/ F) J RegSetValueEx(hKey,
: J9 k3 P% \7 u% j7 i% s9 u _T("UID"),! z* X( r2 n7 f& G0 H. e
0,8 v* w" Q2 H; K: H+ v7 e3 T$ P8 Q
REG_SZ,
5 K3 t- M1 ?4 J3 V$ m$ [ (const unsigned char *)((LPCTSTR)strUID),
- K" h. d i4 C. A" A: z strlen((LPCTSTR)strUID)+1);//必须项
2 {! j5 r9 z" ]! U U6 T' m
3 J# n: M; v4 q* v- _( H7 T/ S+ S$ G2 Z g) I' U8 d: a" h1 H
DWORD DriverId = (DWORD)25;
( C5 K, \, V9 A* m7 ^" o: H RegSetValueEx(hKey,
, ], s* W* u% P) @/ y2 ] _T("DriverId"),' s2 X! }" l' F8 h* {8 N
0,/ H r# |" v' k# q* t& O' M. I
REG_DWORD,
9 d: w3 w7 H* N' c# R. D (const BYTE *)(&DriverId),
4 F' i' Q$ ~7 a0 ] sizeof(DWORD));//必须项! S: W/ ^ q3 d2 n
7 R5 Y6 g' h7 A8 q* V
$ a( n/ Y7 _( x; c4 c! M DWORD SafeTrans = (DWORD)0;
" v+ M; T0 s$ f7 D9 { RegSetValueEx(hKey,
7 _' h2 O6 G& }/ p& e _T("SafeTransactions"),
6 T& V: G7 B+ N" t/ U 0,7 G; D" y6 G! j% X! R' x
REG_DWORD,
) B2 S; ]/ O0 M% V3 L6 c- C2 C (const BYTE *)(&SafeTrans),$ }5 t3 P; B+ i' i( [9 F
sizeof(DWORD));//可选项6 U8 w3 _) p+ X) l$ I
}
2 o4 u( I: d5 l* A a1 @/ j
9 ~( I. c2 W" z! Q, S 4 p4 E9 g( \1 j- ]% N5 {* h" K
/ W) ^1 y4 E6 X% C2 d8 w# F调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|