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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:& J0 K: o( p) f, B! m% R' `

# M  y' r) q! _& o; y/ Evoid RegisterDBSource(CString strDSName, CString strDBPath); |: |1 h4 n/ b0 \" g5 m( ~
{
2 B) O: S) g/ C# `5 U HKEY hKey;
, d5 r7 p/ p+ v" P- F/ V+ P    DWORD nLabel;
' |: l6 O- @( m  q
! }/ Q) C8 Y; n- L CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");0 j" a& G3 U# v
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;9 i- o- x2 @+ L8 |/ E+ p8 f) n0 T
. d+ d- ]& h, \3 B; v# B* w5 t
if(strDSName.IsEmpty()) return;9 P0 F) |8 A+ Y# C/ O
if(strDBPath.IsEmpty()) return;- O8 S5 ^4 `3 r: D, W5 o
1 g$ W. ]" F, M4 [! Y- P9 \
CString strDataSource = strBaseKey + _T("\\") + strDSName;
& j* V* m# c! c8 D, d
, r- Z1 T& P/ y" q& e CString strMdb = _T("Microsoft Access Driver (*.mdb)");
' ]! l4 ^$ V$ c1 o5 n CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
1 n' t2 M- ?. K; W$ ]+ O1 M: l CString strFIL = _T("Ms Access;");
6 u, G  r, n" a' y& p3 J  Z$ s CString strUID = _T("");3 g: Q4 o2 m0 V% W! X9 B( }0 o1 ]

2 O7 T  ?0 |) H0 Q9 W$ v2 |
/ i! c2 L0 ^9 R( h4 r2 D0 n
6 P9 Q% \3 s4 p# s5 A( E, E4 k- h- \ RegCreateKeyEx(HKEY_CURRENT_USER,
2 [$ z) w& n' S2 D. R              strMid,
( k9 F2 F" z3 Y2 i( L; y% c( Y        0,
5 D1 I( U& O! [% o     NULL,
4 K3 }# ]0 }7 D( w8 O     REG_OPTION_NON_VOLATILE,   Q6 \3 E2 g$ I8 [8 Y( b
    KEY_ALL_ACCESS,9 J* Z; \+ G8 C% O( s
    NULL,4 `$ S% N3 W1 o: O; C; u6 }$ ?% v
    &hKey, 4 d7 m; ?8 L4 p6 p9 O" ~
    &nLabel );//获取数据源键值句柄
! Z9 y9 n/ r5 R9 ]) z0 e
. x6 \. N% s0 A$ R* A) k5 A RegSetValueEx(hKey," w: |8 T+ {2 g' I! Q
     strDSName,9 Z) z0 N; O3 k( K! u
     0,' E- |: P: \9 d; Q
     REG_SZ,
4 p# J# u9 q& u+ r6 W      (const unsigned char *)((LPCTSTR)strMdb),
, s* z! U' k1 {      strlen((LPCTSTR)strMdb)+1);///设置数据源类型
3 l4 u0 L! S5 I+ U7 T* [# {; p
: A. T0 h( X) H. V% ^9 ? RegCreateKeyEx(HKEY_CURRENT_USER,
& N4 g' G7 D9 _/ ^! a2 o1 K8 `" V          strDataSource,. Z: A  ~$ u, ^7 K
   0,
) Z# q1 g5 x2 a2 k+ z1 S- Z3 J    NULL, ) V/ ]/ h8 c% P7 a# ?: I
   REG_OPTION_NON_VOLATILE,
) E# Z$ G7 |. [    KEY_ALL_ACCESS,. q- X  r) W& z# ^6 q
   NULL,
2 v# y$ r2 d) W$ Y& L! L  \' m    &hKey,
1 V9 y4 v1 O% ^9 r. X1 L. \0 m    &nLabel );//创建数据源子键
  f( }( V: Y  N/ f9 N0 p( H: g- K: E' Z: U; K: V/ D5 u6 U
RegSetValueEx(hKey,
% P8 Q9 i$ ]# m      _T("DBQ")," I" ?6 h/ h/ G: h! y  r5 S
     0,5 D0 s+ v  V7 p4 g/ y0 P
     REG_SZ,- f1 {) F1 s) h4 w
     (const unsigned char *)((LPCTSTR)strDBPath),
; P6 G" {1 x' i, Z7 E      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
( C5 F5 A3 ]* X' O% Y) A6 Q2 i9 p- }) k) y3 t5 J7 F
  RegSetValueEx(hKey,1 h, g& o0 M& |; u# F
           _T("Driver"),- T$ [! ^0 t) ^/ W
     0,4 [+ Q% R9 @/ {+ O$ I( h, ^6 y- a4 B
     REG_SZ,
, r% `' @1 l; q" F# M      (const unsigned char *)((LPCTSTR)strDBDriver),, ]/ J+ E! g, m4 G) c* U( w
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径7 b1 C. {' G: s0 E' I1 {. w

5 B. M. [/ f/ g) E& A2 i3 Q RegSetValueEx(hKey,; A8 Y* k4 Q9 g% O. Z
     _T("FIL"),  R0 ~2 C1 C' I& ~7 K; m
     0,  W) O& F: p0 P1 @8 X% K
     REG_SZ,' Q% i5 e' C+ o# f7 r: Q! d9 Q9 B
     (const unsigned char *)((LPCTSTR)strFIL),6 K- V5 l9 B; g+ E
     strlen((LPCTSTR)strFIL)+1);//表的类型4 C" z4 v% ]% V) z% d" [

( O8 q6 a2 W3 ]# E" v  o RegSetValueEx(hKey," N: _' c5 ^' r4 |+ l' m; |6 y; E
     _T("UID"),. k& T( w4 x, H( u' J
     0,2 B0 K6 F3 H0 M1 y5 `
     REG_SZ,2 H5 K0 T; d6 i5 }$ K
     (const unsigned char *)((LPCTSTR)strUID),+ U- C: O  A) |
     strlen((LPCTSTR)strUID)+1);//必须项
& ~5 o1 j; ^4 e# t! k+ w+ q9 e0 m
% Y8 y' p8 m3 A/ X
& \! j' V' i, ^+ i DWORD DriverId = (DWORD)25;
. F3 d& E8 f% M5 E RegSetValueEx(hKey,% I5 U! c( F, v8 w  ~
    _T("DriverId"),' F& T2 f4 T1 a6 [2 y
    0,( Q1 s, V- R( W" i3 X) X
    REG_DWORD,, b3 ]* Q! i4 m4 Z
    (const BYTE *)(&DriverId),
0 j) _% p5 p' `, u' l* s+ p# Q6 X     sizeof(DWORD));//必须项
5 w: S2 T2 j7 ]/ Z  v: T; n- G
2 e% ~: K8 U* q* U+ ]5 x2 w  k8 Q- S+ B' l8 k3 Y) M) W& E5 y4 R; B
DWORD SafeTrans = (DWORD)0;
- n; w5 J5 O& N RegSetValueEx(hKey,0 S& }  w! j7 K
     _T("SafeTransactions"),
* V! @( \, |" v: x2 x- ?$ r      0,0 W" S" h2 A; h( `8 [3 O
     REG_DWORD,
# @$ m, v) B  e. G7 ^# U; E      (const BYTE *)(&SafeTrans),
" }, M3 [9 M/ W, r7 t9 n6 q$ p# M      sizeof(DWORD));//可选项
9 B+ v; R# \/ _( d}
7 z9 d) r0 W0 ~# V8 v
( u3 Y5 V# r# m( \0 J3 A / s. `  W, \: R
) q/ n1 t# A& U9 M6 x
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 10:53 , Processed in 0.017688 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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