|
|
主要代码如下:
4 M3 P/ ^0 I' M, Q$ G) E# W J0 y
8 o# F+ \& E2 a0 J8 `% ivoid RegisterDBSource(CString strDSName, CString strDBPath)1 z- f- i; I) Y0 J" w: h
{- N' q; u. r# n3 X
HKEY hKey;# Q+ L+ P! z. R0 J. ?7 k
DWORD nLabel;
, H# ?: `' Q I0 q7 {8 E; y5 N- }5 s
2 m, Q' V3 @+ a' {9 h CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");- t/ S; W4 X" l$ Z! h
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;* F$ ]' @6 {* o0 n" a8 i2 G7 b
2 [2 G) e Z+ E1 G' ?: v if(strDSName.IsEmpty()) return;! O: `! d D& p" o7 X
if(strDBPath.IsEmpty()) return;0 [2 I1 r1 _' j) U' K% x
# a6 l& b# @8 U. v$ C6 c. X
CString strDataSource = strBaseKey + _T("\\") + strDSName;
" E! }1 L7 y4 p, O S5 `5 B' P2 P- q/ D6 E' r
CString strMdb = _T("Microsoft Access Driver (*.mdb)");4 b$ b0 U# P/ N3 X) D; O
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
: h4 R0 P# p; h CString strFIL = _T("Ms Access;");
" D9 g1 k4 S) d) } n CString strUID = _T("");! W; t* f% z3 t' X o- R
( j) U. C% U+ o3 p
4 D7 {) a7 j* i& E6 s' z3 @
) J1 c0 n0 } v( X RegCreateKeyEx(HKEY_CURRENT_USER,
% }- m7 O5 i$ f6 F strMid,
. d9 X9 k3 V' Y% j1 ^' {8 \ M5 E/ Z 0, $ Y" X# V- W' y6 b& Z& G
NULL, # T2 ^. I* b4 x
REG_OPTION_NON_VOLATILE,
( L( u) f3 d4 }& G KEY_ALL_ACCESS,2 j* r, d* S# m; {
NULL,
9 q: g5 u8 |7 P& \ &hKey,
' o" c% f$ O% |6 I( M1 R3 p% T &nLabel );//获取数据源键值句柄5 I: y! m+ E, W2 _
t' |( N4 |- o$ E
RegSetValueEx(hKey,0 i5 N9 G @" L; L" q
strDSName,- F1 J2 c8 B A6 n! d6 `# c/ z
0,
V1 N- d8 e5 k+ [8 s3 T7 s% w REG_SZ,9 P) p1 w! ^* L
(const unsigned char *)((LPCTSTR)strMdb),
+ Z3 g9 g6 k! K/ V3 E/ [4 B strlen((LPCTSTR)strMdb)+1);///设置数据源类型
8 ~5 |* {% v" J# {8 u' g: |( g, Z4 N2 v
RegCreateKeyEx(HKEY_CURRENT_USER,, }2 U9 K4 k9 U$ z8 \" K% n
strDataSource,
. P& P% q8 q7 g" o+ ^$ L 0,
) z6 o* _/ ~' c NULL, 6 h6 v3 r$ _$ \+ Z6 S" G
REG_OPTION_NON_VOLATILE,
! y( j3 w# j) V0 V/ D KEY_ALL_ACCESS,$ \/ Q. ?' E$ P/ o+ m
NULL,
7 V4 n! w! l0 D% p J- S0 ` &hKey,
( _8 o1 r- g9 e9 V9 h" B &nLabel );//创建数据源子键& `, L k7 r2 L1 e7 z# }/ i
* A5 ?# V' F, z7 X8 d RegSetValueEx(hKey,& R4 n3 c& N3 F8 ^2 p( F5 [" O
_T("DBQ"),
' H! V; p3 R' Y( h1 r 0,
s# K4 _% v" f* _, u4 Z( W- b REG_SZ,
1 N1 |2 D5 g' |4 g (const unsigned char *)((LPCTSTR)strDBPath),1 F3 C \( h- q* u. {- L+ M
strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径4 B% s8 X, d5 i7 C6 I4 R
! l5 a% F) Z6 [6 n/ U RegSetValueEx(hKey,
1 c8 V2 ]7 ?+ ?) v' [* r, c _T("Driver"),
" _* Y5 W, G3 r( k* E5 [4 | 0,. f- E. x5 t1 y1 h' W, G6 C
REG_SZ," x6 K" R. s/ n' {: v
(const unsigned char *)((LPCTSTR)strDBDriver),
' i( l+ ]5 T4 y' z5 P' R" c strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径- \! G. f n! J9 A
: k8 \3 D O h
RegSetValueEx(hKey,4 y `3 p( l, ~% G* B/ x: y
_T("FIL"),
% }( n# V+ ?5 L% ]" n$ T, g 0,
: W, ~0 Q# t |8 t) p8 J9 x REG_SZ,
+ W& G" t: B# M8 z; W7 M (const unsigned char *)((LPCTSTR)strFIL),2 Y d$ m, Z+ I
strlen((LPCTSTR)strFIL)+1);//表的类型! h' O8 g" g5 o& m4 G1 U4 t$ [( g: k
6 N m* @' L; H$ ]) o
RegSetValueEx(hKey,
2 s9 m# E" s! L3 D$ s3 ^7 a2 Y) N _T("UID"),
4 A: T* o, x8 n4 E' _& D 0,
5 }2 V' |2 r+ l REG_SZ,
, |6 z& ~. ]. d( T (const unsigned char *)((LPCTSTR)strUID),
; Z" g3 H. A5 q strlen((LPCTSTR)strUID)+1);//必须项- g% N+ \8 N- f( @
$ I$ c c- H, e& L; n0 i# k3 @) i6 k+ g8 c0 _
DWORD DriverId = (DWORD)25;( s+ I" S# _$ M; p4 y! w1 u
RegSetValueEx(hKey,. n9 I/ L. p, v$ y! ]. E
_T("DriverId"), @0 S2 Q( G6 o- G0 s, l
0, V% x" m7 Y& m Y1 p9 c$ u
REG_DWORD,# t* \/ e% s. N# o5 y) E- } e F4 w
(const BYTE *)(&DriverId),
% [3 v' V0 M8 R. ^) ^* H [. T sizeof(DWORD));//必须项5 ?, t1 A1 ?2 Q& _; @3 j
9 a- g8 o- o2 `+ ] b
0 G; Q; M w* w8 W7 Y% h* M DWORD SafeTrans = (DWORD)0;' Z2 X7 s2 U' u" S- m
RegSetValueEx(hKey,2 _8 d* p" m- X! i& Q1 y- u) v
_T("SafeTransactions"),
2 ~& I1 X6 S( C* ? 0,
3 D- Z) ]9 r H0 G6 F REG_DWORD,1 d9 T. ? g5 X3 o+ V2 J
(const BYTE *)(&SafeTrans),$ u. t; g2 N# m! h3 Q; _% [
sizeof(DWORD));//可选项" j$ j# s# @( j, s+ |6 I( h' _
}
# g) k/ |* c: d$ H1 e! P& ]
) |0 L7 u. B/ n9 I+ ~' {; ^9 U / j- _ ~2 R9 J9 L8 b+ W
9 F7 E/ g' ~ T2 Z+ z3 F9 l; h调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|