📄 数据库技巧3.txt
字号:
内容
1
在Visual Foxpro中操作WORD97对象。
2 用VFP管理WORD文档。
3 如何修复被破坏的数据表
4 使GRID表格中显示的记录内容更醒目
5 在VFP5.0中实现不定长文本的紧凑打印
6 VFP常见错误及处理方法
7 在VFP中控制EXCEL
1、在VFP中操作WORD对象
要把VFP与WORD结合使用,主要应用了OLE技术,众所周知,自从OLE技术推出以来,完全改变了软件世界的面貌,不需通过DDE技术,把可以方便地实现两个应用程序之间的通信。VFP提供了许多OLE对象的操作函数,而WORD97也支持OLE技术,通过相应的编程,用户可以在程序中激活OLE对象,并对其进行一系列的操作,例如在表单中可以通过插入OLE对象方式,激活WORD文档,如图所示:
在对象类型中选择WORD文档,完成后按确定按钮,即可对此WORD OLE对象进行编程,主要用到属性列表如下:
属性名
说明
Autosize
设定OLE对象大小是否可随其中插入的对象自动调整尺寸
Autoverbmenu
设定激活OLE对象鼠标右键支持的快捷菜单
Autoactivate
设定是否可以执行鼠标右键OLE对象的弹出菜单
Autovermenu
设定OLE的执行状态为何种方式
以上介绍了一个在表单中建立WORD对象的方法,这里再介绍一个在PRG程序中打开WORD文档并对其进行编辑的例子,通过查看注册表内容中可知,WORD97在注册表中的OLE automation为WORD.APPLICATION,由此可在程序中调用此方法来激活WORD97进入字处理环境中,语法如下:
CREATEOBJECT("WORD.APPLICATION")
通过这段代码创建WORD对象后并不立即启动WORD97,这是因为createobject()函数执行时只是将WORD.APPLICATION OLE对象变成在VFP环境中的一个OLE对象而并未将其显示于桌面中,我们可以通过把WORD的VISIBLE默认属性为设置为.F.而使其在桌面中显示,完整的调用代码如下:
PUBLIC MYWORD
MYWORD=CREATEOBJECT("WORD.APPLICATION")
MYWORD.VISIBLE=.T.
运行以上代码后,读者朋友可能会发现,WORD97启动后,既没有打开原有的文档,也没有新建一文档,这是因为,以上代码还缺少应用一个方法,它就是ADD,新建一文档使用方法如下:
MYWORD.DOCUMENTS.ADD
同理,打开文档的代码如下:
MYWORD.DOCUMENTS.ADD("***.DOC")
关于WORD支持什么样的OLE方法及属性,可使用小工具OLE/COM object viewer,此工具在VISUAL STUDIO光盘中的COMM目录下即可找到,有兴趣的朋友可详细试用。
2、用VFP管理WORD文档。
除了在VFP中调用WORD进行文字处理外,我们还可以对WORD文档进行管理,大家可能有这样的经验,日常工作中用WORD97建立了大量的文档,由于数目日渐增多,查找不便,难于管理,事实上,我们可以用VFP编写一管理系统对日常工作中的文档进行管理,这里可涉及了一个很关键的技术性问题,即如何把不同目录下的文档集中在同一数据表中呢?只要用数据表存贮各WORD文档,就可以生成管理表单对文档进行新增、删除、编辑了。
笔者通过试验发现:可使用命令APPEND GENERAL把文档COPY到数据表中的通用字段中,用函数GETDIR()选择不同的当前目录来复制所需要的WORD97文档,再用ADIR()将需要管理的WORD文档存放在一数组中,完整的代码如下:
CREA table oletable(name c(40),worddoc g) &&建立表oldtable.dbf,其中name为WORD
CD getdir() &&文档名
nfiles=adir(awordfiles,"*.doc") &&把选取的文档放到一数组awordfiles中,
IF nfiles>0 &&并把文档数目放在变量nfiles中
for i=1 to nfiles
APPEND blank
REPLACE oletable.name with awordfiles(i,1) &&把文档存放在数据表中
APPEND general worddoc from awordfiles(i,1)
ENDFOR
ELSE
MESSAGEBOX("此目录下无此文件类型!")
ENDIF
运行以上的代码就可以把文档内容存放中数据表中的通用字段,同时建立管理表单后就能方便地管理文档了。本例主要解决了如何存放文档的问题,至于如何通过数据表进行管理WORD文档,及具体的功能就需要大家根据不同的要求编写相应的表单了。
应用OLE技术,我们在VFP应用系统中不单可对WORD97进行操作,也可以与所有支持OLE技术的应用程序进行数据交换,如:EXCEL、INTERNET EXPLORER等等,关于更深一层的OLE应用问题,并非一文能解释,笔者在此不再讨论,欢迎大家对上文提出意见。
返回页首
3、如何修复被破坏的数据表。(转载于计算机世界)
---- 目 前 在 我 国, 有 相 当 一 部 分 正 在 运 行 应 用 程 序 是 用Foxpro 编 写 的, 由 于 突 然 断 电、 程 序 非 法 关 闭 等 原 因, 经 常会 导 致Foxpro 数 据 库.DBF 文 件 被 破 坏, 如 果 数 据 库 被 破 坏了, 用Foxpro 打 开 数 据 库.DBF 时, 会 出 现"not a table/dbf" 错 误
提 示, 导 致 无 法 用Foxpro 打 开。
---- 首 先 介 绍 一 下Foxpro 数 据 库.DBF 的 文 件 结 构:
---- Foxpro 数 据 库*.DBF 的 文 件 结 构 由 头 记 录 和 数 据 记 录 组
成, 头 记 录 定 义 该DBF 的 结 构 并 包 含 与 该 库 相 关 的 其 它 信
息。 头 记 录 由 文 件 位 置0 字 节 开 始。
---- 数 据 库 头 部 几 个 关 键 字 节 含 义 如 下: ( 注: 库 文 件 中
存 储 整 数 时 低 位 字 节 在 前)
---- 字 节 偏 移 说 明
0 库文件的版本类型
1-3 最近更新的日期(YYMMDD)
4-7 库文件中记录的个数
8-9 第一条记录的起始位置
10-11 一条记录的长度(包括删除标记)
---- 其 它 字 节 的 具 体 描 述 不 在 此 赘 述, 可 以 参 考 有 关 部
门 书 籍 或 者 程 序 开 头 注 释 部 分。
---- 在 实 际 工 作 中 发 现, 许 多 情 况 下 数 据 库 错 误 都 是 由
于 记 录 个 数 比 实 际 记 录 个 数 大1 个, 以 至 于 数 据 库 无 法 用
打 开。
---- 主 要 通 过 以 下 两 种 办 法 来 对 数 据 库 进 行 修 复。
一、 用Pctools、NU 的Diskedit 等 工 具 软 件 进 行 恢 复:
运 行Pctools, 选 中 无 法 打 开 的 数 据 库, 按E 文 件 进 入 编 辑 功
能, 按F1 切 换 显 示 模 式。
按F3 进 行 编 辑, 将 开 始 的 第5 个 字 节 值 减1, 按F5 存 储, 然 后
退 出Pctools, 启 动Foxpro, 发 现 被 破 坏 的 数 据 库 可 以 打 开 使
用 了。
---- 由 于 许 多 操 作 者 并 不 一 定 熟 悉 如 何 使 用Pctools, 因 此
我 建 议 大 家 可 以 用 比 较 熟 悉 的Excel 程 序 根 据 下 面 的 步 骤
来 进 行 数 据 库 的 恢 复。
二、 用Excel 进 行 恢 复。
启 动Excel, 选 择" 打 开" 按 钮, 出 现 打 开 对 话 框, 在 打 开 文
件 类 型 中 选 择Dbase/Foxpro(*.DBF) 文 件 类 型, 再 选 中 被 破 坏
的 数 据 库 打 开, 这 时 不 要 做 更 改, 只 选 择" 保 存" 按 钮, 会
出 现" 另 存 为" 对 话 框, 仍 选 择 以 原 来 文 件 名 保 存, 会 提
示" 文 件 已 经 存 在, 是 否 替 换 已 有 文 件 ?", 选 择" 是"。
然 后 选 择" 文 件" 菜 单 上 的" 关 闭", 会 出 现 提 示" 数 据 库 文
件 不 是Excel 格 式, 要 保 留 修 改 吗 ?
要 保 存 为Excel 格 式, 单 击' 是', 然 后 在' 保 存 类 型' 下 拉 列
表 框 选'Excel 工 作 簿';
要 用 现 有 格 式 保 存 并 替 换 原 来 的 文 件, 单 击' 是', 然 后 单
击' 保 存';
要 在 关 闭 文 件 时 维 持 现 有 格 式 并 不 作 保 存, 单 击' 否'。"
---- 由 于 我 们 并 没 有 对 数 据 库 的 记 录 进 行 改 动, 只 是 为
了 恢 复 数 据 库, 所 以 选 择 最 后 一 项" 在 关 闭 文 件 时 维 持 现
有 格 式 并 不 作 保 存", 因 此 单 击" 否", 退 出Excel。
启 动Foxpro, 再 次 打 开 数 据 库 文 件, 发 现 数 据 库 文 件 已 可
以 被 打 开 了, 但 是 观 察 数 据 库 的 结 构, 会 发 现 数 据 库 结
构 中 的 索 引 不 见 了, 不 过 数 据 库 的 索 引 文 件 还 存 在。 我
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -