三九宝宝网宝宝百科宝宝知识

在VB中引用.dbf及索引文件

11月23日 编辑 39baobao.com

[国产搜索引擎的悲哀]现在的我们,无论是工作、生活还是学习,很多时候都要与互联网进行交互,而往往离不开的就是那找寻的入口 搜索引擎,在搜索框里输入要找内容的关键词,然后click一下,你就知道了。可是...+阅读

如何用FOX以外的编程语言来取得.dbf数据库的记录值和引用.idx 和.cdx索引一直都是程序员讨论的话题之一。现有一任务是在一个触摸屏系统中加入一个用户查询水费界面。每个用户可随时查询到自己的水费记录。我使用VB5.0,希望打开Ware系统下营业收费系统的七个.dbf数据表并进行查询。每个数据表有将近10万条记录。通过10M集线器交换数据,查询的字段都不是的。显然这样大的数据量,又是通过10M网络传递,如果VB使用SQL方式查询,则最少要2分钟时间才能得到答复。让一个用户在机器旁边等2分钟是不现实的。于是想利用FoxPro自身的.idx或.cdx索引文件来查找。

编程可用两种方式实现。一种是直接在VB中调用,另一种使用VB中的shell函数调用FoxPro的exe 程序。

方法

一、直接在VB中调用.dbf文件

一、.在FoxPro数据库的所在目录下建立一个与FoxPro数据库文件名相同的.inf文本文件

步骤:1.创建文本文件*.inf, 与数据表同名。

2.在文本文件的第一行,输入[FoxPro 2.5];如果指定的是FoxPro 2.0索引,则输入[FoxPro 2.0],其余以此类推。

3.依次输入各指定索引文件名 形式 IDXn=*.idx 或 CDXn=*.cdx 。其中n为数字,依次表示第1个IDX索引文件,第2个IDX索引文件。或第1个CDX索引文件,第2个……以此类推。

注意:如果不能将.inf 文件与数据库存储在同一目录下,或为了维护方便而希望将所有文件存储在一个共享点。可采用创建Windows注册表项的方法,指向存储.inf的文件路径。(详见VB5的联机手册)

二、 编写程序

用OPENDATABASE方法直接打开外部FoxPro表。

主要语句如下:

dim db as database

dim tb as recordset

′打开外部数据库

set db=opendatabase(“c:fox”,false,false,”foxpro 2.5;”) ′注意FoxPro 与2.5之间必须有空格

set tb=db.openrecordset(“abc”)

′调用索引

tb.index=“abc1#idx” ′注意索引名为“索引文件名#后缀名”

tb.seek “=”, “111-111” ′搜索值为“111-111”的记录

方法

二、用shell() 函数调用VF的idx文件

用VB接受用户命令,然后调用VF的 .prg编译的.exe文件,按用户要求在数据库中查询,将查询结果放置在一个 .TXT文件中。VB从.TXT文件取数显示,再次将查询结果传递给VF的.prg编译的 .exe文件,查询取数结果。具体编程从略,这里要着重讨论shell()函数的特性:shell 函数是以异步方式来执行其它程序的。也就是说,用 shell 启动的程序可能还没有完成执行过程,就已经执行到 shell 函数之后的语句。 这种执行方式打乱了程序固有的顺序执行方式, 如果不加注意,程序的运行将产生混乱。

如果语句如下

……

shell(c:file1.exe) ′ 调用file.exe文件,并把结果放置在 X1.txt中

open c:x1.txt for output as #1 ′打开X1.TXT文件,取查询结果。

……

按一般执行方式,上述语句应能正确执行。然而实际运行时,即使语句全部正确,也会弹出错误信息框:x1.txt文件不存在。原因就在于VB在执行shell()语句时,file1.exe文件还未执行完,就继续下一行语句:打开file1文件创建的x1.txt;所以出现错误。

经过多次实验,我最后采用了VB工具条中的timer控件来完成时间等待,程序编程通过。

……

shell(c:file1.exe)

‘运行计时器

timer1.enabled=true

……

sub timer1_timer()

if dir(“c:x1.txt”)”” then

open c:x1.txt for output as #1

……

timer1.enabled=false

end sub

实际运行速度很快,2~3秒内完成查询操作。

以下为关联文档:

计算机基础知识搜索引擎篇我们已经浏览了Inter上的众多网站,可面对茫茫网海,我们如何能快速准确地找到自己所需要的信息,而不至于迷失其中呢?这就需要搜索引擎的帮忙了。搜索引擎使用了一些程序把Inter上...

20062007国内重要时事索引国内部分(141条)2006年11月3日,央行宣布从2006年11月5日起上调存款准备金0.5%。此前央行曾于7月5日、8月15日先后两次上调存款准备金。此次上调后,存款准备金率将达到9%。1...

数据结构教程第三十九课索引文件教学目的: 掌握索引文件的有关概念教学重点: 索引文件的基本概念,索引文件的重要意义教学难点: 索引文件的建立授课内容:一、索引文件的基本概念除了文件本身(称作数据区)之外...

专业英语考试写作可以引用三字经人之初, At the beginning of life,性本善。sex is good.性相近, Basically, sex is nearly all the same in nature.习相远。 But it depends on how the way you do it...

Excel公式中不同引用地址方式的应用总结Excel中,加上了绝对引用符“ ”的列标和行号为绝对地址,在公式向旁边复制时不会发生变化,没有加上绝对地址符号的列标和行号为相对地址,在公式向旁边复制时会跟着发生变化。混合...

英语四级作文可引用的谚语格言1.Practice makes perfect. 熟能生巧。2.God helps those who help themselves. 天助自助者。3.Easier said than done. 说起来容易做起来难。4.Where there is a will,t...

活用Word题注和交叉引用功能这里的估计绝大多数都是搞技术的,但搞技术的也会经常有很多文字工作要做。例如写产品文档、写文章、写书。如果你经常要写很长的文档或者图书,例如页数上百页,里面有很多插图、...

浅谈Word中的数据引用在实际工作中,特别是在一些技术方案、技术总结等文章中可能有大量的数据。文章内部同一数据可能要前后多次用到,还的一些数据可能来自Excel工作表,甚至整个表格都由Excel复制而...

PLSQLDeveloper导出分区索引脚本不准确分析及规避方法 1 案例回访 硬件环境:IBM XSERIES 3650 操作系统:Windows2003标准版+Sp02 数据库版本:Oracle9.2.0.1 PL/SQL Developer版本:7.0.2.1076 由于业务需要,需先d...

推荐阅读
图文推荐