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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:) y7 }' D2 I3 _! F: @; v

9 a( S' \0 {" Y  p" }void RegisterDBSource(CString strDSName, CString strDBPath)  \' b! m% w0 ^3 ^/ s/ i, ]* b
{
& x& o) g' c3 u9 B9 B; W# p HKEY hKey;) J$ X( X3 O/ u, q4 C& K
   DWORD nLabel;
! \4 e0 g% l! M% x& ~  q# ?) k0 v. j+ |4 S5 T
CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");; d6 h8 W7 [+ B0 J0 r
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;$ b3 R6 t( [8 j

7 ?) `! F- L8 C8 o) s if(strDSName.IsEmpty()) return;0 F% c8 ]) B8 J
if(strDBPath.IsEmpty()) return;5 Q9 H+ P' a0 H

- z4 {! b7 R2 Y, }$ L! j- H3 ` CString strDataSource = strBaseKey + _T("\\") + strDSName;; V% H4 v  `  Z; T

8 x, f: d5 \" g  W( s CString strMdb = _T("Microsoft Access Driver (*.mdb)");7 h0 W9 h* p) K7 l% ]% @! d7 x
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");# o" q' ]( A3 S4 O
CString strFIL = _T("Ms Access;");
! s% t- Q5 t3 X! |( V  ]8 }2 y' B CString strUID = _T("");
6 U; E! `1 m: x- ?4 z- {: l
9 q+ w7 c- Z3 y6 @- C# x / ]* Q5 p& `" D
! o+ ?4 v8 B$ h1 g
RegCreateKeyEx(HKEY_CURRENT_USER,
: F% z4 S8 v3 _              strMid,1 W3 k! x0 p+ y0 G% G
       0,
# p0 s& }  ?5 w  c( A) \     NULL,
+ B" r/ Z! ~: L3 ]: I0 @; o/ ?) Z     REG_OPTION_NON_VOLATILE, / _# f2 M% d- d9 A) U
    KEY_ALL_ACCESS,9 i7 K& u  d! E
    NULL,
& G/ E& Y; [# V5 f" J# U* U+ V( q* D     &hKey, : E9 U# r; i" x
    &nLabel );//获取数据源键值句柄- ?7 Y3 T- W- ]5 [& {
# l# z$ p: f, T/ g
RegSetValueEx(hKey,$ _8 f2 O6 \4 p+ e, P
     strDSName,
8 z/ b' G' v8 S9 u1 h4 o4 O9 L/ S/ n( y      0,) N! l7 V7 z7 y. s
     REG_SZ,# o8 p0 q. K2 |. L& i: ?/ u9 v
     (const unsigned char *)((LPCTSTR)strMdb),
9 J% y. k( J1 _      strlen((LPCTSTR)strMdb)+1);///设置数据源类型* j+ O) S9 m4 q$ J' A2 ~* B

; l/ Q  I$ }5 Q8 r RegCreateKeyEx(HKEY_CURRENT_USER,. A- w6 J8 l6 u4 ~. M% D
         strDataSource,8 s) ?5 B3 ]! y, `, {- {
   0,
1 o+ O  i/ c8 o; A5 s    NULL,
# U6 j" k8 W* `    REG_OPTION_NON_VOLATILE,
5 A6 R: |% h$ U; t% L) v8 g# A5 w    KEY_ALL_ACCESS,9 J8 J! N. z8 H
   NULL,
! r( n5 ]: U% d/ k" S* q) w    &hKey, 4 Y/ D. l3 D0 E6 D3 ]3 |, o. o% J
   &nLabel );//创建数据源子键
+ I( d8 x6 l% ~% f) A! k! L  G! u# K2 l6 u' U7 q4 Q1 g; i
RegSetValueEx(hKey,6 {: Y* w7 W5 _( x* g
     _T("DBQ"),
% X5 ]) W2 Z8 t5 j; ~# J      0,  Y7 I7 E' b: \8 M9 L- M
     REG_SZ,. p, B/ F: N3 W3 K) y5 t
     (const unsigned char *)((LPCTSTR)strDBPath),
1 G3 V) q; j& i; P+ U" h# ?7 A      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径' v5 j8 j; n0 O# R6 \" Z
2 f1 k: M$ n% |3 Y4 E2 B5 d
  RegSetValueEx(hKey,8 k3 U- ]% b. s- ^7 B7 Z1 B3 g
           _T("Driver"),4 ~7 m( e5 X( P) V
     0,
! t* @9 P- y! Q0 v+ ~9 X      REG_SZ,$ ~7 [9 c* Q. f% i) [0 J2 R+ m. A* q9 n8 r
     (const unsigned char *)((LPCTSTR)strDBDriver),5 Y( b6 C; j7 y. c) k
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径( n' u/ ?; Z7 B
6 t+ }7 k. d; [3 L+ y" U. ?$ C  T
RegSetValueEx(hKey,! m* p4 X& u/ X1 U
     _T("FIL"),
, F! R+ M5 _* C) {      0,. d. ]1 y9 X5 \! o0 m9 m0 S
     REG_SZ,% l2 m- Y! R! \. }$ G2 v' K8 l
     (const unsigned char *)((LPCTSTR)strFIL),- v$ |6 O$ C+ G3 m! t, J2 x
     strlen((LPCTSTR)strFIL)+1);//表的类型; g& P& g) J5 R7 s

# ]3 r5 B5 k  z! k/ e- @& o5 L RegSetValueEx(hKey,
* x) \8 t# [3 c. `' h; e& l/ ]      _T("UID"),  |- S7 @) E2 S/ m& Q) z' i; x
     0,
6 z" F8 R* F' s0 W1 M  H" G      REG_SZ,) v" ^, R# k, F" x
     (const unsigned char *)((LPCTSTR)strUID),; ^- {  O& Y5 b" A2 V
     strlen((LPCTSTR)strUID)+1);//必须项
1 `% Y/ Q" }- q
& P6 z6 [' ^! Z3 U1 f' }
3 g4 c9 m0 r( Q DWORD DriverId = (DWORD)25;
1 U& `" f- \7 T* R1 y RegSetValueEx(hKey,+ l, g$ n. M. O4 g
    _T("DriverId"),
) U( s0 T( n7 f% h/ k  g' G     0,
. r4 ^$ \5 x/ o" E, n     REG_DWORD,% {9 U, C4 g4 G: s. Z: n
    (const BYTE *)(&DriverId),
% a6 `  ?- b0 K+ j) O- K     sizeof(DWORD));//必须项! h+ J" H4 N- \+ c* U4 |
, W5 @( C- L" p( U$ O/ M

/ ?3 Y% D# J; D. U( Q1 x8 ^* ? DWORD SafeTrans = (DWORD)0;
( ^  g: N; k7 k# S0 t9 } RegSetValueEx(hKey,
: y/ k0 j. y% n1 n- x  g4 c      _T("SafeTransactions"),
) k  Z3 U2 L" l3 n; R      0,2 f( B; Y" n: w' D
     REG_DWORD,
+ D& D1 X. l0 ^6 r/ ]2 X4 U* {      (const BYTE *)(&SafeTrans),
% Z; M9 n/ o- C. A9 G' W      sizeof(DWORD));//可选项; [; m9 K2 K0 s* D4 d) h
}$ E5 P1 W# H. ~3 O- G+ c3 A
) O- F4 t& ?. ?  C3 B

/ L  j: n# s7 I9 M( n
( c& o* Z" }& f, D; n- e调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 10:17 , Processed in 0.016385 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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