|
主要代码如下:
1 n9 J1 B4 b* P
0 ]8 y% k/ }) r Lvoid RegisterDBSource(CString strDSName, CString strDBPath)
& l% K1 ~/ f- q1 C{
8 @9 M) |: J+ }9 [ HKEY hKey;" m0 |8 k; C+ Q4 N9 L
DWORD nLabel; ; V9 E. \$ @0 D& j# l- |
) u/ A' q. B" v/ t: S1 h% E9 t
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");, @8 y$ c1 P* g3 T
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
9 z R! m5 L0 O5 s
1 t/ ^0 Q0 z7 ?8 M9 j' A6 E if(strDSName.IsEmpty()) return;; V5 D1 R" z. F0 \3 p S% e7 \
if(strDBPath.IsEmpty()) return;% d5 d4 b7 H6 a+ b7 m
+ o: h- i4 Y6 @) R* E7 b: Y CString strDataSource = strBaseKey + _T("\\") + strDSName;
m c3 K- d' g5 P6 f' r5 |7 ]
( \$ Q: `7 i7 G7 R S( M! z& U CString strMdb = _T("Microsoft Access Driver (*.mdb)");' f: h3 J; F9 c+ L6 F5 |
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");" d! Q# ?6 I3 X
CString strFIL = _T("Ms Access;");
, x8 Y O& s2 _& W- J- ` CString strUID = _T("");$ Y+ g! l4 D; o1 h- P
* v5 |6 d/ P4 N* v
}" _5 m$ w# @: ]( n
% |; C! p7 y# Y8 B$ @ RegCreateKeyEx(HKEY_CURRENT_USER,+ D9 e* o9 S2 s
strMid,* W4 O% \& X4 O
0,
8 u) T9 |0 g1 u8 j0 W2 x" E" F NULL, ; t( M" |" r/ R+ s$ `) K" t
REG_OPTION_NON_VOLATILE, . {# Y; d) I- F) @' h
KEY_ALL_ACCESS,) Z2 g9 W9 q! ]/ L
NULL,
. m! B, M% d- J &hKey, 3 `2 r5 Z# y5 V* u
&nLabel );//获取数据源键值句柄
' ]7 d/ q+ V P- i3 A) Y9 p% ^: |8 D/ I, o+ P; J" T
RegSetValueEx(hKey,
5 G; c! U Y9 z. d, f6 j# Z strDSName,/ z# C5 |# |6 U1 X& s! p( ?
0,9 |/ _+ i5 C' p' U- F3 D4 _: ~3 W' c0 y
REG_SZ,5 m7 d) x4 B" g- v
(const unsigned char *)((LPCTSTR)strMdb),
& I, _7 d1 T1 N& x$ d. | strlen((LPCTSTR)strMdb)+1);///设置数据源类型9 r9 o# U4 `1 Y7 s
6 h9 P, V; x/ h& e- f+ L: X8 K RegCreateKeyEx(HKEY_CURRENT_USER,
1 E* E! [% C1 L5 Q strDataSource,( X1 G1 d" C( g& F0 h/ y
0, u- B# V* x4 J4 i
NULL,
8 B9 @- G7 S3 r( a( h REG_OPTION_NON_VOLATILE, ) d* V [4 V: Y0 G
KEY_ALL_ACCESS,: d: |6 Z. O2 e' I/ a" h5 w
NULL,4 P( {* Y) K# g# E3 }: b7 X
&hKey,
) t( |, v/ h' I &nLabel );//创建数据源子键
& A' }6 y2 {4 g6 b! N9 ^# C5 m# ?* d) r8 `- j& B
RegSetValueEx(hKey,
4 d0 ^9 F% @- t: ?( J) j5 W _T("DBQ"),
" z J# j" @) Y& K' r ` 0,
; Z8 c8 \9 b4 H6 @! } REG_SZ,
$ K$ x. r5 c* h2 ~& V (const unsigned char *)((LPCTSTR)strDBPath),
z; v D- O7 d strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径& ?, `7 _0 S; A- l: n0 x
1 x3 a, r) X+ b" l3 B RegSetValueEx(hKey,
* h2 B" \0 f$ a0 k% p _T("Driver"),
0 f. J P/ Q5 f3 x 0,
* L7 _# b2 ~. A6 d+ W) w( z REG_SZ,
% T* R0 O* _$ X& w6 }; E/ Y (const unsigned char *)((LPCTSTR)strDBDriver),- }; H+ }& s0 E
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径; I% U+ ~0 Y1 u# a0 w( p
3 j7 r3 C" g; K$ U RegSetValueEx(hKey,
; k! H( o3 U+ l8 ]; V _T("FIL"),
6 m; @5 G7 N) [+ A 0,
* e" w3 Y; l- R# ~ R! Z REG_SZ,
8 p, ]! h' p) b6 {# o F3 O4 S \ (const unsigned char *)((LPCTSTR)strFIL),
% c8 y* P& e' l0 t# D strlen((LPCTSTR)strFIL)+1);//表的类型, T4 s2 W6 }& S- F8 [
& h8 N: H6 ]6 Q M2 O5 p RegSetValueEx(hKey,& D# `" {9 {+ `" V* }3 H
_T("UID"),
/ B7 _! \ y3 G* K% w p$ y4 ` 0,! X3 G$ ]: Y# |# J) p
REG_SZ,/ c, @ B7 D: v- J" S$ f
(const unsigned char *)((LPCTSTR)strUID),
! W6 Q% V) `7 g7 }+ x strlen((LPCTSTR)strUID)+1);//必须项
2 H+ P6 P* [: [, t* X1 s8 V. Q% Y* t+ F) [4 [4 [( ]6 O, i
1 i0 E+ t, a C$ {1 Q: N% k4 c% K DWORD DriverId = (DWORD)25;
1 R" T0 [9 L! o' {! t: D6 f. N RegSetValueEx(hKey,
8 `6 }! [3 l0 v: B0 Z _T("DriverId"), c& b. [3 w* p' l$ t
0,
- T6 f3 \- U: W* L REG_DWORD,
1 G2 v! R: }) C/ b- J6 Y2 \ (const BYTE *)(&DriverId), A# Z" T# N0 O! o+ F* I; R! X1 T
sizeof(DWORD));//必须项. O& ~0 _! O: |7 v6 D" @% k
7 w9 {/ Q4 k3 _7 \# f5 l7 k) v
. \/ H p% \# e$ n
DWORD SafeTrans = (DWORD)0;
?: N7 V* G1 N+ R/ ^1 X' c% z; A) U* f RegSetValueEx(hKey,
9 p9 I S: S* N [' X _T("SafeTransactions"),
) y4 [) `' }& Y- n4 ]( S5 l 0,
$ x% b6 i& v: t, W- L. r REG_DWORD,( h# y- U, d1 g+ Y
(const BYTE *)(&SafeTrans),6 z0 K$ i. G {/ o
sizeof(DWORD));//可选项
. R4 i( h! d) a3 t5 q}4 }+ N/ j# G9 {- @* ~3 P; w
. F a N# K: j! y
! Z5 }2 _" @2 `9 H3 d$ N1 Y
* X2 o6 R) k) n/ o0 {/ y- s s调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|