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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:1 M1 ^7 L( V4 v0 k

1 ?8 H9 y7 a* [) H3 qvoid RegisterDBSource(CString strDSName, CString strDBPath)
" {0 ]  X2 _  i7 E{
) L9 V7 q7 x) V, \2 ] HKEY hKey;
) T: L' E; n8 {& _* y. f) G7 r% X1 w    DWORD nLabel; : n8 \$ G* ]% d; O4 e

4 y: Q# _) L7 T2 N, c! B CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
  q' ^  d/ {5 x8 ^+ H CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
3 ^' B* d# b$ h' ]1 \
* B  `6 g: u/ f% E2 |( f  W1 W1 d if(strDSName.IsEmpty()) return;
: C1 [. P& ^! n  D if(strDBPath.IsEmpty()) return;
& g! e% N& Z3 z3 n" r! f% |( a5 T+ i8 d) y/ X
CString strDataSource = strBaseKey + _T("\\") + strDSName;2 E  S5 j; Y" ]" m- K" t3 z

# G) O, W5 z( D* }7 | CString strMdb = _T("Microsoft Access Driver (*.mdb)");
$ C8 P7 S. x% e* \% Z CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
7 W. d7 s; H1 H8 \4 C& Q( j CString strFIL = _T("Ms Access;");7 p% S/ s  _2 W5 [6 K) e# s
CString strUID = _T("");
1 C' R5 t" t; v
2 p7 b3 [& C% V7 _4 G$ k" Z- x( {8 E9 b. f
2 d5 u! e. R6 ^( e/ H. \: P4 C+ k1 _7 e7 t: q. `
RegCreateKeyEx(HKEY_CURRENT_USER,
/ ^0 m- v+ `5 _+ G$ l! U              strMid,
4 a; _" L  P# J! t# q        0,
/ |9 @( u7 m8 j4 `     NULL,
. d9 }# \6 x% q' {+ x" ~0 o# i     REG_OPTION_NON_VOLATILE,
2 k9 C; w; \- S+ ]     KEY_ALL_ACCESS,
; k( |9 B+ M5 S. I* E4 m; J     NULL,7 b$ [3 W3 w, y3 o1 S) ]3 o5 q
    &hKey,   g6 z: P+ @& M" K1 C* X) P+ `
    &nLabel );//获取数据源键值句柄
& W* c8 {3 j0 ^3 y7 R! @  T! |. s4 M: a: R: q
RegSetValueEx(hKey,7 z, T& l' V; f9 W; _
     strDSName,. l- ]% F/ B6 s& Z9 p$ v
     0,
- }; @1 w, d2 b. p( f      REG_SZ,: ]9 H9 W* N: ]5 S) u& \9 \' n' ]3 r9 d  T
     (const unsigned char *)((LPCTSTR)strMdb),8 m! ?% c2 M- x" y  ?+ ]' F
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型
+ m1 C/ m$ J$ m8 s0 E+ g
' ?9 P1 r, C4 A- _/ X5 R. d RegCreateKeyEx(HKEY_CURRENT_USER,
/ B' X* k! e* }: b6 k          strDataSource,
' ~1 G2 |9 e( [( h% }    0, ( S5 N* O0 {5 S5 L* T5 n; P/ T3 W
   NULL,
$ B$ Q& _! ^3 S3 j$ S    REG_OPTION_NON_VOLATILE, % i& n( r, m8 k& C' q
   KEY_ALL_ACCESS,
& w& @, g4 X/ q1 _: @0 X) _    NULL,
, I2 v+ s4 I. C+ [) E    &hKey, $ F# f2 b0 p! ?4 Z9 Q
   &nLabel );//创建数据源子键6 f, U. O( T7 I; p7 m3 I! S
6 D' c9 o' A  x1 i1 o$ N7 u# o+ j: T! D
RegSetValueEx(hKey,
5 {1 d! w. R$ A2 n4 Z1 [      _T("DBQ"),
! ~8 C8 v3 Z, z4 }# p9 M& U1 a% U) _      0,
% b8 l+ Z0 u5 e2 B& b      REG_SZ,  q  S+ M- N) o1 p4 g% |; l/ k
     (const unsigned char *)((LPCTSTR)strDBPath),4 }9 K( g3 I3 o, Q& g
     strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径& g- X7 t, J) b4 }7 K

8 K% Q$ b; l" j% |8 U7 m  RegSetValueEx(hKey,! _9 c! G; Q  z7 L
           _T("Driver"),8 p9 j" z% S& n+ ]! r* G, G
     0,
! w0 O' J2 @- {' m      REG_SZ,' y1 m+ V. q6 m& }+ U
     (const unsigned char *)((LPCTSTR)strDBDriver),. s3 U6 Y' U$ ~/ j; B( ?/ l* T
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
) p# S; ^) O# J# _* K
$ _- N- L, @4 A8 B% [2 H RegSetValueEx(hKey,
0 D# r2 T4 K0 N+ `; ?0 A      _T("FIL"),
# s7 X# @; s, P8 X; t! ]      0,
. Z: f# O! C2 c2 e' v      REG_SZ,9 M  k8 u" S1 x8 n4 P
     (const unsigned char *)((LPCTSTR)strFIL),
, X# r4 J# i: q  j, J      strlen((LPCTSTR)strFIL)+1);//表的类型
+ g- p5 u6 C- j: i0 l' W
1 w. x4 `3 g% S+ m( @  A RegSetValueEx(hKey,
' n8 C1 c, L; p      _T("UID"),- l7 A4 _2 @$ h4 Q; i( d
     0,; z% M/ e3 Y: t& r- j. a+ O
     REG_SZ,  Q* ?6 T, S* s
     (const unsigned char *)((LPCTSTR)strUID),6 C6 v8 v& f0 ]: G: N
     strlen((LPCTSTR)strUID)+1);//必须项7 ?! f1 H7 i# @1 h* ^
( N# q! J- z$ f* n% v

4 l6 W  W2 D" N DWORD DriverId = (DWORD)25;
4 h- e5 }5 Y% D9 q RegSetValueEx(hKey,
: d9 i, Y7 W, [5 b) @     _T("DriverId"),2 x  v9 j+ @/ }4 Q
    0,9 a. I& ~& @2 y, e' Q
    REG_DWORD,
, t) c; d8 S, q- x     (const BYTE *)(&DriverId),
( ]1 h9 w! p6 ?& e) B2 x     sizeof(DWORD));//必须项+ J5 t1 F$ B$ r: C  Y, u
% z2 G9 w9 l2 V- ], K2 E/ b
" w! {& O+ ?* F( w, U
DWORD SafeTrans = (DWORD)0;
6 u8 ^1 x. B$ H* Z: h. V2 [0 F RegSetValueEx(hKey,
5 K  L7 p$ X, a! B( V- ?- p      _T("SafeTransactions"),
0 B0 a# U7 |: o- Y" p      0,
, W  ?4 Y! E, ]! H9 L- i9 t; k! h( f7 c      REG_DWORD,
2 @, X$ F8 C: N% {      (const BYTE *)(&SafeTrans),
$ ?9 U$ C5 Z: U/ k. F      sizeof(DWORD));//可选项
5 V# G- D9 K% Q' h: V2 N! U7 A}2 D" t- @0 p1 i5 i4 @
, p4 J# U9 n1 U" V
% p1 N1 N/ @: H3 T' H1 A
6 L1 M. I7 S8 O) z5 V. u
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-5 04:29 , Processed in 0.016080 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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