|
|
主要代码如下:
9 a6 `0 f" L0 U( n8 ?# M7 R; K8 @- W
void RegisterDBSource(CString strDSName, CString strDBPath)
# [8 y$ k4 ]% J0 R- c& Q{4 ~0 b) d$ m# f! j
HKEY hKey;5 U' g. _* D0 ?2 i# n1 A2 F
DWORD nLabel;
: H; W: {+ m0 E5 M6 Z$ o# P3 B9 \7 i7 g/ r
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
2 e* d. _9 C% h; p CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
. V% {; n' i8 T F- H, X" V" q4 c# w
# N8 b/ ]) F3 `, w if(strDSName.IsEmpty()) return;
7 e3 F8 B7 q; n8 e/ w' w% H if(strDBPath.IsEmpty()) return;
/ V: h' q% M) L" B2 C3 u: c1 L7 h5 c$ i' X
CString strDataSource = strBaseKey + _T("\\") + strDSName;8 l: ?' S o3 g, `7 z! z8 t
! Q% N, e- A/ _' j% C2 _2 _" g' w CString strMdb = _T("Microsoft Access Driver (*.mdb)");
% u+ u v/ F, R" `2 _ CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");1 ] ^2 `. k7 } u
CString strFIL = _T("Ms Access;");. g9 K! ]7 U; \0 F: H; R
CString strUID = _T("");
5 H* c: ~) f$ N$ K# p
1 V n; ^8 }% k% u, a 9 q4 m; E X) I6 U5 P; q
8 |8 f5 J7 l6 v RegCreateKeyEx(HKEY_CURRENT_USER,! y+ r# W- C# ^& W; p5 H. W* T* p
strMid,
3 R9 G7 a/ ~9 A% a! @! P B1 v+ ^- M 0,
/ q5 L* _$ `% r: L/ _0 s& q0 E7 W NULL,
! d. |8 C+ S; b# ]7 l# _0 @: ] REG_OPTION_NON_VOLATILE,
( Q/ T' f+ Y& b# A* g4 S5 j KEY_ALL_ACCESS,6 Z: F# A$ o# k/ O( y
NULL,
7 x" r$ X$ @' |3 k) m# R &hKey, ' d S {3 _7 u5 K
&nLabel );//获取数据源键值句柄6 G4 |' {" ]$ c% K" e$ P6 d
# d- I) X1 s& S$ u
RegSetValueEx(hKey,
' K1 H, ^' l: `# w! o9 d% m strDSName,
0 L' a5 j# C' D S* k 0,9 I* f F9 E( @# N% t0 N
REG_SZ,6 V$ Z( j9 `8 J% p, P% t% J5 Q9 ~
(const unsigned char *)((LPCTSTR)strMdb),* ?; e8 z6 A/ {( ~5 b
strlen((LPCTSTR)strMdb)+1);///设置数据源类型. L' {. Y6 t, \
( o3 @7 \9 r$ b! V% C0 i
RegCreateKeyEx(HKEY_CURRENT_USER,4 A% ~ n }9 ^
strDataSource,
7 Z) v7 G# j4 c, ?6 n5 t; ^# d 0, 8 R. o4 \9 @ @1 `0 |8 h
NULL, ' T3 |- w2 h7 g; M' o6 z
REG_OPTION_NON_VOLATILE,
% T+ {; M( g8 Y2 ?! W KEY_ALL_ACCESS,3 v `* |+ N- R+ O" f
NULL,2 ~: h. s$ p6 {. U. [! q7 e1 B( K
&hKey,
2 u2 _1 U" ^4 f$ }4 J) W) Q &nLabel );//创建数据源子键
4 E7 B. J& H( X7 R. K- v7 o
, R, n9 ~% c8 Z1 V+ D RegSetValueEx(hKey,, f$ ~$ p& C3 w, ?. a$ D
_T("DBQ"),* u4 T) k7 Z2 I+ \
0,
% p+ X% W: G% T; X; V* | REG_SZ, M5 c7 c9 \5 F: H3 C
(const unsigned char *)((LPCTSTR)strDBPath),
8 m3 a4 s6 e5 d% c: V strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
. ~% m( x7 U6 {: T$ I8 b/ y
+ n# Z* o$ P6 [& C RegSetValueEx(hKey,' G8 h" S9 Y0 T. o( f# i
_T("Driver"),
% u$ ^( R4 e! U 0,2 L/ Z# D2 P$ M- M6 }/ l
REG_SZ,
* E! ?/ X8 I4 k G* Q6 H; D (const unsigned char *)((LPCTSTR)strDBDriver),! }% J- I) i% b/ w5 A" r
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
( o* M8 B/ q1 Q9 g* t* d( V" k. s0 Y' v- A5 M! R( H6 F( U
RegSetValueEx(hKey,4 v5 B7 p1 C! A+ p
_T("FIL"),# [7 c1 P/ g0 V
0,
3 j+ [5 e' \+ z: N* x4 @2 f/ Z- ` REG_SZ,; I( W6 Y9 H- C' N
(const unsigned char *)((LPCTSTR)strFIL)," C* ~* }* I0 h' z$ _
strlen((LPCTSTR)strFIL)+1);//表的类型0 r. t6 V) G3 b1 N. o" ]
1 W1 }, J& T! r' w/ v RegSetValueEx(hKey,% t$ j9 S% {5 x0 v
_T("UID"),' F ~; Q$ _( J0 @6 l3 z( B9 Z4 T3 P
0,
. ]( J. E( a1 S" q1 S6 `6 K) Y REG_SZ, s! h9 i2 ~- ^% g
(const unsigned char *)((LPCTSTR)strUID),
: a4 z( p1 T/ K! k* |1 V( h) ^ strlen((LPCTSTR)strUID)+1);//必须项
) H5 ~( k8 V+ p. ~9 D
6 N, Z, Y; M0 E" g! y5 B' G
, f: @: T+ r7 S# n. R1 j, k DWORD DriverId = (DWORD)25;0 W1 M8 L2 O" h; i" E
RegSetValueEx(hKey,5 C! @ l3 p/ s
_T("DriverId"),' \# Y: [7 ~" u# n6 L. H. A
0,
% |. t0 Q5 f$ u0 D, X7 c) J REG_DWORD,# j( f8 R, M; X0 `1 Z+ M m
(const BYTE *)(&DriverId),
$ w4 m2 L2 ~ U+ a sizeof(DWORD));//必须项
( {& y& g9 q9 y2 K$ R& ] 3 E% W2 K3 B, X, T
, F W7 s* \8 n2 l( f j
DWORD SafeTrans = (DWORD)0; ^, n; l# k2 }8 ?- U9 R
RegSetValueEx(hKey,( E* n" ]+ c! K/ O4 ?+ X5 |4 S) _
_T("SafeTransactions"),
5 f4 a' ?) o, r [' D 0,
& M$ ^8 G6 F4 i$ J6 k/ o9 B2 @. F REG_DWORD,
/ j% h. X1 n' T+ Z3 n" W (const BYTE *)(&SafeTrans),
: ]8 E6 L0 z h6 b4 b+ P1 V sizeof(DWORD));//可选项
( ?% {0 Y0 p: o# `. g9 B3 u4 F" P}
. P, F. Y; z. _7 k9 V; }$ \$ v8 `& W( x2 t* v
; n( K$ n7 C8 l3 `( K8 T
4 W9 Y4 ~* {, O9 n$ G( k' m: d
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|