找回密码
 注册
查看: 4994|回复: 0

[收藏]通过写入注册表添加ODBC数据源

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
# J. b( o: F/ p: M  n  G
8 z7 i! y0 }$ H/ d/ f' x: Pvoid RegisterDBSource(CString strDSName, CString strDBPath)0 T1 l3 o* x' ]2 g. c
{7 _! F$ n; e' a. g3 B/ r" q
HKEY hKey;8 E. |5 L% J5 D# F
   DWORD nLabel;
$ J! ^0 C: R( q6 o
& C6 n. Z* i' c; c7 G CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
4 S5 g3 y- o" Q: ^: y& m/ d+ K! I  S CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;5 E& o8 Q0 a1 J; q4 `# o( q( V4 l

* ?  j- B+ B# ~( i' L if(strDSName.IsEmpty()) return;$ c# m2 q& W6 d5 x+ e9 U
if(strDBPath.IsEmpty()) return;
2 `3 o4 G+ `/ Y9 O5 t( f' R1 X7 X9 ^1 g0 C5 C6 C
CString strDataSource = strBaseKey + _T("\\") + strDSName;
0 n8 V  u/ y3 B( [4 b4 D! v
4 h) `. A3 r" O& H# R0 | CString strMdb = _T("Microsoft Access Driver (*.mdb)");1 ]0 c& o  Y% }) \/ g' _
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
: Q- J2 ~9 v" P! N; N) h CString strFIL = _T("Ms Access;");/ K0 p/ s& C# h6 m! Q4 t& `
CString strUID = _T("");6 v1 G8 P. N, o* [* i; c3 t+ g
/ @% E! [2 \, K- l

1 B4 M, k( |$ ~, D% Q+ x& [
7 e3 H* X; y! ~( k) ^* U" A( c RegCreateKeyEx(HKEY_CURRENT_USER,
( T( X+ G' O7 O9 g) O4 V3 _0 E              strMid,4 [1 P; f- ?6 o( i8 N" Q
       0,
# q4 r8 ^0 v& u     NULL, 2 o6 L) k3 {; R/ s, k
    REG_OPTION_NON_VOLATILE, % z/ d& a" R) M, l& O) d2 o
    KEY_ALL_ACCESS,
( F* J. E4 k  p% a- l     NULL,+ d  [' Y( a. {8 \  E0 c2 B6 t* ?
    &hKey, 4 r& A5 N: D6 G) n+ _, z7 h
    &nLabel );//获取数据源键值句柄9 h6 {. q- C% m' j- d; _

" ~/ ^- |- ]' L% r RegSetValueEx(hKey,$ H) ?5 {( y0 ^2 Q: Q
     strDSName,; O2 U" b9 J) v, Z7 a7 m
     0,
0 v' u  K" L) ^. y) d1 @+ o      REG_SZ,
: P/ ?, h7 @$ w) Z      (const unsigned char *)((LPCTSTR)strMdb),
4 Z1 l/ n; y4 u      strlen((LPCTSTR)strMdb)+1);///设置数据源类型7 i/ A8 V2 J# X+ R% W

+ r- k3 D% a$ f3 l! @" p RegCreateKeyEx(HKEY_CURRENT_USER,. O# M6 C) |; ?& O% P# L
         strDataSource,
' x& M7 _3 \% Q& s- n0 \' ]    0,
% M: _# p1 V7 ]1 f3 E8 }" o    NULL, ; n' }& S* e  N' B( ~
   REG_OPTION_NON_VOLATILE,
% g) U5 O$ @- F3 Y    KEY_ALL_ACCESS,
- W/ `$ ]2 K7 h    NULL,
) {' D' S* M0 U: q8 k8 I    &hKey, 1 W3 W0 [" [- V
   &nLabel );//创建数据源子键& o. S. I$ d4 H0 I

9 X; c$ P$ r3 G4 ]( O RegSetValueEx(hKey,
) w! v& t. \" F" x' P2 x      _T("DBQ"),
3 @0 g( T) Y2 j6 {' v; ?$ n( Y      0,9 ]" q) u6 Y( J: q$ H0 f/ R& I
     REG_SZ,: h9 R. {7 I. {' q$ N
     (const unsigned char *)((LPCTSTR)strDBPath),, \* s9 v( x9 R/ ~/ M' X) W4 `) w
     strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径5 j& v) p, ]- r) v2 v4 n! |" l

' `7 p; _  q  {3 {  RegSetValueEx(hKey,4 I7 Y8 }% Z3 j& h
           _T("Driver"),: A) J6 _0 F6 h* u) H2 H) J4 ?) ?6 n
     0,9 U: `5 r; D0 f! C/ U( Y
     REG_SZ,
7 H* c- p4 k2 x- h& R' j( a/ m& a      (const unsigned char *)((LPCTSTR)strDBDriver),* }" K" `8 b6 E
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径, Z2 x' n5 `- v( ~$ d( Z

