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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
9 a6 `0 f" L0 U( n8 ?# M7 R; K8 @- W
void RegisterDBSource(CString strDSName, CString strDBPath)
# [8 y$ k4 ]% J0 R- c& Q{4 ~0 b) d$ m# f! j
HKEY hKey;5 U' g. _* D0 ?2 i# n1 A2 F
   DWORD nLabel;
: H; W: {+ m0 E5 M6 Z$ o# P3 B9 \7 i7 g/ r
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
2 e* d. _9 C% h; p CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
. V% {; n' i8 T  F- H, X" V" q4 c# w
# N8 b/ ]) F3 `, w if(strDSName.IsEmpty()) return;
7 e3 F8 B7 q; n8 e/ w' w% H if(strDBPath.IsEmpty()) return;
/ V: h' q% M) L" B2 C3 u: c1 L7 h5 c$ i' X
CString strDataSource = strBaseKey + _T("\\") + strDSName;8 l: ?' S  o3 g, `7 z! z8 t

! Q% N, e- A/ _' j% C2 _2 _" g' w CString strMdb = _T("Microsoft Access Driver (*.mdb)");
% u+ u  v/ F, R" `2 _ CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");1 ]  ^2 `. k7 }  u
CString strFIL = _T("Ms Access;");. g9 K! ]7 U; \0 F: H; R
CString strUID = _T("");
5 H* c: ~) f$ N$ K# p
1 V  n; ^8 }% k% u, a 9 q4 m; E  X) I6 U5 P; q

8 |8 f5 J7 l6 v RegCreateKeyEx(HKEY_CURRENT_USER,! y+ r# W- C# ^& W; p5 H. W* T* p
             strMid,
3 R9 G7 a/ ~9 A% a! @! P  B1 v+ ^- M        0,
/ q5 L* _$ `% r: L/ _0 s& q0 E7 W     NULL,
! d. |8 C+ S; b# ]7 l# _0 @: ]     REG_OPTION_NON_VOLATILE,
( Q/ T' f+ Y& b# A* g4 S5 j     KEY_ALL_ACCESS,6 Z: F# A$ o# k/ O( y
    NULL,
7 x" r$ X$ @' |3 k) m# R     &hKey, ' d  S  {3 _7 u5 K
    &nLabel );//获取数据源键值句柄6 G4 |' {" ]$ c% K" e$ P6 d
# d- I) X1 s& S$ u
RegSetValueEx(hKey,
' K1 H, ^' l: `# w! o9 d% m      strDSName,
0 L' a5 j# C' D  S* k      0,9 I* f  F9 E( @# N% t0 N
     REG_SZ,6 V$ Z( j9 `8 J% p, P% t% J5 Q9 ~
     (const unsigned char *)((LPCTSTR)strMdb),* ?; e8 z6 A/ {( ~5 b
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型. L' {. Y6 t, \
( o3 @7 \9 r$ b! V% C0 i
RegCreateKeyEx(HKEY_CURRENT_USER,4 A% ~  n  }9 ^
         strDataSource,
7 Z) v7 G# j4 c, ?6 n5 t; ^# d    0, 8 R. o4 \9 @  @1 `0 |8 h
   NULL, ' T3 |- w2 h7 g; M' o6 z
   REG_OPTION_NON_VOLATILE,
% T+ {; M( g8 Y2 ?! W    KEY_ALL_ACCESS,3 v  `* |+ N- R+ O" f
   NULL,2 ~: h. s$ p6 {. U. [! q7 e1 B( K
   &hKey,
2 u2 _1 U" ^4 f$ }4 J) W) Q    &nLabel );//创建数据源子键
4 E7 B. J& H( X7 R. K- v7 o
, R, n9 ~% c8 Z1 V+ D RegSetValueEx(hKey,, f$ ~$ p& C3 w, ?. a$ D
     _T("DBQ"),* u4 T) k7 Z2 I+ \
     0,
% p+ X% W: G% T; X; V* |      REG_SZ,  M5 c7 c9 \5 F: H3 C
     (const unsigned char *)((LPCTSTR)strDBPath),
8 m3 a4 s6 e5 d% c: V      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
. ~% m( x7 U6 {: T$ I8 b/ y
+ n# Z* o$ P6 [& C  RegSetValueEx(hKey,' G8 h" S9 Y0 T. o( f# i
           _T("Driver"),
% u$ ^( R4 e! U      0,2 L/ Z# D2 P$ M- M6 }/ l
     REG_SZ,
* E! ?/ X8 I4 k  G* Q6 H; D      (const unsigned char *)((LPCTSTR)strDBDriver),! }% J- I) i% b/ w5 A" r
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
( o* M8 B/ q1 Q9 g* t* d( V" k. s0 Y' v- A5 M! R( H6 F( U
RegSetValueEx(hKey,4 v5 B7 p1 C! A+ p
     _T("FIL"),# [7 c1 P/ g0 V
     0,
3 j+ [5 e' \+ z: N* x4 @2 f/ Z- `      REG_SZ,; I( W6 Y9 H- C' N
     (const unsigned char *)((LPCTSTR)strFIL)," C* ~* }* I0 h' z$ _
     strlen((LPCTSTR)strFIL)+1);//表的类型0 r. t6 V) G3 b1 N. o" ]

1 W1 }, J& T! r' w/ v RegSetValueEx(hKey,% t$ j9 S% {5 x0 v
     _T("UID"),' F  ~; Q$ _( J0 @6 l3 z( B9 Z4 T3 P
     0,
. ]( J. E( a1 S" q1 S6 `6 K) Y      REG_SZ,  s! h9 i2 ~- ^% g
     (const unsigned char *)((LPCTSTR)strUID),
: a4 z( p1 T/ K! k* |1 V( h) ^      strlen((LPCTSTR)strUID)+1);//必须项
) H5 ~( k8 V+ p. ~9 D
6 N, Z, Y; M0 E" g! y5 B' G
, f: @: T+ r7 S# n. R1 j, k DWORD DriverId = (DWORD)25;0 W1 M8 L2 O" h; i" E
RegSetValueEx(hKey,5 C! @  l3 p/ s
    _T("DriverId"),' \# Y: [7 ~" u# n6 L. H. A
    0,
% |. t0 Q5 f$ u0 D, X7 c) J     REG_DWORD,# j( f8 R, M; X0 `1 Z+ M  m
    (const BYTE *)(&DriverId),
$ w4 m2 L2 ~  U+ a     sizeof(DWORD));//必须项
( {& y& g9 q9 y2 K$ R& ] 3 E% W2 K3 B, X, T
, F  W7 s* \8 n2 l( f  j
DWORD SafeTrans = (DWORD)0;  ^, n; l# k2 }8 ?- U9 R
RegSetValueEx(hKey,( E* n" ]+ c! K/ O4 ?+ X5 |4 S) _
     _T("SafeTransactions"),
5 f4 a' ?) o, r  [' D      0,
& M$ ^8 G6 F4 i$ J6 k/ o9 B2 @. F      REG_DWORD,
/ j% h. X1 n' T+ Z3 n" W      (const BYTE *)(&SafeTrans),
: ]8 E6 L0 z  h6 b4 b+ P1 V      sizeof(DWORD));//可选项
( ?% {0 Y0 p: o# `. g9 B3 u4 F" P}
. P, F. Y; z. _7 k9 V; }$ \$ v8 `& W( x2 t* v
; n( K$ n7 C8 l3 `( K8 T
4 W9 Y4 ~* {, O9 n$ G( k' m: d
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-15 08:02 , Processed in 0.017447 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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