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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:; G! D7 B2 C, Z% _4 x( [( w

7 w2 [# r0 U8 a- U; _! mvoid RegisterDBSource(CString strDSName, CString strDBPath)
: \% ~9 N/ N* _{4 V2 W. [9 T( {  N
HKEY hKey;
# a& F* t2 U; e" M$ `9 T+ o' S    DWORD nLabel;
2 C" Z9 T8 k( J1 ?- X
2 W; R) S. X$ P CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");8 \6 g$ I* o' ]
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;4 U/ p' E+ G4 d

$ c5 T7 ^3 y3 Y' H% `6 T- ~ if(strDSName.IsEmpty()) return;
( ~( c5 x/ {; P0 V# L7 F9 o6 g; s if(strDBPath.IsEmpty()) return;6 j6 K! a9 N6 R* E- O6 d. q0 [2 ^; R+ ~

9 d: G0 o9 C; ^( X$ j/ m; \- J CString strDataSource = strBaseKey + _T("\\") + strDSName;* p  |( ~3 x* W8 P; o, ?3 S

1 h, F, M9 ?$ ^' _$ W+ { CString strMdb = _T("Microsoft Access Driver (*.mdb)");. S( g6 |5 V' Q# E& I
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
. h, Q3 K* k4 s/ B# H CString strFIL = _T("Ms Access;");
7 D! m9 Y. N  p. F CString strUID = _T("");
( t8 [0 G* [7 H
( y1 x3 @$ p+ O1 ^2 K# ~
" C3 Y/ q) M" W, e: ]" |( w5 U  ?$ y( u
RegCreateKeyEx(HKEY_CURRENT_USER,
: g9 ^* J+ M2 ~! P' L; g7 i7 Y* g% U              strMid,
. o: B% \) }3 E! A, ]! I; Z        0,
. R, ~! p3 d$ x# T     NULL,
! b, s) T9 H$ M! L     REG_OPTION_NON_VOLATILE,
5 Q. ]2 ?9 E* S. ]/ V9 L( t" _     KEY_ALL_ACCESS,$ A" Z: ?# u4 A4 W8 l
    NULL,2 l* H" P; O; F5 O$ J& t
    &hKey, 3 l% Y) O+ T" [% v7 c. A4 _; N
    &nLabel );//获取数据源键值句柄
# ?8 t' c; u' z9 O3 g8 f2 L. I2 Q: j: w$ W) Q
RegSetValueEx(hKey,
2 ], W; ?! S+ z+ E8 D      strDSName,  [4 c* Y: Z' S/ u, t) y
     0,
" i; _1 {: o! D# l$ x      REG_SZ,
1 w+ B  ^, T8 f  f* f/ p  t      (const unsigned char *)((LPCTSTR)strMdb),
1 S% G9 a  ?1 n9 e6 I! M) M8 T/ N) j- ]      strlen((LPCTSTR)strMdb)+1);///设置数据源类型
  T( B- }0 a1 q5 ~. p" i% [: P3 Z! j5 Y$ t. J' V/ b
RegCreateKeyEx(HKEY_CURRENT_USER,
" u* X8 _) I* `& \0 |( @7 r          strDataSource,
) ]4 _. h( {6 O& @- X    0,
" i/ _/ N1 F- J6 x! R( ]) V5 u    NULL, ! h- v5 K$ S% [! K
   REG_OPTION_NON_VOLATILE, * O- v" f9 |& N+ B- R- D! B2 P- }' I
   KEY_ALL_ACCESS,2 c. F' r4 x& O# ~. i7 V; y- W3 y
   NULL,8 _, c3 u; r0 E+ d& e
   &hKey, ' O  C# B$ c; B! N+ n+ ~
   &nLabel );//创建数据源子键+ F$ k8 Q. U+ z# h
. o. q, a: S, t' W: D8 E
RegSetValueEx(hKey,& j8 z, W3 K8 {6 R- ?8 l
     _T("DBQ"),3 y+ }- s% ^8 ]. _
     0,
% L8 x# l- P$ ?+ P7 Q8 u2 |      REG_SZ,
! y5 D. d: B# F) ^      (const unsigned char *)((LPCTSTR)strDBPath),* X, A2 C2 l* D6 L
     strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径4 m& F/ i  G0 C5 e
5 V* X8 a( l4 H/ X* l+ _
  RegSetValueEx(hKey,; t! d( X, P7 X0 h" u
           _T("Driver"),
3 e5 L4 B) p9 E  b6 \7 s3 e3 ?      0,! m) B: y8 {$ \) h( G1 a
     REG_SZ,
, y1 V  t0 B5 r. a7 J; p      (const unsigned char *)((LPCTSTR)strDBDriver),
2 J0 B% D" a3 R8 c      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
1 P6 f- C" c) e4 R4 `  Y
0 q0 r1 f& A4 K( \. l RegSetValueEx(hKey,
! M9 }4 a8 k2 P. L4 I+ j      _T("FIL"),- b5 \8 J- s2 W: }$ w
     0,
1 V9 X' \5 N0 v8 v1 m5 c# T" r! Z      REG_SZ,0 a( B* C* m. R# R/ l3 P+ [! N
     (const unsigned char *)((LPCTSTR)strFIL),1 e/ P. I1 c) f# y
     strlen((LPCTSTR)strFIL)+1);//表的类型
! K% F0 h1 V$ _: T. }) p" j0 w
2 C9 ?! g7 F# T RegSetValueEx(hKey,
% H+ x  _' Q5 q) q. c      _T("UID"),2 V% p# K/ d; r' E8 ]* t* H4 S! H
     0,
* S. K8 n: Z4 I" }5 Z1 i      REG_SZ,
) p+ ^; j+ v! M$ a2 }( ~4 e      (const unsigned char *)((LPCTSTR)strUID),1 G* q: _9 [& N2 G/ D
     strlen((LPCTSTR)strUID)+1);//必须项2 M5 Y( }4 |: {* I; l* J: R) X

& t, V' v6 j( k. P" ?; z$ A5 f1 H1 o' n
DWORD DriverId = (DWORD)25;
& W5 U$ `- H! f" z RegSetValueEx(hKey,- \) E# R9 `/ z% V) @. p% s
    _T("DriverId"),# ^, f: k- e# \5 A2 Z
    0,
2 j) W; k. v7 N% y     REG_DWORD,
1 `0 V5 M0 _0 Z  }     (const BYTE *)(&DriverId),
" t' h0 I2 t5 Z& C/ Q     sizeof(DWORD));//必须项8 t5 j, q' C$ [6 ^. R& I9 F

* M$ o4 ^1 o; z/ J( c9 N
0 V9 n, c0 N/ K4 W2 k. [ DWORD SafeTrans = (DWORD)0;3 b% m( l0 ]+ s% p, W
RegSetValueEx(hKey,5 G7 I6 g% \- Y1 v
     _T("SafeTransactions"),7 A* M- n) }* m4 q6 ]: r
     0,' [  ?  `6 F9 a0 Z
     REG_DWORD,
+ A7 m/ f! Y  L      (const BYTE *)(&SafeTrans),  G+ |7 f- F! h# X% q
     sizeof(DWORD));//可选项
" O- o5 V  P+ a4 J! W}8 W# a) t! M, z8 P6 G

# F' D; \! A" V( W+ o
% M6 R5 R) z$ i& i- _
% ^, E% k' F& R# Y调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 06:58 , Processed in 0.017137 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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