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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:9 d# m. i( [" f2 I  F: H  [
0 u  Y) a) f& X  f1 j1 N2 T: G! V$ h
void RegisterDBSource(CString strDSName, CString strDBPath)& P5 I9 ~# |3 v2 n3 j: i
{$ P/ w+ q: ]8 ^. I; i; E
HKEY hKey;9 D4 e& w' M& W2 ^4 Q
   DWORD nLabel; ! \+ X/ A- p' ?8 @

9 a6 f2 H- y& w' E  B& Y CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
( S; R% P  ?- M' G( S; ]9 v2 ^) `2 d CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;+ g2 D$ B9 I- \! m/ m

" h$ L3 i" Z( `. u4 q/ I2 |  ? if(strDSName.IsEmpty()) return;
! x3 g% F  t6 u7 y" l6 E if(strDBPath.IsEmpty()) return;: [, f7 }; {6 q9 x3 J( W9 f% F3 S

0 P1 B* l) G+ @" \2 A8 [; K7 } CString strDataSource = strBaseKey + _T("\\") + strDSName;
% u% {  @0 f( z/ ^! e) J4 x+ d) N% ~0 A; l; X4 g
CString strMdb = _T("Microsoft Access Driver (*.mdb)");. x$ @7 _  `. ~5 H% V  q5 i9 W" _
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");8 t% i0 t9 i  e4 V2 I! S) }
CString strFIL = _T("Ms Access;");
9 C' p. U3 v" z3 X CString strUID = _T("");! w' ?/ A3 G: b

8 ?5 N& p6 {0 [; k % d* F4 \$ U* m8 k# m: u6 ^

- X. R/ o4 p4 y RegCreateKeyEx(HKEY_CURRENT_USER,1 m1 L# d0 H) V4 _2 r
             strMid,
5 s" K. w5 I# c& O        0,
5 l* G$ v* U7 B% `6 @     NULL,
) v  d& x7 j% _     REG_OPTION_NON_VOLATILE, # P/ l  _8 k5 V& ^+ A- i% |. z7 E
    KEY_ALL_ACCESS,: r4 q" t5 L2 j9 C
    NULL,# K* Q9 L: f: [# Z9 a- ]+ S
    &hKey, - p; ]2 N" A2 T" u0 ], d
    &nLabel );//获取数据源键值句柄( }- w% {8 |, x# \4 {+ X
' }2 k5 V' V3 Z: {: G; G3 f# X
RegSetValueEx(hKey,3 i- X& p2 x* `4 |& {8 T! X
     strDSName,
  \# b) N; H% O- T8 W      0,3 [) _  K. X+ d! j9 k. c6 X9 D
     REG_SZ,
* f3 n# e1 X8 l; \1 z3 h      (const unsigned char *)((LPCTSTR)strMdb),
4 \5 d4 B/ ~# g) N      strlen((LPCTSTR)strMdb)+1);///设置数据源类型" Z! O, c+ }/ n$ m1 J# o. \
* I6 r. t7 v: D8 p  E! _" u
RegCreateKeyEx(HKEY_CURRENT_USER,: |1 W, t- W, f3 `$ v) i. g/ J
         strDataSource,# i2 S6 P2 f7 r! k
   0, + ]1 T, S7 z, x4 j
   NULL, + g9 U3 r8 R$ t; S' q: ?( G
   REG_OPTION_NON_VOLATILE, 1 E- c& K$ Z) M# b
   KEY_ALL_ACCESS,
/ `" O- r% B% K- o    NULL,7 k2 W5 L+ E' o. t: Z/ T+ J
   &hKey,
- L/ F* o$ k/ [) {( D    &nLabel );//创建数据源子键
9 k/ p) x; m% Y2 r7 g7 D; x: c* _8 E# M
RegSetValueEx(hKey,: }& r+ ?: ~1 L: x9 [  J
     _T("DBQ"),
! I4 a0 R* A/ t, s      0,
9 T4 ]5 o4 _1 _4 R* O9 r      REG_SZ,8 O) i: l' Y( w3 a
     (const unsigned char *)((LPCTSTR)strDBPath),3 B( Z6 C# k4 z
     strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
& I" C. y: R9 |7 P: r  f7 Z3 a: B) w7 ~! }+ [! _) X
  RegSetValueEx(hKey,; ^9 g$ x4 u6 R$ E5 O% J9 G$ }: t
           _T("Driver"),
1 P- T( D) T+ j: S: v      0,* x5 _  B, \; e; Y
     REG_SZ,2 a8 _8 M. a! j! S! p# O
     (const unsigned char *)((LPCTSTR)strDBDriver),
5 C$ D$ i- P" f      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径& H, g; H/ m0 \8 V7 K* M) T1 |$ D1 z
; L: p1 }/ H# t7 d( X) ]9 T- t
RegSetValueEx(hKey,2 ?  f, E* k$ ]
     _T("FIL"),: E& k8 H- w  N- a
     0,
) a2 K/ W% J8 [( m- e2 ?% |      REG_SZ,% M$ N% T- p. M" [& w+ A( `
     (const unsigned char *)((LPCTSTR)strFIL),+ j# i9 `5 l3 S8 {' }# v
     strlen((LPCTSTR)strFIL)+1);//表的类型
* J0 A8 u- a( d$ M, [+ ~( M! k8 A4 H% a$ N7 |
RegSetValueEx(hKey,
3 k7 U9 o/ v2 m( B5 y8 ?; f8 |; ~' p/ O      _T("UID"),
5 ?) k# O0 u% N( F, M2 E      0,, j4 {7 e5 q' g+ k! {- }
     REG_SZ,1 B% m+ z5 ^+ ?, q1 k
     (const unsigned char *)((LPCTSTR)strUID),
9 \% Z5 r( \6 D7 H      strlen((LPCTSTR)strUID)+1);//必须项6 \& e# q% ?& D0 `$ d
3 M5 k+ O3 M2 S

' Z  _( w: L6 S8 U DWORD DriverId = (DWORD)25;& F8 p! K( ~" `" P' z8 b! U
RegSetValueEx(hKey,* l5 u1 Y8 c, y5 u2 B, q/ w
    _T("DriverId"),# m% i+ \. u; ^5 q$ o& K
    0,
* k! s5 d, e+ K% i" ?, h2 {% r     REG_DWORD,
6 E) C2 }$ O7 j" [) q6 R' a     (const BYTE *)(&DriverId),
2 @6 u; x+ }7 J; j) r& }- m0 H     sizeof(DWORD));//必须项; D( N/ i% A) ?) M' u' b

4 Q4 V% C( I& v& U8 c2 \' `! U# K% l5 t! t4 H  D
DWORD SafeTrans = (DWORD)0;+ H. Y5 B" @" ?4 K; K5 z
RegSetValueEx(hKey,
/ ]3 V' `( B! _! d      _T("SafeTransactions"),4 C; G' P3 |9 v0 r
     0,- q7 n8 C# e, r# E
     REG_DWORD,% v+ U: @# g. e$ _$ I# n3 t" v% {
     (const BYTE *)(&SafeTrans),
1 S) n* x: B# r6 E! e/ z$ S      sizeof(DWORD));//可选项
: A4 j7 o7 D7 O0 R" |* E& s5 C* v: D}
+ S2 N. c* B: V) N# s
% u$ l( A8 z" [5 `5 c  z  P
, Z$ \, ~! ~& b* O; S0 k. A+ V7 h' _
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 06:53 , Processed in 0.016298 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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