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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
" E! z# L6 z5 P. h' o$ \5 c! p4 Z5 b$ L1 T7 L* H% c9 Q8 ]) d6 k" H
void RegisterDBSource(CString strDSName, CString strDBPath)8 m7 a# |% n8 |3 L5 ?
{
4 e$ @( n: {+ H# A% }" n6 u HKEY hKey;* r/ l" d. A+ g2 {4 e2 ~
   DWORD nLabel; 3 M; P& f4 m; y9 \3 v" t; D0 K

4 ]- E4 N& q! }1 X/ d CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
3 W( c$ q+ X2 ^' ^ CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;* S% W  C( B3 p- W' s

/ ~7 ~& G' t* Q) F if(strDSName.IsEmpty()) return;  {2 ]6 n+ d! o. ^& u" E2 `  ?$ I
if(strDBPath.IsEmpty()) return;- U" N/ a4 O! L% q2 v* h

: X$ O4 V: I6 q0 F4 Y$ n# n- Q CString strDataSource = strBaseKey + _T("\\") + strDSName;! N$ O! b% V/ \! K0 }4 R/ K( g) k3 i  R- y
2 q6 l6 z, E$ }: a
CString strMdb = _T("Microsoft Access Driver (*.mdb)");# c! H; I7 C1 |7 m% v9 l/ w8 @
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");* X9 M# c  g& b. C; T
CString strFIL = _T("Ms Access;");
- e6 H" }0 v  M" c CString strUID = _T("");
4 q: D' |% T: e
9 T1 X& b% Y5 G % ^7 Z/ T2 y5 w# [1 O

; y  u: g" x/ W4 G! ~ RegCreateKeyEx(HKEY_CURRENT_USER,9 `; Q$ y' J: F. i* a
             strMid,
) u1 J0 C  B6 @        0,
+ q$ ?; z; M  W6 |6 C* L* x9 a7 L     NULL, $ D4 }! }# t: w
    REG_OPTION_NON_VOLATILE,
& a, b6 }" X6 |% f1 G/ r     KEY_ALL_ACCESS,
( i% n5 |; ~' D+ p     NULL,, q; b( ~9 E& L4 E6 U( e8 e
    &hKey, & R; E9 q- p7 p9 g
    &nLabel );//获取数据源键值句柄! {; O  ~) d, f) p: ~7 K
- w0 x9 C: r) `- [# |3 w( _* \
RegSetValueEx(hKey,
" F( ]9 G2 m9 y- O/ H4 N' y      strDSName,2 I2 d: Q6 Q7 _$ b# T, x8 |8 A
     0,
* i: Q; a( [  D      REG_SZ,
! G) y9 c1 ?( g4 E  P1 A+ r      (const unsigned char *)((LPCTSTR)strMdb),
& I4 m. j2 s1 F% J      strlen((LPCTSTR)strMdb)+1);///设置数据源类型
2 d) v4 S: @" J6 X2 w1 u5 {4 |) E2 |$ o6 i) c  o
RegCreateKeyEx(HKEY_CURRENT_USER,1 E7 g% O7 _% V9 G1 B! B4 r
         strDataSource,
+ t0 p8 W5 O2 i( @1 O    0, - T+ L5 ?, v9 P, e7 s+ N1 p
   NULL, 3 @$ ?( {; m( ?& p$ U
   REG_OPTION_NON_VOLATILE, . x3 g6 C1 k& R- h0 A
   KEY_ALL_ACCESS,' u7 l. Z9 X* _7 d8 u
   NULL,
, G; |% H' U: i: w  o6 L4 B    &hKey,
/ |& n4 E1 {/ {* X7 d    &nLabel );//创建数据源子键+ n* [$ P+ i( D9 ~6 d9 H
  d. l' S& C6 ?$ s% ?; k+ Y: P' y
RegSetValueEx(hKey,' r7 n/ S% u! ?# I# G5 P6 v/ t- X
     _T("DBQ"),8 I7 t% ^* `: `  X  P6 |" Z
     0,% z8 m# ^; z. m% z. ?* q) v' ~
     REG_SZ,4 @  K+ X* r; N* o. W
     (const unsigned char *)((LPCTSTR)strDBPath),7 _7 ~. g: `8 P6 A* l
     strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
