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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
) a2 h3 x/ {; d) u/ N+ p% b6 B& x, J
( Z6 V( Q4 f& Q- u3 O6 G3 B* f0 Svoid RegisterDBSource(CString strDSName, CString strDBPath)9 W2 V& O9 ?& i" y& M) i! d& }2 c
{' s0 ?0 i4 `4 F" `; t& u
HKEY hKey;
; ~* q5 [! J' |+ T- e    DWORD nLabel; : e" C. D# B% v- q2 u2 Q

8 b$ ^* ^9 B; E CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
" f) g3 S% C+ y( a7 A8 }5 v/ E. J: u) Y CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;* t' i. Q: g2 M* t
' w4 k; n7 X5 i. D: x
if(strDSName.IsEmpty()) return;: K% Z7 O3 l+ g! Q% h7 A8 ]' p
if(strDBPath.IsEmpty()) return;3 Y. \9 }; {* s- G6 k
$ k7 z6 ?0 g* N# }$ v8 K% \2 Z
CString strDataSource = strBaseKey + _T("\\") + strDSName;# S7 R7 M+ {! d9 o4 T  q/ z
- [8 W0 X3 a, J, k
CString strMdb = _T("Microsoft Access Driver (*.mdb)");
; E$ Z0 _1 V# a, _/ _ CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");2 G% r( C6 c$ U
CString strFIL = _T("Ms Access;");
1 m( @2 ?  L5 i4 V# o7 t2 V% l& K CString strUID = _T("");
: d. t# v5 y) v- e/ t9 z: i' K) z- v# h1 e3 E" F3 o' J/ T

+ `. |; w7 \6 d3 a7 m/ P% k6 U1 R
% J5 d. I! n. |$ r6 j+ V7 j RegCreateKeyEx(HKEY_CURRENT_USER,
/ I& l- W3 O8 n  I+ V7 v1 k              strMid,
) I6 w/ I$ }$ i& {  ^        0,
. U* f, n) T/ u  Z& U2 J9 R     NULL,
; x# l( c; q' Q- J* k: s) ~     REG_OPTION_NON_VOLATILE, 7 A4 l1 X' ]0 o! ]0 Y
    KEY_ALL_ACCESS,8 z* I' r" I  B% w8 s1 D: v! B
    NULL,
5 B% @: n/ h& i     &hKey,
( O0 p+ x1 E5 r/ u0 r4 M0 ]' b7 \     &nLabel );//获取数据源键值句柄  `( z: p: q7 _! j. j$ l! b0 U" ?# x+ i
- D$ k. L# l# M6 T& f7 E
RegSetValueEx(hKey,
6 |( }' Z! @1 F$ m      strDSName,
6 Y) A: _. @$ `3 {      0,
, B! u5 o) ]+ u7 W      REG_SZ,7 g6 K; ~; I* G0 U0 m
     (const unsigned char *)((LPCTSTR)strMdb),
- K( G/ a9 o* Q6 s      strlen((LPCTSTR)strMdb)+1);///设置数据源类型' \1 G3 }. Z# |1 }, @$ s2 d+ b. k4 b
% ]* x% ?2 R" Q/ H4 [& a4 r
RegCreateKeyEx(HKEY_CURRENT_USER,
, I7 e5 ^  \% ]9 x1 P          strDataSource,
+ P+ ~* I" g, O1 W- r1 N    0,
* U- T0 I: r* h- Y/ ?$ Z) W8 k    NULL,
7 ^- K1 z% k$ L/ M( I4 p2 Z2 C) X3 f    REG_OPTION_NON_VOLATILE,
3 X4 S' P# f1 G    KEY_ALL_ACCESS,
8 [! t6 C' Z9 S: r3 i    NULL,$ Z$ j- x+ R, q, e# ?
   &hKey, ) `0 v, M- R" k4 M4 P4 b5 v
   &nLabel );//创建数据源子键1 X4 ^( d" _1 O5 D) H( ~
" D4 m0 ~6 ?$ p4 c
RegSetValueEx(hKey,
+ v5 F; m/ w5 i      _T("DBQ"),# G7 o! Y& H5 ?3 s' k' L
     0,, V7 [+ ^; @3 Y5 J7 }% J/ L
     REG_SZ,
2 T: W# u3 m9 ~: W2 V      (const unsigned char *)((LPCTSTR)strDBPath),
/ V7 T8 l8 o* A0 C" Z      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
% B9 L& y( s1 Z, F3 w6 W' H# Z# C- ~% Q2 R3 u( h. K) J9 `
  RegSetValueEx(hKey,( z9 T2 @: A( M2 s3 w
           _T("Driver"),
2 L3 N7 K. T0 M6 }" R8 O      0,( I& N/ m. u4 |( Y% Y. L# P
     REG_SZ,
' m2 g; p! l  ]; [0 `, b      (const unsigned char *)((LPCTSTR)strDBDriver),( a; W- o. Y0 u8 c: t; [  |$ o
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径4 V) |' S: `. @$ Y, A4 Q5 D3 D

, `  o) ^. F$ M RegSetValueEx(hKey,& ^& z5 ^" k9 G
     _T("FIL"),
, N( ~' \# C/ G) n6 Y, O      0,
* t8 p8 r/ ^0 z- H% Y      REG_SZ,
  E- g/ ^0 D6 m7 k& i0 l3 s0 W; l      (const unsigned char *)((LPCTSTR)strFIL),/ N7 Q  L( v5 V" @: \+ R& j
     strlen((LPCTSTR)strFIL)+1);//表的类型  e" C2 r5 T: E9 b* n# k/ M

. h' e2 Y% u9 [3 S RegSetValueEx(hKey,) X! E; v  b8 b6 Q. E; \
     _T("UID"),; N. m  u- K, T6 L1 b9 B- A  r; H
     0,
( g0 U' [/ o' }      REG_SZ,9 y! {3 F1 i3 g: P0 M; `
     (const unsigned char *)((LPCTSTR)strUID),
! y, f5 B# W- G, y, Q$ M; P& N      strlen((LPCTSTR)strUID)+1);//必须项9 K5 J$ {9 e) p1 t" C
8 B2 w6 M! \8 ]5 f: H" G3 E. `5 `
; w6 L+ x2 L3 L2 J1 M
DWORD DriverId = (DWORD)25;  S2 a2 c2 M( d/ J
RegSetValueEx(hKey,. [+ {, ?: k6 q0 j" z1 C
    _T("DriverId"),
9 a; ^1 X# h# B: S1 d$ V     0,
( y# n8 l! p: X. H     REG_DWORD,+ @8 n  C+ i* v/ C6 ?
    (const BYTE *)(&DriverId),
. w0 Y' Q6 M1 Q/ k7 W     sizeof(DWORD));//必须项2 h: W" c2 {; |. `" l( d

1 f" f* O. a' D; R; c# Z! u, u7 T& t4 ^8 V6 B1 }
DWORD SafeTrans = (DWORD)0;6 ^3 F* t2 {: i- A/ L
RegSetValueEx(hKey,. r& ?$ r' ]0 T" |
     _T("SafeTransactions"),
6 X  x8 I' X  R2 ?" K      0,6 x$ `) d. Y+ x/ t
     REG_DWORD,
( h* \" F* F2 N' y3 Q/ T! i      (const BYTE *)(&SafeTrans),
3 \) o0 ?, ^0 K  P5 {$ [) ~; D      sizeof(DWORD));//可选项. w' [* c/ T5 p* ~% a$ D
}; V* f4 {, g( Z4 E" Q4 u* I  Q1 V

7 C* w/ A2 S- C6 ~$ T( d ( ]: X+ D# A! u
3 w6 I* p: p! ]. w9 Y' F
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-13 11:52 , Processed in 0.020708 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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