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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:5 {9 }; f* s  E+ l  d' v  [

/ T! k: K4 a3 D+ V/ k+ Cvoid RegisterDBSource(CString strDSName, CString strDBPath)
5 B9 {2 v) V( Y: S2 P' w{0 m3 j3 L1 |/ m9 J
HKEY hKey;
) o7 H5 f% ?% N# G2 Z8 v; ~( l, ^! V    DWORD nLabel; 1 O" A2 J9 S  ^; l
6 G8 b) Y( n0 p- t2 J/ V) H
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");# _; b0 x  j; J5 r
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
1 T# e+ D: u& m! R4 Y, j5 S% D+ o8 R* R
if(strDSName.IsEmpty()) return;7 \# f# J6 I" }" U2 `( g
if(strDBPath.IsEmpty()) return;1 v$ I- h9 G2 k! S" n2 k
8 D1 R; k  ~- `+ s* N2 [9 ]
CString strDataSource = strBaseKey + _T("\\") + strDSName;
, R% b# a9 o% `; X! X# t3 ]; A# G4 r; ^# `% I; I
CString strMdb = _T("Microsoft Access Driver (*.mdb)");  J* M# u2 C5 B+ x/ o, U+ D. |
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
: R, u( G- [& f& B8 h CString strFIL = _T("Ms Access;");
! R! E, _$ T. |0 T7 _, W CString strUID = _T("");0 ~, M! ^  I' i% x
# w9 B2 h( `& F4 n7 [0 M

8 k, X8 j) i" ~4 P) v1 E) [3 T% V( T1 v
RegCreateKeyEx(HKEY_CURRENT_USER,) m+ ]5 z5 e4 O5 A; U- r
             strMid,2 q& o! g, A& d  A2 k
       0, + a% H! R! E7 }4 \4 I1 i, T) i
    NULL,
$ f% V2 u' a9 }- ~9 _- u% j% P$ t     REG_OPTION_NON_VOLATILE,
: {$ R) J# r0 r% J7 y9 y, F     KEY_ALL_ACCESS,% a" G( T0 R! U6 r0 C) S
    NULL,' s. e3 t1 V1 b
    &hKey, % b- Z$ X, E4 i3 e  w* m+ v* G
    &nLabel );//获取数据源键值句柄# Y: n0 F  N% l7 U; O5 @
& e( K8 F. j1 E8 f
RegSetValueEx(hKey,4 @) _, v; Q8 X0 d
     strDSName,
8 T8 Q/ z4 X" \3 q( Q      0,
" s, C" @% }# |      REG_SZ,
% z8 H: `+ I2 e9 p4 M      (const unsigned char *)((LPCTSTR)strMdb),
3 J# [. g# A6 Y      strlen((LPCTSTR)strMdb)+1);///设置数据源类型
- C4 o- c2 L) Q* n* F' S8 Q9 p1 z; A% W& @+ X
RegCreateKeyEx(HKEY_CURRENT_USER,) o9 L# V+ Q+ u
         strDataSource,
" c- M4 B  A+ W2 q2 R/ w. H' i    0,
  A; B6 `5 U+ J" F  f    NULL, / c5 m4 J$ X) H) K# E, L7 H
   REG_OPTION_NON_VOLATILE, " B% g3 I, B( k/ u; P
   KEY_ALL_ACCESS,
( N4 c# h. _5 G    NULL,: K! h3 a8 R, e" M- ^) i- O
   &hKey,
+ [3 k5 g4 o" [. b2 v    &nLabel );//创建数据源子键
5 }* e7 T* N) U0 b, ~( G* o6 Y1 S+ x1 M, Q: }1 `5 m5 z
RegSetValueEx(hKey,
9 v1 h4 b) ^- g( f, w& a      _T("DBQ"),. p/ X: `4 F# r& J! Y3 G" [7 i
     0,
* g9 ?7 T7 L, ?! i- T      REG_SZ,
2 _+ j0 p' O: s; n' {: `7 X! D      (const unsigned char *)((LPCTSTR)strDBPath),
  r7 [1 V8 N/ F: H/ Y, ?) K/ |/ T      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径4 k; ~, e" m- N% Q
: E8 @% U$ T( l( ]! N3 F+ A3 Q
  RegSetValueEx(hKey,% \! ^- Z( U8 M
           _T("Driver"),5 m7 ~! S! M  k: c
     0,
+ \) L; j& g4 Y* U$ X      REG_SZ,$ R7 @! ^$ u9 Q1 O. a9 ~( ]% x8 b
     (const unsigned char *)((LPCTSTR)strDBDriver),
4 r  {+ }/ T4 C  p4 V5 P      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径$ U' ^2 w" X  m7 }

$ C0 i: l9 J; m; C8 p1 c RegSetValueEx(hKey,
, ~; G8 U# r, `3 T6 g  o: p7 w& ?( F      _T("FIL"),7 R  E. H0 N' K$ j# w# [
     0,
7 t0 o+ N2 z! q5 ?      REG_SZ,
& t3 }2 {! v. D      (const unsigned char *)((LPCTSTR)strFIL),
+ S3 t2 T! u0 U) j- J4 v" m3 w      strlen((LPCTSTR)strFIL)+1);//表的类型2 t$ {& p  z2 x9 i

7 }7 x, C0 C8 A4 O8 }( v0 M0 _# H; R RegSetValueEx(hKey,, v- f5 `! K& u$ n! W9 c
     _T("UID"),/ w% z! Z9 K/ ^7 H+ x6 |: j7 m
     0,
- n! G( ?5 Q; f% ^* r* O" m      REG_SZ,. V8 J, J& H* E: r" i) Z1 O
     (const unsigned char *)((LPCTSTR)strUID),
+ ?0 x1 Y3 i7 y7 c2 Z; J      strlen((LPCTSTR)strUID)+1);//必须项: Z& L0 `" s) Q

( g0 B, i" R" g7 l1 I
& f8 ^8 r9 u; E9 H* y9 ]& [ DWORD DriverId = (DWORD)25;
' a6 p1 o8 \4 Y3 h9 {8 L RegSetValueEx(hKey,
" u# ^/ c  Q: t4 o' u     _T("DriverId"),4 Q) l0 N! o9 s' w! T
    0,4 n) b' E' K0 c" v3 G9 B6 E
    REG_DWORD,. Z& H6 H: _  b
    (const BYTE *)(&DriverId),
' u5 I( A8 b/ ^  \4 k7 S( d: `; ^     sizeof(DWORD));//必须项2 l- k5 x$ j* A7 U, ?
- ?: @3 [2 v. P
: N) p0 ?9 W: Y% C3 h7 C1 u' {+ |/ r+ I
DWORD SafeTrans = (DWORD)0;2 p3 a% t7 S+ Z( l6 S& b
RegSetValueEx(hKey,
9 N& Y4 Z0 o  B8 K1 ?1 H( N' u, _      _T("SafeTransactions"),7 q, c$ ?$ j) _% Y
     0,
2 T. A. I3 [. z- f) {      REG_DWORD,
1 y5 z$ J: B7 t* w1 p# s      (const BYTE *)(&SafeTrans),
) M' U2 P0 d3 z' b& v      sizeof(DWORD));//可选项) ?6 ^) J: ~. p: y& p
}
$ P5 A* W. n6 X, R: t" p
6 |3 Y# ?3 E% S: i2 U' i# X % Y5 _! R% S! D4 Q) s0 b" ^

1 y) A9 d1 @8 }3 B3 }% ]7 I调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 22:34 , Processed in 0.018947 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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