$ w. {3 X' A) c, f8 g; s! X+ A- o  Q" Y) F7 @
  RegSetValueEx(hKey,8 f/ |$ D3 _3 W% L$ c3 Z
           _T("Driver"),
0 o+ s( M0 d! U0 a      0,
2 i, J: o# H3 G8 p+ j$ T/ h. D      REG_SZ,
" f! D/ _' U. z7 a$ J9 n4 I      (const unsigned char *)((LPCTSTR)strDBDriver),$ ^/ f3 F! }8 L" w2 J- C
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径9 r, u& N4 k! |) K) s! C, Q- ?

! Q) ?( ~$ J6 z4 G RegSetValueEx(hKey,
/ i. ^+ ^" p& p! i0 d) q' u0 N      _T("FIL"),
& @8 t0 [/ u% G" f, J8 n4 j      0,
( A- W) P, E/ e/ a  K1 O0 T2 @6 q      REG_SZ,+ Q. ^! V& z0 T1 Z* T+ ~
     (const unsigned char *)((LPCTSTR)strFIL),$ K* q4 K! C" u/ R2 R) [
     strlen((LPCTSTR)strFIL)+1);//表的类型/ ^4 B: z1 Z! Y

( p# Z8 Q& e/ F) J RegSetValueEx(hKey,
: J9 k3 P% \7 u% j7 i% s9 u      _T("UID"),! z* X( r2 n7 f& G0 H. e
     0,8 v* w" Q2 H; K: H+ v7 e3 T$ P8 Q
     REG_SZ,
5 K3 t- M1 ?4 J3 V$ m$ [      (const unsigned char *)((LPCTSTR)strUID),
- K" h. d  i4 C. A" A: z      strlen((LPCTSTR)strUID)+1);//必须项
2 {! j5 r9 z" ]! U  U6 T' m
3 J# n: M; v4 q* v- _( H7 T/ S+ S$ G2 Z  g) I' U8 d: a" h1 H
DWORD DriverId = (DWORD)25;
( C5 K, \, V9 A* m7 ^" o: H RegSetValueEx(hKey,
, ], s* W* u% P) @/ y2 ]     _T("DriverId"),' s2 X! }" l' F8 h* {8 N
    0,/ H  r# |" v' k# q* t& O' M. I
    REG_DWORD,
9 d: w3 w7 H* N' c# R. D     (const BYTE *)(&DriverId),
4 F' i' Q$ ~7 a0 ]     sizeof(DWORD));//必须项! S: W/ ^  q3 d2 n
7 R5 Y6 g' h7 A8 q* V

$ a( n/ Y7 _( x; c4 c! M DWORD SafeTrans = (DWORD)0;
" v+ M; T0 s$ f7 D9 { RegSetValueEx(hKey,
7 _' h2 O6 G& }/ p& e      _T("SafeTransactions"),
6 T& V: G7 B+ N" t/ U      0,7 G; D" y6 G! j% X! R' x
     REG_DWORD,
) B2 S; ]/ O0 M% V3 L6 c- C2 C      (const BYTE *)(&SafeTrans),$ }5 t3 P; B+ i' i( [9 F
     sizeof(DWORD));//可选项6 U8 w3 _) p+ X) l$ I
}
2 o4 u( I: d5 l* A  a1 @/ j
9 ~( I. c2 W" z! Q, S 4 p4 E9 g( \1 j- ]% N5 {* h" K

/ W) ^1 y4 E6 X% C2 d8 w# F调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 11:46 , Processed in 0.018540 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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