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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
3 [" J8 h( ^1 F  q3 g- D
( Z, K; r. u' i0 ~: C) yvoid RegisterDBSource(CString strDSName, CString strDBPath)
% X% C, \7 I* j$ R; L  I6 c{
3 _: y/ T  T6 B/ {* u HKEY hKey;* v( L, G! K4 H% n: x- ]! \7 r& \3 h
   DWORD nLabel;
0 G7 C9 r$ B1 a( E; G+ L! s1 U
) |) S5 A# i% Z CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");6 [5 M2 Z  ?! n) R; V
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
4 R7 K& p7 O& F0 D" x0 T& J' m" L, P3 X9 o$ q$ f
if(strDSName.IsEmpty()) return;
2 m0 J0 p0 U; i. m; w4 {7 k5 Q if(strDBPath.IsEmpty()) return;
+ v4 D' A$ \0 g1 S* {) m9 I' L6 L" s
CString strDataSource = strBaseKey + _T("\\") + strDSName;
2 C* u+ K2 e5 z6 z) _
! v9 F) R: D- T4 f& D0 i5 R) d CString strMdb = _T("Microsoft Access Driver (*.mdb)");
* D9 W/ F% _7 b CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");' q& d/ o. |. i% v" a9 M
CString strFIL = _T("Ms Access;");
6 \1 Q) x. s' @6 Z1 | CString strUID = _T("");
, V" W$ o& g/ \4 I$ S9 F3 X  p: t0 _" c2 V

8 M' s/ n2 E+ A- W2 }% {  b' d" a* J# `! {7 I
RegCreateKeyEx(HKEY_CURRENT_USER,
1 N+ S; b& _% N+ p4 y4 `: x: D              strMid,- g5 f* Z3 h! j+ ?5 F
       0, 6 l- k4 j* g9 J; D5 T
    NULL,
5 c1 Y. }* b1 v. H& O. ~     REG_OPTION_NON_VOLATILE,
6 p0 J& ?* w4 d6 F6 `, D     KEY_ALL_ACCESS,1 @4 \2 k6 W7 Y
    NULL,
. T8 I$ t, Y' W+ m3 \     &hKey, , T5 a7 ^8 _7 ~& {: K% a$ h' \
    &nLabel );//获取数据源键值句柄
: N) D4 f8 Q- ~" N6 p5 f! r& P1 a! V9 r1 B, l9 N7 D
RegSetValueEx(hKey,
4 R" _& m% Q' M5 u7 m: j      strDSName,
- E9 }' \) P' s8 c      0," k* c3 q. I' [5 s8 S# P( U, o
     REG_SZ,
- @+ D2 y9 o/ J% y: |2 L. r      (const unsigned char *)((LPCTSTR)strMdb),6 h' ^9 `' Z  m4 G+ v
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型: m2 g5 o1 E6 R
0 n% V! E, g, t/ V1 o- d* M/ M
RegCreateKeyEx(HKEY_CURRENT_USER,. y, l" g/ @5 F! ?* p6 O6 J$ v
         strDataSource,
3 o2 u1 N. {, r! B1 H    0,
" v/ J9 j- c/ U) a2 F& V    NULL, 1 z: l2 w2 _- ~* E5 }
   REG_OPTION_NON_VOLATILE,
- a) i8 w& Y; O' M& H  d/ W    KEY_ALL_ACCESS,
# }6 `7 Q6 }2 T, C    NULL,3 l5 Y3 `" c) l, o4 T
   &hKey, 9 r* s1 ^" g) L; ~/ @2 j
   &nLabel );//创建数据源子键
" D/ Y  {9 H  \/ @. c% L# [* n  S9 x) \3 z2 F5 l2 M6 w  M1 j  f
RegSetValueEx(hKey,+ n; L$ q6 o4 y5 {/ v: r
     _T("DBQ"),0 `2 r7 H. t, N5 L! M( I
     0,! E; N4 z8 g- Q2 ~+ F/ _" A
     REG_SZ,, }! a7 Z  `; r) @# S
     (const unsigned char *)((LPCTSTR)strDBPath),
% O; r3 o, O3 Z; e+ S$ R3 ]      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径5 `/ }/ @7 b0 J# r1 ~$ q& a  Y/ l

) ^' c  `& o4 E# D- k4 q& O9 ]  RegSetValueEx(hKey,. G6 q% h6 v! [9 ~/ p
           _T("Driver"),
0 m/ Y! G; `' l. v. a: @      0,$ f5 f  A1 @' J8 C- [
     REG_SZ,
/ T, {3 B1 e9 l4 H      (const unsigned char *)((LPCTSTR)strDBDriver),5 @$ N/ E" l0 ]; ?9 z/ x7 z
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径) U: s! K) }/ Y) a6 N
9 T" I6 e5 ]9 |$ y. V) K4 _3 j8 I
RegSetValueEx(hKey,/ t- \0 _: C: l
     _T("FIL"),5 p- R( G% M. w$ c# A
     0,
: c+ K- p5 Q) s3 e1 j2 d: a      REG_SZ,  g/ w5 s$ J1 C  e; E# _4 `6 Q7 a
     (const unsigned char *)((LPCTSTR)strFIL),
4 Z$ x5 E) g, \  d2 e3 g- b; k8 p      strlen((LPCTSTR)strFIL)+1);//表的类型
9 b# z: Z4 e' X9 d( Z3 [1 R( ~9 a: Y9 I) w# Q; J0 h) O
RegSetValueEx(hKey,
5 z5 i/ w' w6 K1 c' q. X      _T("UID"),
3 W* y$ G3 S9 u7 `% d; `      0,9 `; a: U3 S3 A$ ^  b$ y5 j
     REG_SZ,+ w* _" c% c* \7 ~
     (const unsigned char *)((LPCTSTR)strUID),
1 n* _& K. e% F, k      strlen((LPCTSTR)strUID)+1);//必须项
- ]; s# d  E' F9 [* u+ p3 Y* u
0 x; `4 T1 q) P
6 G: P" J5 n" @9 F DWORD DriverId = (DWORD)25;3 U5 I/ W4 n% |: D" g6 @
RegSetValueEx(hKey,* N2 D+ @4 O! v8 a* x/ D
    _T("DriverId"),1 S; ?+ C+ o: C' v8 K
    0,
, I5 X7 k) K. V; _- C) K     REG_DWORD,
! }, C4 k/ [7 C* k: S     (const BYTE *)(&DriverId),
/ z/ k; R8 i7 }0 W     sizeof(DWORD));//必须项# I6 e% m) z* Y" K, q
# R, ^1 u, |2 q; u5 T) u1 m
5 a7 n+ p: w0 }& [: X
DWORD SafeTrans = (DWORD)0;' \' t/ \" X) G2 V) k
RegSetValueEx(hKey,! i9 W' v9 \1 @+ T. s+ [5 D1 E0 f
     _T("SafeTransactions"),
9 p/ x) T) Z7 S2 Q) T      0,+ C! g% G: O% z4 l  W- S  q) s5 K
     REG_DWORD,
% }" o" P0 A% J& z2 D. k+ v, n7 g9 r      (const BYTE *)(&SafeTrans),
7 C/ n) Z8 H. b4 e! y      sizeof(DWORD));//可选项
4 _  m! u9 c! T4 O) B}
, w; P2 ^; `2 o% X! L2 |" q" q) z2 |! C+ p+ F9 a. F+ g5 a
& R  f0 `% p2 t& K1 {5 `# i

: z: J$ `& o4 E3 s5 N调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 20:15 , Processed in 0.019703 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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