找回密码
 注册
搜索
查看: 4552|回复: 0

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:5 j: A6 L7 _; X: B9 o
( i7 V. U3 l& z
void RegisterDBSource(CString strDSName, CString strDBPath)
( p2 F' M/ y7 D$ |3 F{& P; {* a+ e) d2 D, y
HKEY hKey;2 S$ _: r6 i6 m% a, O
   DWORD nLabel;
/ v6 _! X2 J2 o5 J0 b2 e2 Y7 l1 {, ~: `8 H# d. Q  j8 i5 c: w
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");# x- j- c( ?  y
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;3 j) H; g( p( o  M' m, Q# x

8 j* i5 l, w  }' T/ X2 t% v( r if(strDSName.IsEmpty()) return;
! S8 D' u* _  x if(strDBPath.IsEmpty()) return;
* W7 K/ O0 v  d) v  `# }
! z6 |; T3 c* H- A3 C. G& l# ? CString strDataSource = strBaseKey + _T("\\") + strDSName;
/ K; ]  P) a" r# e' ]8 p5 k% y: s
( Z  y4 y" t% R4 S. U0 \+ J! A CString strMdb = _T("Microsoft Access Driver (*.mdb)");
# u( \9 @, Y" G6 [# ^" J& [9 s CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
3 H" ^+ R. P7 `3 O- I) n CString strFIL = _T("Ms Access;");0 w0 t: b& d' i! n
CString strUID = _T("");9 ^8 o3 A, L8 ~, B3 U. O9 N
# Z( J' z+ b9 O

5 Y/ K" d# }( H4 c; H+ q- t& V+ `; F, a4 s; ^3 _" d
RegCreateKeyEx(HKEY_CURRENT_USER,( c+ C- D. N7 Q0 P$ S
             strMid,
5 H( \  V1 T% y! O" X% D        0,
3 _" U5 ]. ^! {0 x! F; P     NULL,
# l9 g8 y- l. b. P) f     REG_OPTION_NON_VOLATILE, 2 K6 P, O& }% J
    KEY_ALL_ACCESS,
9 `( ^" k8 D% Q     NULL,
8 l/ M$ p) M, t' P+ L     &hKey,
: P7 R+ \2 ~* `! @% t- D     &nLabel );//获取数据源键值句柄  R, y  J. W( c3 O2 b
* q/ Q$ k  b9 Z  z9 f' ]- T
RegSetValueEx(hKey,
- A/ c* W1 C- A  U      strDSName,
+ [& v9 z, D' [( Z! Y$ ?      0,$ Z+ p, q% b+ v  _7 N8 p
     REG_SZ,; ?( A, c. w& ~% g$ q: l1 X
     (const unsigned char *)((LPCTSTR)strMdb),; {; r4 h0 r6 i- n) G* s+ s
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型% G' {% M: P9 k. n: R# H

0 v1 x4 n( H) b* y- L+ Q RegCreateKeyEx(HKEY_CURRENT_USER,# l' a0 J6 i$ t& ]8 T3 c1 x7 V
         strDataSource,& u) ^! `7 f' t1 P' t
   0, ' w, P' }9 }3 P) K! H, r! \0 O
   NULL,
  q# x# Z) `1 V    REG_OPTION_NON_VOLATILE,
  ?4 g, J9 ^3 q7 M- @    KEY_ALL_ACCESS,
( L# ]! a: o6 H$ F: t! L; G6 O2 F6 N    NULL,; J) f# r% v& G! m6 ?4 z
   &hKey, ( J. P6 f$ r" {( G* h0 }
   &nLabel );//创建数据源子键
# C6 E1 N7 ]( @/ {  ]% J! b/ G* |& ~" b) L  [( P1 V8 y4 Y0 V
RegSetValueEx(hKey,
; |. u" [) R" e      _T("DBQ"),
7 j/ R/ V: h3 L9 K4 [2 Y1 D      0,
2 N( d; u6 |2 y7 f1 s5 r, `* M# I      REG_SZ,
6 q; ?: n: S: \6 m* f, Z6 c: w! I) _      (const unsigned char *)((LPCTSTR)strDBPath),
. a* |& @2 g2 A: {5 G      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
0 b! n& V4 l- E. K/ f% W' b) t0 F8 i3 M  h2 S9 u  U
  RegSetValueEx(hKey,7 V. O" B4 S9 r8 q7 @8 h3 M# i
           _T("Driver"),# x$ C# n0 U9 c8 N: B6 J3 N
     0,$ E9 r, |' C% j. e/ Z
     REG_SZ,
5 b' v, C3 W1 Y- D4 j& n      (const unsigned char *)((LPCTSTR)strDBDriver),
: H" q+ x* X" W      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径: s' x+ K6 \  H' }

0 g! V) y1 G2 [" B/ x RegSetValueEx(hKey,0 P% ]' z. {! [  H3 Z0 s
     _T("FIL"),1 B2 G5 m1 _/ n6 `
     0,5 ]$ j: j, U6 H1 a4 c- F: K
     REG_SZ,
8 L: ?! J& i4 Z: I9 L, }2 j$ k' D      (const unsigned char *)((LPCTSTR)strFIL),$ f" V* ?& s. M) q) C1 z2 z
     strlen((LPCTSTR)strFIL)+1);//表的类型, p. c' j5 F& j$ _5 i
( e2 f# n; {" i% r. s# g# Z1 F# H
RegSetValueEx(hKey,
3 r" }' r  H( i& X0 C% T      _T("UID"),& x1 y8 Z% o' m( D
     0,; y: O$ L* X6 b6 O* o! j
     REG_SZ,% G3 d$ L, i( F% h1 ^3 k
     (const unsigned char *)((LPCTSTR)strUID),! m0 q7 }8 R! u) a6 j3 J6 t( Q
     strlen((LPCTSTR)strUID)+1);//必须项
$ _0 B: J& \( Z! m) q2 S' E! d6 t. ^# ^8 c/ j; p& @- o

0 U) v- w/ r0 `9 t' H/ E DWORD DriverId = (DWORD)25;8 R4 _+ u) A- {# S) z
RegSetValueEx(hKey,2 c- u/ v0 W% R) I- @5 N
    _T("DriverId"),
% `- v4 K+ q2 e7 W     0,
8 @; [, k7 q! H5 d, u     REG_DWORD," `( T+ z$ }7 B% E# ^: C; j
    (const BYTE *)(&DriverId)," Q6 w# ]+ u3 C: g0 h. z
    sizeof(DWORD));//必须项3 C, Q% r2 ~; o' v2 C& J" C0 M

  D; ^- x' Y7 J' \' P8 R
  |; k$ o9 y9 ~* v# w( ` DWORD SafeTrans = (DWORD)0;  P  [5 I" [- R5 e0 N
RegSetValueEx(hKey,
9 g7 x! p2 f: Q9 j8 M2 r      _T("SafeTransactions"),
* p+ Z$ X9 w( J9 `1 c4 o$ i( Q      0,
1 v! E" j0 c9 k; E      REG_DWORD,
+ W' T7 k9 y- D4 z% F      (const BYTE *)(&SafeTrans),
) K, F& O. J) E' o; y      sizeof(DWORD));//可选项
- n' H4 z& g9 D2 F1 }9 K}/ H( z- C' y! E5 {

5 A1 ?: w9 G% V 5 s# C( D! _8 z: t
3 i  o) v8 e" }- h/ Z/ f5 E. k
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 10:16 , Processed in 0.016422 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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