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

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

[复制链接]
发表于 2005-8-5 18:40:22 | 显示全部楼层 |阅读模式
  主要代码如下:
3 Q" m. C8 U* }+ E! w+ l  S, ]- q/ c) z. z0 `2 N
void RegisterDBSource(CString strDSName, CString strDBPath)* U* B/ M& M9 U% f2 b  @9 w
{
. w7 y, h1 d* E: t  P, m HKEY hKey;1 N. r9 ]( V0 P/ ]8 t3 r
   DWORD nLabel; $ C: X# j, V, \9 S. _* [) {

" k+ @1 q" i& g) Q CString strBaseKey = _T("SOFTWARE\\ODBC\\ODBC.INI");9 i5 j. h+ G1 P' ]4 e/ Y
CString strMid = strBaseKey + _T("\\ODBC Data Sources") ;
! n- D4 c7 p2 w3 x8 d( x+ K. x- I0 E' ^3 p3 y5 ^
if(strDSName.IsEmpty()) return;
% T# T6 n2 {- F: O% O8 i& b" X- E if(strDBPath.IsEmpty()) return;
. C! s( q" m7 F1 e& h
$ O# N7 b9 e$ q9 J$ l) K( Q* T3 P CString strDataSource = strBaseKey + _T("\\") + strDSName;* v' m' k& x( w6 F8 |, E& E

. v$ v# b3 ?0 s# f  f" g  o CString strMdb = _T("Microsoft Access Driver (*.mdb)");& K) n+ M' `4 _$ H6 e
CString strDBDriver = _T("C:\\WINNT\\System32\\odbcjt32.dll");
# l  @0 q5 y; e5 ?4 F" D- D CString strFIL = _T("Ms Access;");
# h$ M1 P6 a# J3 w1 W CString strUID = _T("");
  i$ s( @: @) y8 C( |# P
% O, O3 J9 q9 e! `
0 Z) }; z/ A' a6 P8 b% v
. E+ t' u% N+ l1 X: I RegCreateKeyEx(HKEY_CURRENT_USER,
1 E  k" s# m6 A! P              strMid,
  A* y0 e& ?; u# ^& {- U) J        0,
: `- E% O  B0 _" l     NULL, : G! c! f% q6 a* n$ h) c
    REG_OPTION_NON_VOLATILE, 6 ?0 @; B" y2 V; ]* u5 q
    KEY_ALL_ACCESS,7 _. C; Q5 |" j4 h7 O) g3 [( B
    NULL,
9 x8 [" Y  ~  k     &hKey,
0 h- z5 M% X2 Q     &nLabel );//获取数据源键值句柄
$ A/ W) p$ [% v3 W9 g* u$ s* T
; N2 ]# t# k: Y7 p( m) f% A RegSetValueEx(hKey," A5 f3 N; J* r( _9 B! k% |9 |( t: m
     strDSName,' `1 c$ d& ~' O+ w, ^8 i6 @& C. @
     0,
) \* A0 L, |4 M8 s( u      REG_SZ,4 H2 O) I8 v7 N
     (const unsigned char *)((LPCTSTR)strMdb),4 ^# K2 |# Y; p
     strlen((LPCTSTR)strMdb)+1);///设置数据源类型- b0 W* W" @% P4 K- E; G
