第
卷 第
8%
期
88
电 脑 开 发 与 应 用
总
7
’’%;
&8%&
在
!"
程 序 中 自 动 配 置
#$"%
数 据 源 的 方 法
&’’()*+,)-&./)0*/1+#$"%$*/*2).(+3%)4-15.(*/1)414!"6()5(*0
高晓兴 易秀双
东北大学 沈阳
7
88999:;
摘 要
<
=
简 要 介 绍 了 微 软
>?@A
数 据 库 访 问 接 口 和 利 用
语 言 在 软 件 设 计 中 通 过
B@
C?>
数 据 访 问 对 象
D
数据访问对象及
系统注册表操作技术
实现程序自动注册用户
数据源的方法
E?>
据管理软件安装过程中通过手动依次配置系统
FGHIJKL
M
数据源的问题
M
统注册表中建立自己的用户信息键与键值的设置与读取作了实例讲解
>?@A
N
同时也就在
程序中如何在
>?@A
B@
解决了在数
M
FGHIJKL
系
关键词
<
=
开放数据库
数据库互连
数据源
M
M
访问引擎
M
注册表
M
&"2OP&%O QRSTUTSVLGWTXYGHZVJI[\SLZRSU\\SLLGHZSV]U\SJ]^G\VJLJ]Z>?@AIUZU_ULSMUHIU[ZJWUZG\TVJ‘VUW VS‘GLZSVUZGJHJ]
[LSVaL>?@AIUZULJ[V\SMKRG\RGLVSUXGbSIZRVJ[‘RC?> IUZUU\\SLLJ_cS\ZMd?> IUZUU\\SLLJ_cS\ZUHIKGHIJKLLYLZSW XJ‘ JH
ZU_XSZS\RHGe[SGH LJ]ZKUVSISLG‘H KGZR B@ XUH‘[U‘SMKRG\R LJXfSLZRSTVJ_XSW J]LSZZGH‘ [T LYLZSW >?@A IUZULJ[V\SGH
\JHLSe[SH\SWU[UXXYI[VGH‘ZRSGHLZUXXUZGJHTVJ\SLLJ]IUZUWUHU‘SWSHZLJ]ZKUVSLg^SUHKRGXSMZRSUVZG\XSGHZSVTVSZLRJK ZJLSZ[T
ZRS[LSVGH]JVWUZGJHhSYGHFGHIJKLLYLZSW XJ‘ JHZU_XSUHILSZ[TUHIVSUIJ]hSYfUX[Sg
ijkl#P$2 >?@MIUZU_ULS\JHHS\ZGfGZYMIUZULJ[V\SMU\\SLLSH‘GHSMXJ‘ JHZU_XS
又称开放数
这个 方 法 主 要 有 如 下 参 数
表 示 数
源的配置
M
据源的名字
并不是
>?@A
表示
DIVGfSV
>?@A
驱动程序动态连接库
uI_HUWS
驱动程序的名称
M
文件名
7?ss;
但它
例
N
是
并提供了一组对
M
如
函数
;
N
一个
MmrsmSVfSV
文 件 名
?ss
串包括数据库名
DUZZVG_[ZSL
是驱动程序名
而
M
mrsmEBEg?ss
表 示 数 据 源 的 属 性 集 合 字 符
数 据 源 描 述
D
数 据 库 服 务 器 等
D
它 是
M
一 个 要 添 加 到 系 统 注 册 表
主 键 下
ymdE
键下数据源的相关文件 中 的 关 键 字 及 值 的 列 表
M{m>|QFCEd}>?@A}>?@Agozo~
各 关
vwdx AyEEdzQ
子
键字是通过回车符来互相分割的
我们可以通过对下
N
?C> >?@A ?mz7;
数据源的自动配置
函数的参数说明如下
按对应的参数调用实现
面函数
>?@A
M
M
u
数据源
?LH HUWS
>?@A
?LH ?SL\VGTZGJH
?UZU@ULS HUWS
欲配置数据源的名字
欲配置数据源的描述信息
欲配置数据源的数据库名字
>?@A7>TSH?UZU_ULSAJHHS\ZGfGZY;
据库互连
是微软公司开放服务结构
7F>mCMFGHIJKL
中有关数据库的一个重要
>TSHmSVfG\SLCV\RGZS\Z[VS;
组成部分
它建立了一组数据访问规范
M
M
数据库访问的标准
应用程序编程接口
Cno7
基 于
的 应 用 程 序 对 数 据 库 的 操 作 不 依 赖 任 何
>?@A
?@^m7
对应
数据库管理系统
所有种类的数据库操作均由
;M
的
驱动程序完成
?@^m
>?@A
可见
N
M>?@A
的最
大优点是能以统一的方式处理所有的数据库
应用程序
N
通过
访问数据库变得简单直接
>?@A
一 般 的 情 况 下 用 户 可 以 通 过
N
提供的
FGHIJKLHZ
应用程序运行在少量计算机中通过手工配置
>?@A
管理器手动注册一个数据源
FGHIJKLpqD
当
M
还可以接受
而在应用程序需要安装在大量的计算机中
M
数据源的配置和维护就很困难了
笔者在用
>?@A
数据管理系统的过程中总结了几种应用程序自动配置
B@
N
开发
>?@A
序通过
数据源的方法供大家参考
下列方法均以
应用程
数据源访问
>?@A
mrsmSVfSV
N
B@
数据库为例
N
t
通过
数据源
?C>
数据库引擎配置
>?@A
通过
提供的
B@
?C>
数据访问引擎
利用注册数
M
7ES‘GLZSV?UZU_ULS;
的 方 法 可 以 实 现
数 据
>?@A
据 库
!
!!
mrsmSVfSV HUWS mrsmSVfSV
服务器的名字
?GLTXUY IGUXJ‘
不显示
显示
M|UXLS
;
是 否 屏 蔽
>?@A
配 置 对 话 框
7QV[S
n[_XG\|[H\ZGJH ?C> >?@A ?mz7?LH HUWSCL
mZVGH‘M?LH ?SL\VGTZGJH CL mZVGH‘M?UZU@ULS HUWS CL
mZVGH‘MmrsmSVfSV HUWS CL mZVGH‘M?GLTXUY IGUXJ‘ CL
@JJXSUH;
?GW >?@AES‘GLZSVCL?UZU_ULS
?GW >?@ACZZVG_[ZSLCLmZVGH‘
收到
M"999 9$ 9%
改回
"999 9# "9
高晓兴
男
M
M8p:$
年生
讲师
M
年毕业于东北工学院
M8pp9
从事计算机教学和计算机网络通信研究
M
N
总
d‘_d Q
cceR
在
程序中自动配置
P-
,!-.
数据源的方法
年
‘JJJ
!"# $%%&’’()*+%%’%
80.%6 $%%&’’(@!$*9%"(/"’7
,!-.)//%01/$*2 3!4/404*$2 56 !4/4-4*$ 74#$ 6
;$N/$%%&’’(
80.%63!$9%"(/"’7256 !*7 !$*9%"(/"’76 80.%
+7EGH
6 3,$#:’)7*"2 ;’56 80.%6 3<$%8$%2 56 <=&<$%8$%
A$*1#$;$N/
74#$
,7+%%’%>’:’+%% &’’(
!-+7?"7$@A$?"*/$%!4/404*$!*7 74#$B3<=& <$%8$%5B
!"*(C4D E"4C’?B,!-.)//%"01/$*
+%% &’’(F
GH!-+7?"7$@+%%’%*@.’17/IJ:K$7
记载在系统注册表的
L’%+49K$%%&’’(G7!-+7?"7$@+%%’%*
键下的
+7EL179/"’7
W
通过写系统注册表实现
源的自动配置
数据
,!-.
从以上两种方法可以清楚地看到
数据源是
B,!-.
XY+Z .[AA+;: [<+A
主
子键下的一
3<,L:\)A+],!-.],!-.@G;G5
个键及其键值
这样的
数据源是用户级数据源
B
,!-.
所以我们当然也可以通过在注册表中建立
S
数据源
,!-.
键值的方法来配置
数据源
这种方法比前两种方
,!-.
S
B
P-
法要复杂
但应用面宽
下面是在
中建立的一个模块
B
文件
模块中含有若干函数用于配
A+> ,!-.@-)
,!-. !<;QR
数据源其参数如下
F
数据源的名字
数据源的描述
驱动程序
Q@!&&R
的名字
为
<=&<$%8$%
访问数据库的用户的名字
<=&’:’+%% &’’(
%E’+7?"7$@%E’A$?"*/$%!4/4<’1%9$ !*7 74#$B3<=&
<$%8$%5B!"*(C4D E"4C’?B*/%)//%"0*
+N"/L179/"’7
+%% &’’(UV
错误处理
GH%E’+7?"7$@%E’+%%’%*@.’17/IJ:K$7
L’%+49K$%%&’’(G7%E’+7?"7$@%E’+%%’%*
M*?-’N3+%%’% 71#0$%F56 $%%&’’(@;1#0$% 6
第
卷 第
JP
期
JJ
电 脑 开 发 与 应 用
总
1
SSE<
gSPg
保存后退出
!
为了方便操作
编写完以上过程后
"
将
"
该过程对应的宏拖放到常用工具栏上
这两个按钮对应
!
上面编写的两个宏过程
在常用工具栏上出现一个界面
"
然后
在
"
#$%&’
中打开公文管理数据库
单操作条上新增一个按钮
嵌入公文
(
)!
!
在公文表
"
该按钮对应公式为
*
+,$--./012304%5$%$64&7089(:$0;)<9
+,$--./012304%=/’&>%?:@&A%8<
用这种方 法 实 现 修 改 跟 踪
使 用 时 具 体 按 照 以 下
"
步骤操作
*
打 开
B
板新建文件
经 写 好 了
点 击
新 建 公 文
C$>0DE"
象平时一样编辑文件
(
按 钮 自 动 以 模
)
直到你认为文件已
"
该 带 上 修 改 跟 踪 格 式 的 时 候
"
"
这个按钮来达到这个目的
"
就 可 以 使 用
如果文件
!
或者认为日后还需修改
那么你就不要使用
转为痕迹跟踪
(
没有写完
)
"
这个操作
先使用
"
保存
(
)
"
操作就行了
!
当 你 使 用 带 修 改 跟 踪 模 板 写 好 文 件 后
F
切换到办公自动化系统中来
在起草公文时
就 可 以
"
光标进入
公文内容对应的域后
点击
按 钮
出 现 如 图
"
再点 选
G
浏览
)"
(
写好的文件后
按
"
(
"
图 形
按 钮
)
确定
"
即可
)
!
嵌入公文
"
的按钮
(
点选该
)
从 文 件 中 创 建 对
"
选 第 二 项
!
(
找到 你 利 用 带 痕 迹 跟 踪 模 板
此时将返回起草公文界
!
你看 到 的公 文内 容域 出 现 了 你 刚 才 嵌 入 的 公 文 内
"
这样操作之后
!
公文内容将和公文稿纸结合在一起
"
当你 需 要修 改 公 文 内 容 时
在 公 文 内 容 处 双 击 即
"
!
编辑环境和在
中一样
在公文内容外任何一
"
处 单击
"
即可退 出 公 文 内 容 的 编 辑
C$>0
"
公 文 开 始 流 转 之
!
起草 人 利用 带修 改跟 踪 模 板 写 好 的 文 件 就 不 再 需
象
面
容
了
可
后
"
要了
而且也并不影响公文的正常流转
"
从而就保证了
"
公文流转的安全性
!
两种方法的比较
H
在 办 公 自 动 化 系 统 中
使 用 以 上 两 种 解 决 方 法 实
"
图
G
点击
嵌入公文
(
按钮出现图形
)
保存一个文档
而且需要 对 照 原 文 档 才 能 找 出 修 改 痕
9
迹
第二种方法能很清晰的看出修改痕迹
!
浏览修改信
"
息 很 方 便
但 是 实 现 起 来 比 较 麻 烦
"
需 要 在
"
之间切换
发文之前的工作比较繁琐
#$%&’
实现过程中需要根据具 体 情 况 具 体 分 析
"
!
C$>0
因此
和
在
"
选 择 一 种 比
"
较适合自身情况的方法
!
I
趋势
能后
结束语
办公自动 化 是 提 高 办 公 效 率
规 范 化 管 理 的 必 然
"
办公自动化系统中 加 入 能 够 记 录 修 改 跟 踪 的 功
"
使得办公自动化系统的实施更加容易进行
"
性更进一步得到保证
系统中再加上使用手写笔
"
安全
"
那么
"
利用电脑实现无纸办公 的 过 程 就 更 加 接 近 手 工 操 作
"
其安全性和易用性必将对办公自动化系统的顺利推广
起到极大的作用
上述的方法
!
已在我院校园网环境下
"
办公自动化系统中应用
!
参 考 文 献
莲 花 软 件
中 国
1
有 限 公 司
<
子工业出版社
全书
"JDDE*
KL$%M’#$%&’
深 层 解 析
北 京
K
电
*
北 京 义 驰 美 迪 技 术 开 发 有 限 公 司
KL$%M’#$%&’
技 术 丛 书
K
北京
*
刘红岩
中国水利水电出版社
"JDDE*ENONG
何军
"
群件系统
K
L$%M’#$%&’Q
原理与指南
北京
K
清
*
J
G
P
刘文智
曹亮
"
Q
K
T4A>$’$U%C$>0DE
中文版
北京
K
清
*
"JDDE*QROSR
深入使用
华大学出版社
全书
"JDDE*
现记录修改痕迹各有利弊
!
第一种方法实现起来比较
华大学出版社
简单易行
只需修改表单的属性即可
"
但是这样的结果
"
是需要保存大量公文的修改副本
它要为每人的修改
"
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
数 据 源 的 键 值 来 改 变 以 上 函 数 的 参
中 的 相 关
上接第
页
1
PG
<
?]^,
W>4X.%&YM:,$--./0P ,74AZ1<
通过写注册表的方法
=>&’M7%[\35 ?]^, ]Y#1(T]Y#)"(
管理信息数据源
)"
数即可实现
!
参 考 文 献
(-./._&)"(Y‘LY\aPGK]LL)"(_bb)"(50&XRR)"(;&’)<
张 军
赵 中 海 译
"
J
KT4A>$’$U%C4/PG
程 序 员 参 考 大 全
北 京
K
*
3/0YM:
以 上 函 数 及 程 序 均 在
过
执行结果可以通 过控 制面板中的
"
注 册 表 管 理 程 序
\353]=eK3f3
?]^,
配 置 其 他 数 据 库 类 型 的
数 据 源 可 以 按 注 册 表
a^SKRca^dKR
?]^,
进 行 查 看
下 调 试 通
管理器或
如 果 想
!
清华大学出版社
"JDDd*PJJOPPR
骆 丽
韩 乐 译
"
金 版
K
G
社
"JDDN*QSPOSQR
a4’M.7^.’4ASKRK
北 京
电 子 工 业 出 版
*
胡 荣 根
P
Ka4’M.7^.’4AdKR
中 文 版 数 据 库 和
=/%&>/&%
编 程
北
K
京
清华大学出版社
*
"JDDD*JSJOJEE