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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:' T/ }. G0 R: U2 w; H/ |0 z

# g2 _/ J* Y0 P+ U) K4 qvoid RegisterDBSource(CString strDSName, CString strDBPath); o5 W4 X# r6 j0 E' p
{5 [8 L& f0 r) @# a4 [# w; A
HKEY hKey;/ v7 r1 _& C, [# l# T) x
   DWORD nLabel; 7 z+ w+ D6 d- l* o8 z* s( T0 J

5 A1 B! C( B: n& Z. I" Y, ?+ W CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");4 i  A2 g& m4 B% W* d7 [- H
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;! e0 M1 B0 u" _7 D
! W+ [* I1 ?. X  p, E, G
if(strDSName.IsEmpty()) return;
+ J/ J; E7 `  z" K, n  D( G' o if(strDBPath.IsEmpty()) return;4 c! ], C, {" t  ~7 G& D

1 c7 i1 Y+ z! b  H CString strDataSource = strBaseKey + _T("\\") + strDSName;& u/ Q$ f) h7 L  I4 y$ s1 u( Y

7 j. d* t/ ~9 K CString strMdb = _T("Microsoft Access Driver (*.mdb)");
5 q# C. i4 C1 E8 J5 r CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
3 }; i; U" p% D" ~ CString strFIL = _T("Ms Access;");
9 d9 v$ x9 m3 k1 w! N CString strUID = _T("");: C% L: H- r0 j" B- p" h4 y' A

+ G9 Z. W* F, u
* S( x& W9 S$ S
; d3 |, N9 f1 Z1 F2 w' V/ G% M RegCreateKeyEx(HKEY_CURRENT_USER,, E, m* o0 @/ O9 e" C+ w0 g
             strMid,# O+ R' i8 S7 o4 Q7 a& D9 F' P2 B
       0, # U6 O$ K! ]/ ^" d) Y. `% J1 E. p
    NULL, $ I1 j0 |3 R' N& E" e9 C% v$ _) V
    REG_OPTION_NON_VOLATILE, / J; Q% L* g8 K% M# r) `9 k6 @0 V
    KEY_ALL_ACCESS,
$ i7 l% ?0 o- F; t8 i2 h+ Y% Q     NULL,
# y$ I4 T7 u4 v% t5 T- L, |( }     &hKey,
# C4 u. O3 t7 Z2 x- r     &nLabel );//获取数据源键值句柄3 w" P0 h# h' ^2 x5 q* t

& p# E3 s, M- G4 o; ^ RegSetValueEx(hKey,
  b9 I+ w7 I  t      strDSName,1 P7 D, u/ D+ Y! s0 L9 `
     0,
' m  _* p( [$ n- q( E% A      REG_SZ,
& V! n  k7 |6 |# A% x      (const unsigned char *)((LPCTSTR)strMdb),! X# t9 p- V* c, @7 C/ ^
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型- a% N- v+ ]. w1 B+ f; a: ?

4 @" X0 l$ D/ s, X/ x8 L RegCreateKeyEx(HKEY_CURRENT_USER,
" K* R" V  E( Z9 w5 T          strDataSource,4 R4 ^$ Z. s0 Y" `3 O$ T* q
   0, ; C. `! t  F( G5 j- [; ^
   NULL, 7 Z4 s" D  G5 _. s0 t3 o# {
   REG_OPTION_NON_VOLATILE, : a% G8 F4 T/ o( ~  L
   KEY_ALL_ACCESS,
- u5 b5 U. t& X' `+ a    NULL,
4 ]' D) x0 d1 ^; W% U4 l6 }! ^, p$ f    &hKey,
! |- J, X1 Z* j5 |; ?' e    &nLabel );//创建数据源子键
4 X% x- |) @, f+ ?0 L0 s4 H! _' ~6 d
RegSetValueEx(hKey,5 I: \" \8 c: \0 |4 T# D
     _T("DBQ"),1 C% ]. A, z* q* y. i
     0,( B% Y3 i, N7 _! @$ Q
     REG_SZ,
8 B% T: C, A- M* X( \% Y5 o: E/ c      (const unsigned char *)((LPCTSTR)strDBPath),
9 R9 r  W, k) A4 o' h6 p      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径9 O0 C, g. N7 Z. e

, F1 a  v0 q, D+ t% A6 Z  RegSetValueEx(hKey,
# e& x) _( H* V  v9 C1 Z: x            _T("Driver"),& Z2 Q6 }1 T3 e4 `6 T7 ?3 v
     0,6 N8 Z3 F7 x0 {2 Z5 C$ l
     REG_SZ,
+ S  H/ w  @& a1 ?      (const unsigned char *)((LPCTSTR)strDBDriver),
1 r) [6 J2 D  v0 v2 Q4 K      strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径
8 L2 Y( ]# d- I! {* s! p0 j2 ]( v6 X: n* f& i+ o
RegSetValueEx(hKey,0 K% M5 h+ B6 p+ J+ `
     _T("FIL"),
! m/ t& o! ^9 H! t$ H3 B0 v) J' l) @      0,( v- [1 K" t# s& f# m6 ~- n0 R" P7 k
     REG_SZ,
5 I4 a' @/ D) v: N/ \9 `      (const unsigned char *)((LPCTSTR)strFIL),
: B/ U  v: K4 M# d0 @) o. f      strlen((LPCTSTR)strFIL)+1);//表的类型
3 s4 Z# M  O2 |! ~7 Y0 a+ ^2 Q
5 t3 h& ?0 C8 Z9 f) ^ RegSetValueEx(hKey,
$ U2 Q0 Y& [' ]      _T("UID"),
) X: X: x5 ^$ M6 A      0,
: ^. ?' l% P6 [# M; ~3 ?! ?5 n- x" D      REG_SZ,( T' e: A& z$ `
     (const unsigned char *)((LPCTSTR)strUID),
# n8 B+ U6 i. ]# s2 s# \7 A      strlen((LPCTSTR)strUID)+1);//必须项
( a0 s( S6 A" n$ Z) \! y3 M9 Z2 z: t* y& K0 J# S! e
+ |% M& l4 _) v3 w. [9 x
DWORD DriverId = (DWORD)25;0 e; M8 {' s1 m8 K2 W0 c
RegSetValueEx(hKey,
9 F% x, P, H8 G  {( v4 k7 W) U     _T("DriverId"),& ?3 X: N; }' {2 Z; u; _# F
    0,; }- P% E9 I1 p
    REG_DWORD,
( [: X- _  G* _( I     (const BYTE *)(&DriverId),/ @, f! V# k5 Q$ d
    sizeof(DWORD));//必须项) u! T) U/ n; y# e9 n
2 t+ b% I& G/ B& Z2 [
8 \% @7 R% f7 o
DWORD SafeTrans = (DWORD)0;
; T3 F& l, w  v0 s5 ~  ^ RegSetValueEx(hKey," A; b( d& F) v6 W2 ~% B4 o" @
     _T("SafeTransactions"),
  \+ Q0 P! c! X" t; O# |4 k2 N      0,  P. U& O& d3 ~( o( a
     REG_DWORD,
% e# @# ^! e" K6 w- x      (const BYTE *)(&SafeTrans),: s7 F0 }) G* }: I
     sizeof(DWORD));//可选项
# |) e% u; ~1 z/ M  T  J}( h) `6 b1 E. m

+ a3 d( Y5 r- x7 G* k% ? " P, w3 S/ F) Q* Y+ e" g' ?8 I
+ R9 s) f, F3 i2 t  q+ I
调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 08:05 , Processed in 0.017555 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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