访问Foxpro数据库----用MicrosoftJet访问桌面数据库(二)

2016-02-19 12:27 19 1 收藏

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的访问Foxpro数据库----用MicrosoftJet访问桌面数据库(二),希望大家看完后能赶快学习起来。

【 tulaoshi.com - 编程语言 】

MicrosoftJetXbaseIISAM驱动程序支持下列版本的MicrosoftFoxPro:2.0,2.5,2.6,3.0和DBC。当通过MicrosoftJet数据库引擎访问FoxPro数据库时,还应当考虑MicrosoftJet如何处理FoxPro数据类型、已删除的记录、FoxPro索引和备注字段。为了在MicrosoftJet中访问FoxPro数据库,应指定适当的连接信息,包括:

  (1)源数据库类型:可以是下列中的一个:

  ·FOXPro2.0

  ·FOXPro2.5

  ·FOXPro2.6

  ·FOXPro3.0

  ·FOXProDBC

  (2)数据库名称:目录的完整路径,在该目录中包含各种希望访问的FoxPro文件(对于MicrosoftFoxProDBC,该路径必须包括.dbC文件的名称。)

  (3)源表名称:表的名称。在MicrosoftJet中,把FoxPro的一个数据库文件(.dbf)看作是一个表,因此,指定表名称实际上是指定.dbf文件。在使用时,应去掉扩展名.dbf;如果使用带有扩展名的完整的文件名,则须用数码符号(#)代替文件扩展名之前的点(.);对于MicrosoftFoxProDBC,则应使用DBC中的表名。

  1.链接FoxPro数据库

  为了将FoxPro数据库链接到MicrosoftJet数据库,可以先用OpenDatabase方法打开本地的MicrosoftJet数据库,建立TableDef对象,并设置该对象的Connect和SourceTableName属性,然后分别指定要链接的FoxPro数据库(表)的路径和名称。

  例:编写程序,链接FoxPro数据库。在窗体上画一个命令按钮,然后编写如下事件过程:

  PrivateSubCommand1_Click()

  DimdbsJetAsDatabase

  DimtdfFoxTableAsTableDef

  ’打开MicrosoftJet数据库

  SetdbsJet=OpenDatabase("C:dbdirdb2.mdb")

  ’建立TableDef对象

  SettdfFoxTable=dbsJet.CreateTableDef("LinkedFoxProTable")

  ’设置连接信息

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  tdfFOXTable.Connect="FOxPro3.0;DATABASE=a:"

  tdfFOxTable.SourceTableName="zf01"

  ’追加TableDef对象以创建链接

  dbSJet.TableDefs.AppendtdfFoxTable

  ‘显示确认消息

  MSgBOX"Finishedlinking"&tdfFOXTable.SourceTableName&".",0

  EndSub

  该例链接了外部FoxPro3.0的表,成功后显示确认消息框。

  2.打开FoxPro表

  如前所述,可以用OpenDatabase方法直接打开外部MicrosoftFoxPro表,其参数分别为路径、独占访问值、只读值和数据源类型。

  例:编写程序,打开FoxPro表,并显示其内容。

  前面的例子链接了一个FoxPro表,该表位于A盘的根目录下,名为zf01.dbf。可以在“可视化数据管理器”中打开该表。我们用下面的程序打开该数据库,然后显示它的内容。在窗体上画一个命令按钮,然后编写如下程序:

  PrivateSubCommand1_Click()

  DimdbsFoxAsDatabase

  DimrstAccountsAsRecordset

  ,打开外部FoxPro数据库

  SetdbsFox=OpenDatabase("a:",FalSe,False,FOXPro3.0")

  ’从zf01表中建立Recordset对象

  SetrstAccounts=dbsFox.OpenRecordset("zf01")

  print

  DOUntilrstAccounts.EOF

  PrintrstAccounts.mc;"";

  printTab(15);rstAccounts.zd;

  PrintTab(25);rstAccounts.jz;

  printTab(35);rstAccounts.jg;

  printTab(45);rstAccounts.rq;

  printTab(55);rstAccounts.lC;

  PrintTab(60);rstAccounts.dz

  rstAccounts.MoveNext

  Loop

  rstAccounts.Close

  dbsFOX.Close

  EndSub

  该例打开了一个外部FoxPro3.0表,然后从该表中建立Recordset对象,最后在窗体上输出表的内容。程序运行后,单击命令按钮,将显示数据库zf01.dbf的内容。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  3.将FoxPro数据类型转换为MicrosoftJet数据类型

  应用程序在读取数据时,MicrosoftJet将每个FoxPro数据类型转换为相应的MicrosoftJet数据类型,其对应关系见下:

  Foxpro数据类型Microsoft数据类型

  charactertext

  Numeric,FloatDouble

  Logicalboolean

  datedate/time

  memomemo

  GenerallongBinary

  Double*double

  currency*currency

  integerlong

  datetime*data/time

  (注:*只用于MicrosoftFoxPro3.0和MicrosoftFoxProDBC。)

  4.处理己删除的记录

  当在应用程序中删除FoxPro表中的记录时,该记录被加上删除标记,但是该记录并没有从表中移走,因为在表被压缩之前FoxPro不会发现标记为删除的记录。不能通过MicrosftJet压缩FoxPro表,必须压缩FoxPro数据库以从物理上移走记录。尽管加了删除标记的记录实际上并未从源数据库中移走、但它们也不会出现在应用程序中,因为MicrosoftJet可以自动筛掉标记为己删除的记录。如果希望标记为删除的记录出现在数据集中,必须将Windows注册表中HKEY_lOCAL_MACHINESOFTWAREMicrosoftJet3.5EnginesXbase键的Deleted值设置为False,并且必须重新启动使用MicrosoftJet的应用程序,以反映记录被删除的情况。

  5.处理FoxPro索引

  使用适当的FoxPro索引文件(.idx或.cdx文件),可以提高MicrosoftJet对各种FoxPro表的访问速度。通过建立与FoxPro数据库同名的文本文件并加上.inf文件扩展名,可以在.inf文件中指定索引文件。假定有一个名为Sales.dbf的FoxPro数据库文件,为了建立相应的.inf文件,可按如下步骤操作:

  (1)建立文本文件Sales.inf。

  (2)在文本文件的第一行,指定数据库类型,并把它放在方括号中。例如,为了指定

  FoxPro3.0的索引,可以键入:

  [FoxPro2.0]

  (3)对数据库的第一个索引赋予一个索引号。第一个索引记为IDX1,第二个记为

  IDX2,以此类推。如果要为FoxPro数据库指定组合索引文件(.cdx),则应使用形如CDX1,

  CDX2等的索引号。如果在索引号之前加上字符“U”,则可以指定唯一索引。

  (4)在索引号之后加上一个等号,再加上要指定的索引文件名(包括扩展名)。注意,

  在该项中不能有任何空格。例如,要指定索引custname.idx作为第一个索引,而唯一索引

  custno.idx作为第二个索引,则应在文件中添加下面的项:

  IDX1=custname.idx

  UIDXl=custno.idx

  (5)重复第(3)步和第(4)步,直到指定完数据库表的所有索引。完成后的.inf文

  件看起来像下面这样:

  [FOxPro3.0]

  IDX1=custname.idx

  UIDX1=custno.idx

  (6)将.inf文件保存在FoxPro数据库所在的目录下。

  如果不能将.inf文件与数据库存储在同一目录下,或者为了维护方便而希望将所有的文件存储在一个共享的目录下,则可以建立一个指向存储.inf文件路径的Windows注册表项,即在Windows注册表中建立INFPath项,这可以通过在注册表编辑器中手工添加一个字符串注册表值来实现。其方法是:打开Windows注册表的\HKEY_LOCAL_MACHINESOFTWAREMicrosoftJet3.5\Engines\Xbase键,执行“编辑”菜单中的“新建”,然后单击“字符串值”,输入INFPath作为名称,再在“数据”列输入该.inf文件的完整的目录或者网络路径。为了使用该设置值,应保存修改后的注册表,并重新启动使用MicrosoftJet的应用程序。

  注意,FoxPro数据库中的数据经常变更,因此MicrosoftJet也要经常更新索引文件。如果FoxPro数据库与MicrosonJet建立了链接,或者FoxPro数据库是在MicrosoftJet数据库中打开的,则只有在这些索引对MicrosoftJet数据库同样有效的情况下,才能使其与FoxPro数据库相关联。此外还应注意,在没有更新相关联的引用(例如Windows注册表中的INFPath项)前,不要删除或者移动索引文件或.inf文件。如果MicrosoftJet不能获得最新的索引信息,则不能正确地处理查询。

  6.处理备注字段

  FoxPro数据库的备注字段是存储在文件系统中而不是数据库中。如果希望打开或链接具有备注字段的FoxPro数据库,则应确保备注文件与数据库文件存放在同一目录下。否则会产生出错信息。(实时错误‘3166’;不能定位所需的Xbase备注文件。)

->

来源:http://www.tulaoshi.com/n/20160219/1600910.html

延伸阅读
1.尽量使用事务处理更新数据库 VB的事务处理包括以BeginTrans开始,以CommitTrans或Rollback结尾的多条数据库操作指令。事务处理除了能很好的保证数据库的完整性以外,同时能大大提高数据库批量更新的效率。这是因为如果数据库更新操作没有使用事务处理,则每次Update操作都会引起数据库写盘一次。使用事务处理后,更新只在内存缓冲区内进行...
using System; using System.Data; using System.Data.OleDb; using System.Collections; namespace XLang.VideoOnline.Framework.Database.Access { /// /// Summary description for ACCESS_DataViewsCollection. /// public class DataViewsCollection { private Database.Access.DataView[] _views; private int _count; pub...
标签: ASP
一. 访问WEB数据库的多种方案   目前在WINDOWS环境下有多种访问WEB数据库的技术,主要有:   1.公共网关接口CGI(Common Gateway Interface)   CGI是较早实现的技术。适用于多种服务器平台,如UNIX、WINDOWS等,但CGI的开发成本高、维护困难、功能有限、不具备事务处理功能、占用服...
using System; using System.Data; using System.Data.OleDb; using System.Collections; namespace XLang.VideoOnline.Framework.Database.Access { /// /// Summary description for ACCESS_DataTablesCollection. /// public class DataTablesCollection { private Database.Access.DataTable[] _tables; private int _count; ...
通过控件访问数据库 (1)启动VB。 (2)出现如图10.12所示的新建工程的选项卡。 (3)出现如图10.13所示的VB主界面。 (4)如图10.14所示。 (5)出现如图10.15所示的界面。 ――――――――――――――――――――――――――――――――――――― odbc;dsn=graduateDB;uid=scott;pwd=...

经验教程

884

收藏

57
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部