|
主要代码如下:
7 z( r. |/ `0 `8 i* j, o) V: D0 m. r9 z8 ]3 K; e0 x
void RegisterDBSource(CString strDSName, CString strDBPath)
5 y. L/ {+ u- A5 H8 f7 u{
1 e* q* k: E6 U6 C, A( h! s& l4 B HKEY hKey;/ ^+ B+ m6 z6 x
DWORD nLabel;
9 I( N! y/ R P5 q. G5 U, f# @
8 V/ @/ q7 o7 x; z" h CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
* |9 y9 \" z8 Q, x/ o CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;( E6 t& t% `! m( U5 u7 A
# f: O9 q+ }/ r7 f5 G$ A: Y
if(strDSName.IsEmpty()) return;2 X" ]( l8 S4 Y* p3 d
if(strDBPath.IsEmpty()) return;
/ y3 x0 p7 S: J2 ~9 {' l$ k. U5 W' a
CString strDataSource = strBaseKey + _T("\\") + strDSName;& D7 T, v1 J. u* e% `
. R' k2 r3 y# t4 Y
CString strMdb = _T("Microsoft Access Driver (*.mdb)");
) ^( \# ?- M$ Y. h; l `* k CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
7 r5 f2 m' r& B5 P( n& `, ` CString strFIL = _T("Ms Access;");
5 g& h; `4 w- l CString strUID = _T("");
+ e% f! D; A( y8 M7 a- U b8 c) \# Y* Q$ [6 ]# ~
8 M3 g, g6 O$ h& I
' O) w8 a( y' X9 }: k; L5 ?; K+ r
RegCreateKeyEx(HKEY_CURRENT_USER,
' g! T( J2 I+ W; c: D& ~* u% \ strMid,/ p w$ N- G) ]: b" G
0,
! ?) x# k) Y" n* s$ C# ? NULL,
* ^. U- d9 K" e! F2 ]! g REG_OPTION_NON_VOLATILE,
. I* p/ v! G9 F x KEY_ALL_ACCESS,
+ Y' T4 O6 ~# l% m0 l NULL,
% c0 ^5 L! @" a3 o1 g8 w &hKey, 0 b1 v! r, M: @. h
&nLabel );//获取数据源键值句柄0 d% `$ E2 V! |" R7 t$ X. E
9 Y0 \6 Y0 D7 i- v& L% v( m% k
RegSetValueEx(hKey,- s! ^+ v" u+ j. J0 O1 m
strDSName,+ w# ^0 @* H' {6 v
0,
; r( z; |, S; i$ X" q REG_SZ,
! x4 x& X! P, B7 r (const unsigned char *)((LPCTSTR)strMdb),5 c! u/ r4 {' s5 `% U9 n, \
strlen((LPCTSTR)strMdb)+1);///设置数据源类型
, S f P& J$ Z5 ?* L. j" z- m
RegCreateKeyEx(HKEY_CURRENT_USER,% Q1 }9 @& T2 c3 k! P- g
strDataSource,
0 ]- Y' E6 U- o! ^" W8 C& o 0, 5 |# u2 l; j4 [8 D. q- l
NULL,
; \+ E4 `/ O1 }. a, H REG_OPTION_NON_VOLATILE, 2 t& N3 L6 P3 p! N
KEY_ALL_ACCESS,# |: _) c) f! ^6 F7 l2 E# L+ @
NULL,2 O- C" C5 s( t1 N7 t9 r& X
&hKey,
( z: M3 w3 P+ y. V2 G5 E- Y7 k( I &nLabel );//创建数据源子键
2 Y D0 ~- K* l! F5 v$ n
( Q$ \2 O% b% S! r8 }( a RegSetValueEx(hKey,, s& C) }9 G/ u$ [( `/ z) e7 U
_T("DBQ"),
7 L; U3 B' {, `6 q 0,
@ V5 ?( F; I' p9 N REG_SZ,
8 i- K' _* u" \5 h+ j1 z5 } (const unsigned char *)((LPCTSTR)strDBPath),
2 Y4 |" s, \5 H, K5 n' \7 l! W; y1 _ strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径 l; W; j' j6 Y! I# q Q
* `+ F. H5 s( H9 h5 q/ D& \ RegSetValueEx(hKey,9 c# p5 w! m, N2 b' v& G
_T("Driver"),, a) [: i1 a4 C& e1 i# F
0,
& z; Z5 t" Q ^3 I8 h REG_SZ,
" h8 v/ R( R( s (const unsigned char *)((LPCTSTR)strDBDriver),) z3 y( O4 ^$ W$ n& M
strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
6 m2 F h3 i% Z( Q- C& F# U6 J6 k$ r3 Z+ m" z- S! G7 @* U1 V
RegSetValueEx(hKey,
! P0 v- e8 K* g- G y; p% Q _T("FIL"),
' X B" v- X- z3 | 0,
7 i! ?7 {! [/ b REG_SZ,
7 s+ m. _! t5 g( @/ l/ g" a (const unsigned char *)((LPCTSTR)strFIL),
" D8 q- @; H4 X Y+ M% k strlen((LPCTSTR)strFIL)+1);//表的类型
|' N5 T3 [, L8 ]: g# E% C, t! W( C# M5 u, b) h. l
RegSetValueEx(hKey,& b' L+ m% J$ T& j6 U+ X
_T("UID"),
" l5 I, K }# `* Y& U: @ 0,
. I$ m% W. X7 C1 l5 |2 @' s2 R! Q REG_SZ,9 O( I5 v- K3 Y; k8 t9 L ^
(const unsigned char *)((LPCTSTR)strUID),' c: M& K6 q' g; B
strlen((LPCTSTR)strUID)+1);//必须项
$ A% [) p: b* T9 G' \0 y
1 \" b f, d+ s2 V; }2 O6 W$ A
: d+ _8 x9 \& `1 e% W9 f DWORD DriverId = (DWORD)25;( E3 E5 P: g$ v! z; Q* T4 L6 h
RegSetValueEx(hKey,
8 [0 K& Z7 g1 V7 [ _T("DriverId"),! y6 [4 p0 H1 I8 L# p1 R
0,+ W6 S3 ]! r) l
REG_DWORD,: O7 [. |3 I. X$ {& M; P
(const BYTE *)(&DriverId),9 O2 A E# B* o" f2 m
sizeof(DWORD));//必须项
" ~- _1 I3 c% _' _: r( l
1 \+ C, Y' A+ }) R5 G2 K! e: a; y" g( _& I; O# b3 K2 C
DWORD SafeTrans = (DWORD)0;
. a% Q2 ]9 d* c f" N" o RegSetValueEx(hKey,! K' j4 W! P8 T+ U8 W# Y
_T("SafeTransactions"),! T, ^7 T w5 }+ h
0,, B$ v4 h9 M) m" U6 a
REG_DWORD,! h! G; D: f6 l6 N. T; m1 W
(const BYTE *)(&SafeTrans),
$ r @2 a0 ^& W7 @ sizeof(DWORD));//可选项8 a; b# r9 U, v! o. P
}$ }1 W4 e! E3 f: D# c
& E1 K1 ^8 h) d3 W) k7 E( }
& i. q! R: l& l9 o- H
m4 s2 Y; R+ W
调试环境:WINDOWS2000 + VC6.0 + VSP5.0 |
|