. W% n0 K4 }7 ^* _7 l0 O4 ?) b) y+ I, U. v
RegCreateKeyEx(HKEY_CURRENT_USER,+ V/ w7 \. J( M8 b( G$ V) ^+ Y
         strDataSource,
# G2 H& U9 t9 }9 C2 o! p    0,
* y% q8 p5 X$ Y2 V$ F( K4 S3 q" J8 j0 p    NULL,
5 z  Z9 x3 E9 o6 w    REG_OPTION_NON_VOLATILE,
& q8 ~+ _# E' {/ Q" p' O) a    KEY_ALL_ACCESS,! z  W( I  k6 [; a6 I
   NULL,: X* ?9 Q0 p$ A- Q7 c' a, S
   &hKey,
) I7 Q* D+ P* g$ f8 f8 @; \    &nLabel );//创建数据源子键; Q2 h; S  p: D

- R0 z- M/ n. r. S; [8 Q1 _ RegSetValueEx(hKey,* ~+ r% s* X3 D+ O0 z/ ?7 P. }
     _T("DBQ"),  r7 G0 T2 H8 b0 K! j
     0,
! T- ~/ k& F( ~& k2 a8 B$ B      REG_SZ,# e2 m, {4 V: k) B
     (const unsigned char *)((LPCTSTR)strDBPath),
2 n0 Y: a: _5 G" Q6 d+ ]      strlen((LPCTSTR)strDBPath)+1);//数据库表的全路径
4 \; G6 ~: V/ S+ ]2 q# ]: @; N- m* O; v1 l4 l  g; I5 y# h0 \1 u
  RegSetValueEx(hKey,2 k9 O; W2 z2 c  _: R) j4 B
           _T("Driver"),8 H0 e. V3 ]" _, Y) S
     0,
+ b8 r4 @: U' c" g+ G, @0 V# Y      REG_SZ,
6 D# i8 @* X0 l      (const unsigned char *)((LPCTSTR)strDBDriver),. Q  n* P/ `! y7 R- A8 L3 M" w
     strlen((LPCTSTR)strDBDriver)+1);//ODBC驱动的全路径1 X, j. H. i9 F2 b- m- b% p  C

; x& x9 }; c* f& d: Q2 d RegSetValueEx(hKey,
5 D; m0 V7 x% G      _T("FIL"),: X+ [8 j# d3 P% B
     0,% S- i) ^+ c: v3 d; K
     REG_SZ,
; r; H- P2 V+ R2 g4 y- a      (const unsigned char *)((LPCTSTR)strFIL),
# V2 w9 C, b+ [      strlen((LPCTSTR)strFIL)+1);//表的类型
) Z9 g3 w9 B+ }% M
. ], R# Z, E1 O3 g4 J$ u RegSetValueEx(hKey,0 x) p" f8 ?1 i& z! e3 j5 C
     _T("UID"),
6 D0 A. R* f/ _& O' n! S4 {      0,
( d/ `+ B9 S+ X* E8 [1 i9 e# P; U      REG_SZ," W9 z# a/ J1 i7 Z
     (const unsigned char *)((LPCTSTR)strUID),
  w% E" F% @' [; P5 p+ l/ A      strlen((LPCTSTR)strUID)+1);//必须项
1 g  Z% Q2 ]% }4 B% B3 j+ X0 F
9 {. {& @3 p8 q* \5 M
! E, m% Q; V1 [5 }  @ DWORD DriverId = (DWORD)25;
2 _8 r0 w+ n+ G3 Q6 m7 C" M RegSetValueEx(hKey,7 b6 i7 q6 H/ S4 ?) z$ E) k% A
    _T("DriverId"),
6 r# z1 u8 h6 y, _8 b* W2 N' ~     0,5 U* Z+ \+ m5 H
    REG_DWORD,' r" i6 S+ b' C1 P  }
    (const BYTE *)(&DriverId),
& k# ~4 g$ B& z& N5 D     sizeof(DWORD));//必须项
; g  ]5 H" ~3 [3 V
: O2 v1 j; [6 [; Y* v4 H% k
5 b! [8 T# l. \. c! A0 O DWORD SafeTrans = (DWORD)0;' {- M$ v9 @) |& X( |
RegSetValueEx(hKey,9 ?' v) f6 e" x% e; F5 y
     _T("SafeTransactions"),3 U  j7 \0 E1 J! `. K  D: U
     0,/ P, ?! ]9 B* A2 i3 {
     REG_DWORD,! R: E. [1 Z7 H
     (const BYTE *)(&SafeTrans),
0 h0 h6 i' E7 P+ {; V$ {% v1 w      sizeof(DWORD));//可选项
2 ^# z5 m' f- C. u- x}! b; Q2 L; O2 c; _* U

& P2 x  b1 m  o1 i( S4 w% v 6 L3 i+ z, M. b' T

3 W7 e! Y% C, B- W! v; Y调试环境:WINDOWS2000 + VC6.0 + VSP5.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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