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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
4 M3 P/ ^0 I' M, Q$ G) E# W  J0 y
8 o# F+ \& E2 a0 J8 `% ivoid RegisterDBSource(CString strDSName, CString strDBPath)1 z- f- i; I) Y0 J" w: h
{- N' q; u. r# n3 X
HKEY hKey;# Q+ L+ P! z. R0 J. ?7 k
   DWORD nLabel;
, H# ?: `' Q  I0 q7 {8 E; y5 N- }5 s
2 m, Q' V3 @+ a' {9 h CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");- t/ S; W4 X" l$ Z! h
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;* F$ ]' @6 {* o0 n" a8 i2 G7 b

2 [2 G) e  Z+ E1 G' ?: v if(strDSName.IsEmpty()) return;! O: `! d  D& p" o7 X
if(strDBPath.IsEmpty()) return;0 [2 I1 r1 _' j) U' K% x
# a6 l& b# @8 U. v$ C6 c. X
CString strDataSource = strBaseKey + _T("\\") + strDSName;
" E! }1 L7 y4 p, O  S5 `5 B' P2 P- q/ D6 E' r
CString strMdb = _T("Microsoft Access Driver (*.mdb)");4 b$ b0 U# P/ N3 X) D; O
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
: h4 R0 P# p; h CString strFIL = _T("Ms Access;");
" D9 g1 k4 S) d) }  n CString strUID = _T("");! W; t* f% z3 t' X  o- R
( j) U. C% U+ o3 p

4 D7 {) a7 j* i& E6 s' z3 @
) J1 c0 n0 }  v( X RegCreateKeyEx(HKEY_CURRENT_USER,
% }- m7 O5 i$ f6 F              strMid,
. d9 X9 k3 V' Y% j1 ^' {8 \  M5 E/ Z        0, $ Y" X# V- W' y6 b& Z& G
    NULL, # T2 ^. I* b4 x
    REG_OPTION_NON_VOLATILE,
( L( u) f3 d4 }& G     KEY_ALL_ACCESS,2 j* r, d* S# m; {
    NULL,
9 q: g5 u8 |7 P& \     &hKey,
' o" c% f$ O% |6 I( M1 R3 p% T     &nLabel );//获取数据源键值句柄5 I: y! m+ E, W2 _
  t' |( N4 |- o$ E
RegSetValueEx(hKey,0 i5 N9 G  @" L; L" q
     strDSName,- F1 J2 c8 B  A6 n! d6 `# c/ z
     0,
  V1 N- d8 e5 k+ [8 s3 T7 s% w      REG_SZ,9 P) p1 w! ^* L
     (const unsigned char *)((LPCTSTR)strMdb),
+ Z3 g9 g6 k! K/ V3 E/ [4 B      strlen((LPCTSTR)strMdb)+1);///设置数据源类型
8 ~5 |* {% v" J# {8 u' g: |( g, Z4 N2 v
RegCreateKeyEx(HKEY_CURRENT_USER,, }2 U9 K4 k9 U$ z8 \" K% n
         strDataSource,
. P& P% q8 q7 g" o+ ^$ L    0,
) z6 o* _/ ~' c    NULL, 6 h6 v3 r$ _$ \+ Z6 S" G
   REG_OPTION_NON_VOLATILE,
! y( j3 w# j) V0 V/ D    KEY_ALL_ACCESS,$ \/ Q. ?' E$ P/ o+ m
   NULL,
7 V4 n! w! l0 D% p  J- S0 `    &hKey,
( _8 o1 r- g9 e9 V9 h" B    &nLabel );//创建数据源子键& `, L  k7 r2 L1 e7 z# }/ i

* A5 ?# V' F, z7 X8 d RegSetValueEx(hKey,& R4 n3 c& N3 F8 ^2 p( F5 [" O
     _T("DBQ"),
' H! V; p3 R' Y( h1 r      0,
  s# K4 _% v" f* _, u4 Z( W- b      REG_SZ,
1 N1 |2 D5 g' |4 g      (const unsigned char *)((LPCTSTR)strDBPath),1 F3 C  \( h- q* u. {- L+ M
     strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径4 B% s8 X, d5 i7 C6 I4 R

! l5 a% F) Z6 [6 n/ U  RegSetValueEx(hKey,
1 c8 V2 ]7 ?+ ?) v' [* r, c            _T("Driver"),
" _* Y5 W, G3 r( k* E5 [4 |      0,. f- E. x5 t1 y1 h' W, G6 C
     REG_SZ," x6 K" R. s/ n' {: v
     (const unsigned char *)((LPCTSTR)strDBDriver),
' i( l+ ]5 T4 y' z5 P' R" c      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径- \! G. f  n! J9 A
: k8 \3 D  O  h
RegSetValueEx(hKey,4 y  `3 p( l, ~% G* B/ x: y
     _T("FIL"),
% }( n# V+ ?5 L% ]" n$ T, g      0,
: W, ~0 Q# t  |8 t) p8 J9 x      REG_SZ,
+ W& G" t: B# M8 z; W7 M      (const unsigned char *)((LPCTSTR)strFIL),2 Y  d$ m, Z+ I
     strlen((LPCTSTR)strFIL)+1);//表的类型! h' O8 g" g5 o& m4 G1 U4 t$ [( g: k
6 N  m* @' L; H$ ]) o
RegSetValueEx(hKey,
2 s9 m# E" s! L3 D$ s3 ^7 a2 Y) N      _T("UID"),
4 A: T* o, x8 n4 E' _& D      0,
5 }2 V' |2 r+ l      REG_SZ,
, |6 z& ~. ]. d( T      (const unsigned char *)((LPCTSTR)strUID),
; Z" g3 H. A5 q      strlen((LPCTSTR)strUID)+1);//必须项- g% N+ \8 N- f( @

$ I$ c  c- H, e& L; n0 i# k3 @) i6 k+ g8 c0 _
DWORD DriverId = (DWORD)25;( s+ I" S# _$ M; p4 y! w1 u
RegSetValueEx(hKey,. n9 I/ L. p, v$ y! ]. E
    _T("DriverId"),  @0 S2 Q( G6 o- G0 s, l
    0,  V% x" m7 Y& m  Y1 p9 c$ u
    REG_DWORD,# t* \/ e% s. N# o5 y) E- }  e  F4 w
    (const BYTE *)(&DriverId),
% [3 v' V0 M8 R. ^) ^* H  [. T     sizeof(DWORD));//必须项5 ?, t1 A1 ?2 Q& _; @3 j
9 a- g8 o- o2 `+ ]  b

0 G; Q; M  w* w8 W7 Y% h* M DWORD SafeTrans = (DWORD)0;' Z2 X7 s2 U' u" S- m
RegSetValueEx(hKey,2 _8 d* p" m- X! i& Q1 y- u) v
     _T("SafeTransactions"),
2 ~& I1 X6 S( C* ?      0,
3 D- Z) ]9 r  H0 G6 F      REG_DWORD,1 d9 T. ?  g5 X3 o+ V2 J
     (const BYTE *)(&SafeTrans),$ u. t; g2 N# m! h3 Q; _% [
     sizeof(DWORD));//可选项" j$ j# s# @( j, s+ |6 I( h' _
}
# g) k/ |* c: d$ H1 e! P& ]
) |0 L7 u. B/ n9 I+ ~' {; ^9 U / j- _  ~2 R9 J9 L8 b+ W

9 F7 E/ g' ~  T2 Z+ z3 F9 l; h调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-29 20:05 , Processed in 0.018470 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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