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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:+ d6 w7 z# h. D% w3 y+ r

$ B: p' k0 W) m5 B; ?void RegisterDBSource(CString strDSName, CString strDBPath)
; `% h# X6 ^! `+ {9 Q{
- R; K$ b8 K$ n% ^; q  u HKEY hKey;
/ H7 H, U, p1 N    DWORD nLabel;
: y2 H( F+ p+ L6 |! O. f+ e( W- Y5 b# \2 X$ I
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");1 ^* e6 D# s' M" R* N
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
1 J. `. F0 f5 P# p( z- t" u. I, j' Z: ]
if(strDSName.IsEmpty()) return;- m2 \1 [% Y4 f, k( t
if(strDBPath.IsEmpty()) return;' j) h3 F) Y* r. k

' Y2 y4 p! \, D& {; s CString strDataSource = strBaseKey + _T("\\") + strDSName;8 L9 B, l/ ]0 y% z! ~! E

1 K: Z6 V& \' p$ J2 d, l2 H! i CString strMdb = _T("Microsoft Access Driver (*.mdb)");# Y: l5 U! X$ V9 F) V, Y7 t
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");) x0 s* R% o/ d9 M" w6 L
CString strFIL = _T("Ms Access;");" K3 D. ^5 A: `+ c" e% a0 }
CString strUID = _T("");
/ L0 ~2 z" f1 P8 `2 B: h% [4 y/ ]

; w4 V3 G# ^: g( o
  N) M" o& ?$ g; s0 E0 L RegCreateKeyEx(HKEY_CURRENT_USER,1 m/ J, k- w1 W2 `  o
             strMid,2 T" _# o8 g0 U; \5 c% Q
       0, - B# q4 A. E* M, h! T, o, p
    NULL,
) I3 v6 e: p# J* U6 ^     REG_OPTION_NON_VOLATILE,
# Z+ `0 O! p+ ~4 Z0 z" k9 D0 S2 k6 o     KEY_ALL_ACCESS,0 y' C- v0 V) `; j; @8 D
    NULL,* ]# o/ S( R6 e6 G7 L
    &hKey,
% t' e3 D' g8 A0 m% L) M" q- f5 t1 W) B     &nLabel );//获取数据源键值句柄1 g+ _) |& K' p$ W" o
& B; l' R( V; b; g- T: F/ n: `0 s: d* L
RegSetValueEx(hKey,( O, }( j9 L, L* N: Z8 Z$ b" u% W
     strDSName,! x& p- z8 f: R* O9 y& v: e+ z
     0,+ s, {- r" S* x" L: L
     REG_SZ,7 ^' J0 M) P) `& T1 x+ {
     (const unsigned char *)((LPCTSTR)strMdb),
4 i; e; o; P  g7 g      strlen((LPCTSTR)strMdb)+1);///设置数据源类型
( p* A! F: j+ L3 S  y+ ?6 F/ i" k+ ~8 V3 {5 n. n
RegCreateKeyEx(HKEY_CURRENT_USER,
+ W7 ^5 ?& S1 R, x* w6 l9 E$ u          strDataSource,- E3 c* n4 c5 k8 I7 }
   0,
( j+ o& s7 Y) [" _, X    NULL,
# |3 T0 K) o/ C# j    REG_OPTION_NON_VOLATILE, ' P7 M/ z0 ^& r- Y# L0 V5 ~9 B
   KEY_ALL_ACCESS,
! M! e& m9 z7 q, S    NULL,/ B7 ]( P9 n$ P* {; @* I, z
   &hKey, " ?9 R" J7 S, `6 Q# @  \# \
   &nLabel );//创建数据源子键
$ i- ?1 m% c  v9 _; w1 Z# @  Z. q. z: z4 {& g1 G7 Z# q: B
RegSetValueEx(hKey,: n; I- L$ N" d' k9 Y
     _T("DBQ"),
: U( R) d8 ^* ~. t! M* `      0,: u) u" J- K2 ^
     REG_SZ,9 G3 J5 w, A+ k( A
     (const unsigned char *)((LPCTSTR)strDBPath),( ~- y. B$ w9 @$ _+ L
     strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径4 j: l! q' @- z; b" i" n

" n, L8 \) G. T  _4 Z7 ?/ d  RegSetValueEx(hKey,
& d3 p6 x& D0 S8 J  ]2 v            _T("Driver")," b+ @7 K$ \2 _; R
     0,/ |* H' {4 g" m3 `8 F1 g
     REG_SZ,
9 V) y: p' g% \, V      (const unsigned char *)((LPCTSTR)strDBDriver),: P+ Q9 M& G5 Z( h* {8 {
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
! c6 _' s7 H- H& w+ {8 f
% Z( q4 b2 ^( g. }+ g0 d9 C- F RegSetValueEx(hKey,
4 z; f. o$ E: T* b+ I# n5 x      _T("FIL"),9 @) E! P3 P1 O! h
     0,6 L; @, U9 T. l: k
     REG_SZ,
# M/ M3 t/ c& h      (const unsigned char *)((LPCTSTR)strFIL),$ |6 d* \" t/ D+ s
     strlen((LPCTSTR)strFIL)+1);//表的类型3 [6 I9 Q0 Q7 ^) w6 l
' e, R7 Z3 F5 @- B% U# ]' ?: s' p
RegSetValueEx(hKey,- z9 |. o! a: ]
     _T("UID"),
( H/ }$ l/ V: `9 a2 n0 \      0,4 N+ N& N+ O* |$ p
     REG_SZ,) P8 r" i1 e: d. d# l5 y
     (const unsigned char *)((LPCTSTR)strUID),0 ^, v/ ^+ m- P- \! c
     strlen((LPCTSTR)strUID)+1);//必须项6 ?! O" ?2 X% C0 h& _3 R

+ y# X4 G8 O7 F; j. G. l
( z2 z1 Q! N. B* p DWORD DriverId = (DWORD)25;6 B6 S/ t) x, c/ S- V1 f
RegSetValueEx(hKey,
" }. V+ Q6 |5 Y# f9 R     _T("DriverId"),
4 U7 m' h8 n0 {7 ~" D     0,6 l' y+ y) Y5 |6 G( e2 @
    REG_DWORD,4 l( \: e( W' q9 Z; J" \+ D
    (const BYTE *)(&DriverId),+ Z) u0 k8 ?' F
    sizeof(DWORD));//必须项: p7 p$ [, j: j! }2 R' e, R% P

7 T: t2 K/ g( i! h/ T! M0 ^! q9 [3 T) v9 D: L/ R  f2 k
DWORD SafeTrans = (DWORD)0;6 ~! b! W# q% H# X/ ]
RegSetValueEx(hKey,% K; H2 t" D5 h  G2 g
     _T("SafeTransactions"),  Q* v1 c  b9 Z% O- @$ \, T
     0,
! e% I# L5 y3 G. M) d: H      REG_DWORD,
; K' P* ]* Z( W8 L' X, w      (const BYTE *)(&SafeTrans),
# q/ s- d$ v- f$ F  {& t      sizeof(DWORD));//可选项
# k6 t: h: e  r0 a}. L6 J0 n( n  ?7 a# z9 h
% X; g: W% S0 v$ M9 f* S# G
( o# A1 z. g3 Y$ _! E
& i: F$ n8 p2 n; Z; @
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 07:19 , Processed in 0.034815 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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