$ x- {5 c- E3 r' K2 r; {  V RegSetValueEx(hKey," m' X% P/ I% G0 O
     _T("FIL"),
2 H& t, l6 e1 r, f, V& R- N8 ]      0,0 ?  J% c* ?8 n8 B
     REG_SZ,2 B( Z- l/ C9 `& l& `# ~1 t. @
     (const unsigned char *)((LPCTSTR)strFIL),
: r% S. U; _* P5 h$ L1 q# y      strlen((LPCTSTR)strFIL)+1);//表的类型- k4 |, @8 C' k: Q3 n: L9 `9 Q

5 ~% i( c" T( R5 y9 n/ @8 D& [ RegSetValueEx(hKey,
" W# Q" n: t6 T. j; C. e+ [8 i      _T("UID"),- _* e: n. f$ A/ }" h& n+ E
     0,0 T6 o! p. v+ O8 A/ c
     REG_SZ,
) s& S8 a- D3 r4 @4 p3 P  G. V      (const unsigned char *)((LPCTSTR)strUID),- k# Y4 d0 ^* m$ N( g  Y
     strlen((LPCTSTR)strUID)+1);//必须项6 B, D8 ^. k" P3 Z, `
6 i+ K+ Y2 W. _- K  R/ w- ^
! b0 U9 x. u0 ?1 \5 O- C
DWORD DriverId = (DWORD)25;
; ]/ G' Y" s8 L9 D, ?, L RegSetValueEx(hKey,
2 ?3 ~. ^# _6 L' h( m0 I4 P* h     _T("DriverId"),
( }/ ^, u: ~) h4 x5 U     0,% W" Q0 \" x; \/ V- `) D1 }
    REG_DWORD,( ~9 C+ p4 _( T5 J4 y8 s4 V
    (const BYTE *)(&DriverId),
$ Y$ [7 g) w+ c8 A6 S     sizeof(DWORD));//必须项$ v8 z3 v) i/ b, {7 N3 U% [5 {
& \6 O/ @% v  n: m9 y3 N8 I$ N- m
7 T6 I1 |0 V% w- r6 q, G
DWORD SafeTrans = (DWORD)0;
1 M9 p2 m5 ]% p& y" j RegSetValueEx(hKey,
* \7 i% I% v7 }, ?9 j  J" A' E5 n      _T("SafeTransactions"),
& N; \: ^+ C5 O, a& c      0,0 ]4 A. E# m* y& f$ |% w
     REG_DWORD,4 p  L" J+ d' U( w
     (const BYTE *)(&SafeTrans),7 E1 X* Z; ^3 I% C& Q* v. E6 B
     sizeof(DWORD));//可选项
3 T/ m) j& h" H# e4 x, i% P}0 I* Y8 W: a, l2 b, [
4 A( D4 ~: ^3 r, k/ n

2 ~7 V5 {% v( U/ S6 J: B7 f1 V
3 E8 j+ ]& X3 p  P5 S调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-10-1 23:09 , Processed in 0.016615 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表