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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
+ x' u6 I! p; s; @0 t9 `0 o" b& o+ s/ i( y' l) _
void RegisterDBSource(CString strDSName, CString strDBPath)
8 `! b7 k# N9 G( V  D% J{
  c. Z9 c8 C, ^& I% _9 H7 V HKEY hKey;2 q2 g( T/ j5 V# }+ M; X
   DWORD nLabel; : C7 M, S$ E% O6 M

9 ?+ c0 o0 C0 x5 f7 I- N& Z+ R CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");
# i% Y4 f4 Z. x; C2 e CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;5 L) N& f" W: t

5 d( H3 a# V) s; ^, C  e6 }" ~8 h. L* s% [9 O if(strDSName.IsEmpty()) return;
; Y% p  L! J( Z0 W, G5 I if(strDBPath.IsEmpty()) return;6 p3 t) s6 D) a# B- S* E
) u0 O8 w" P) Y- ?4 D
CString strDataSource = strBaseKey + _T("\\") + strDSName;. x3 X# m- g1 v: B2 ~( e8 G& R

8 |( m1 E2 H& j' V) m CString strMdb = _T("Microsoft Access Driver (*.mdb)");( x9 Y) ^. c! |
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
/ \3 R+ w' k. P8 G/ g+ t CString strFIL = _T("Ms Access;");
1 ^+ J. W( ^( U% b1 b( i CString strUID = _T("");
+ _. D- D! U/ U0 I8 \' @7 D9 O
+ c+ {0 j% g% K6 d, V 4 |8 i6 b* v: _
. R0 b+ Z, W, x' ~* V
RegCreateKeyEx(HKEY_CURRENT_USER,
7 B% k3 ~& v( K; r( Q7 I              strMid,
, J& G6 r' U$ N$ g& W# L        0,
/ |( {- W; q4 x     NULL,   m5 [* @0 e% K) \9 N: n" b/ M
    REG_OPTION_NON_VOLATILE, 1 K4 W. J7 A3 R9 O& D" Q
    KEY_ALL_ACCESS,
& Q" U5 R" y/ L( N! s* O- h     NULL,
  d! }5 z& K3 D  z& k     &hKey, 5 k. h+ [$ o7 M* F( [" z
    &nLabel );//获取数据源键值句柄" L. T! |+ @4 x- e" d( p
9 k, C; m0 v2 G( M. n9 M* o
RegSetValueEx(hKey,
8 f& y  P/ t; L, ?      strDSName,
& `6 b- W; ?0 U6 U% [& B0 }2 L      0,
- x! M: l/ f# a      REG_SZ,
: G5 Y0 J) K+ g1 l      (const unsigned char *)((LPCTSTR)strMdb),6 g0 C9 o* W8 D1 e
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型
7 j7 e3 B$ _+ a0 O$ l2 J6 }; v2 s" G
RegCreateKeyEx(HKEY_CURRENT_USER,
: {8 l5 T$ r5 S7 }1 B6 G# _4 o0 ?          strDataSource,# `3 L+ I; T7 W
   0,
, i, w) t8 W& _- }* `    NULL, ) ?: a1 P3 e6 A' }
   REG_OPTION_NON_VOLATILE,
; k8 d$ O& O4 J    KEY_ALL_ACCESS,
1 U) |2 w2 z3 Z+ B+ [; }9 `, B    NULL,
( l& u' c) q5 T: K6 ^3 b    &hKey, 6 v0 y4 r- o& {5 W/ ~5 f1 A
   &nLabel );//创建数据源子键
) D4 O9 u) `8 r+ c* [' |* f* X3 T: c! l% d  C
RegSetValueEx(hKey,
+ F5 }# m, n  p" X- {8 c% }      _T("DBQ"),/ q! m# e! _) I; u
     0,
! [! o! C" F6 w6 o& u      REG_SZ,
0 p2 m* n. p5 U* `' V( W9 P* l      (const unsigned char *)((LPCTSTR)strDBPath),
( d3 I7 h  U- O2 l! z- h      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径. ^- F& p/ j) n+ |( S0 h0 Z
  `- t  b4 @5 k/ O7 z
  RegSetValueEx(hKey,# h+ Q0 V$ Z! N0 n
           _T("Driver"),
4 D3 z3 L1 D6 j- T4 `      0,
" @- E' t% T9 y9 F      REG_SZ,0 |2 y! _# B$ s# n$ k
     (const unsigned char *)((LPCTSTR)strDBDriver),
* _8 g4 W( E; {/ C! s9 g# ?1 {% M      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径" r0 N, {$ x6 M/ l

5 _' m) g9 u! ?5 v" s RegSetValueEx(hKey,4 }9 x6 C0 @7 L/ I5 m  l" d+ @) x, u
     _T("FIL"),. l2 g8 t% y6 v4 S
     0,
& S% I$ K. R0 n$ g1 H2 Z. G. A      REG_SZ,+ A9 n# V! `: K) n3 @$ o5 U
     (const unsigned char *)((LPCTSTR)strFIL),5 m9 ]+ G3 j0 [' L  R% G: [2 J
     strlen((LPCTSTR)strFIL)+1);//表的类型
% E9 p3 [3 V8 z% ~2 v. k
( g# w- S( n* R' j  v RegSetValueEx(hKey,3 T9 i- D: v& U
     _T("UID"),( w4 J9 _& D& `
     0,/ z' H2 N) V" F% X2 m
     REG_SZ,
3 q) N# N7 n% q0 o% h7 n      (const unsigned char *)((LPCTSTR)strUID),, p$ W8 S7 P3 A" w* }6 z1 M0 D; D
     strlen((LPCTSTR)strUID)+1);//必须项
- g% P- {* T) R; O0 r, p2 y! E: s. I: q- {. J( k' n' E) W
* |: g4 v: e- {' V* o) q; y
DWORD DriverId = (DWORD)25;
2 f( F; i! }4 n9 X' Z RegSetValueEx(hKey,8 m5 c3 z  C; }( G( d% s
    _T("DriverId"),
1 T" l. l8 a: f/ u     0,
4 Y( L8 x" s4 {# [' @     REG_DWORD,
2 h1 s! `5 z' e% Z+ d     (const BYTE *)(&DriverId),
$ X+ w* h/ g' j0 l3 w9 U. Q     sizeof(DWORD));//必须项! _# c: c: u6 l! x+ z# S, V
  P6 t' b# Q. i" [) ?5 j  R* X; U
1 T# u6 d; M; _
DWORD SafeTrans = (DWORD)0;5 R4 i# k9 z2 Z9 k$ L9 \0 }
RegSetValueEx(hKey,  t; g( X' s7 E8 v! \. P, U1 a
     _T("SafeTransactions"),
$ p4 f- o: U/ T      0,
/ V6 {' w& O6 z" S2 A      REG_DWORD,7 M7 Y1 N. L0 B
     (const BYTE *)(&SafeTrans),
  V3 a2 r4 ]8 d+ N9 n' u      sizeof(DWORD));//可选项
4 ?8 K+ b4 V, j  D3 N- g4 f. `}
& H7 K2 A" T( t9 x3 s$ x( D9 R
; C, B) I4 W# b. l5 l ' N/ I- X- E* J8 R# h0 L( k

3 N1 N4 g* Q6 W, ?9 E调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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