不用 DATA 控件操作数据库文件 大家知道,在 VB 中如果使用 DATA 控件访问数据库,那么程序执行就必须要一些大型 DLL 支持。这对于安装盘的发放是一个大问题。那么,在 VB 中能不能不用 DATA 控件访问数据库呢? 在 VB 中不用 DATA 控件而访问数据库,只有一法:将数据库文件当成2进制文件打开。但此法最大困难就是你必须了解数据库文件的结构形式。 比如:FoxBase的DBF文件(我不了解其它数据库的文件结构,大家可以去查查):它由记录头和记录构成。而记录头又由两部分构成:记录头=数据库说明+字段说明。下面列出 FoxBase 数据库说明: FoxBase 数据库说明 起始地址 字节数 含义 1 1 FoxBase 数据库文件标志 2-4 3 最后一次修改日期,3个字节分别为年、月、日 5-8 4 文件记录总数 9-10 2 记录头长度 11-12 2 每个记录长度 13-22 20 未使用 下面列出字段说明,每个字段由 32 个字节构成。 字段说明 起始地址 字节数 含义 1-11 11 字段名称 12 1 字段类型(分别为C、N、D、L等) 13-16 4 该字段在文件中地址 17 1 字段长度 18 1 小数位数 19-32 14 未使用 知道了字段信息说明,就可以使用 复合变量 + 2进制文件 来操作数据库了。 Text 转换为 Access MDB Text 文件类型在很多软件中都为一般应用程序与数据库之间架起一座桥梁。你可以使用 Text ISAM 驱动程序和 SQL 来把 Text 文件转换成 Access MDB 数据库文件,首先,为文本文件创建一个 SCHEMA.INI 文件。然后,你可以使用下面的代码来实现转换: Dim db As Database, tbl as TableDef Set db = DBEngine.CreateDatabase(App.Path & "/mymdb.mdb", dbLangGeneral, dbVersion_0) Set tbl = db.CreateTableDef("Temp") tbl.Connect = "Text;database=c:/vbpj/data" tbl.SourceTableName = "Customer#txt" db.TableDefs.Append tbl db.Execute "Select Temp.* into NewTable from Temp" db.TableDefs.Delete tbl.Name db.Close Set tbl = Nothing Set db = Nothing 锁住数据库中的表 把表达式 True=False 放到表的 ValidationRule 属性就能锁上。 HardLockTable?实现了该功能。 声明 Public MyDB As Database Dim Dummy As Integer 函数 Function HardLockTable (ByVal whichAction As String,?ByVal aTable As String) As Integer On Error GoTo HardLockTableError HardLockTable = True Select Case whichAction Case "Lock" MyDB.TableDefs(aTable).ValidationRule = "True=False" MyDB.TableDefs(aTable).ValidationText =?"This table locked via " & ?"ValidationRule on " & Now Case "UnLock" MyDB.TableDefs(aTable).ValidationRule = "" MyDB.TableDefs(aTable).ValidationText = "" Case "TestThenUnLock" If MyDB.TableDefs(aTable).ValidationRule = "True=False" Then MyDB.TableDefs(aTable).ValidationRule = "" MyDB.TableDefs(aTable).ValidationText = "" End If End Select HardLockTableErrorExit: 'subFlushDBEngine 'optional, see next suggestion Exit Function HardLockTableError: HardLockTable = False MsgBox Error$ & " error " & "in HardLockTable trying " & "to " & whichAction & " " & aTable Resume HardLockTableErrorExit End Function 使用例子 '上锁 Dummy = HardLockTable("Lock", "TestTable") ' 开锁 Dummy = HardLockTable("UnLock", "TestTable") 关闭所有的数据连接 如果在代码中使用了数据控件如 DAO, RDO, 或 ADO, 在退出时应该关闭所有打开的 recordset, database,和 workspace 。 虽然对象能自动注销, 但是数据连接不会马上断开, 可能会导致一些内存不能被系统重新分配。 下面的代码可以关闭所有打开的 DAO workspace, 并释放所占的内存。 Private Sub Form_Unload(Cancel As Integer) On Error Resume Next ' Dim ws As Workspace Dim db As Database Dim rs As Recordset ' For Each ws In Workspaces For Each db In ws.Databases For Each rs In db.Recordsets rs.Close Set rs = Nothing Next db.Close Set db = Nothing Next ws.Close Set ws = Nothing Next ' End Sub 如何删除FoxPro数据库的数据? 用VB对FOXPRO数据库操作,经常会遇到这样一个问题: 只能对记录进行DEL,也就是在该条记录上打一个删除标记,但不能 象在数据库中那样,用"PACK"把这条记录真正删除.当记录数较多时, 用DBGRID等控件做的程序都会出错.该怎样办呢?其实,VB中无法对DBF文件进行PACK。只能把ISAM的设置 Deleted设为On。这样相当于FoxPro的SET DELETED ON。不信你可以试一试。 VB应用小集----访问VB外来数据库 VB最引人注目的特点,也是其最令程序员关心的地方,就是它访问多种数据库的强大功能。VB中将非MS Access数据库称为外来数据库(External Database),如dBASE、FoxPro、ODBC等。VB中使用数据控制访问外来数据库同访问Access数据库类似,这里不再赘述,现在主要读一下用生成对象的方法来访问外来数据库。访问外来数据库((以dBASE为例)大致分为以下几步: 第一步:建立一个Access型数据库,并在数据库中创建新表—即为附加表。通过设置 附加表的各属性值,使其与你所要访问的数据库建立链接关系。程序代码如下: DimDbasDatabase DimTdasNewTabledef SetDb=OpenDatabase("MYDB.MDB") Td.Connect="dBASE:DATABASE=c:/DATADIR" Td.SourceTableName="AU THOR" Td.Name="dBASEAuthorTable" Db.tabledefsAppendTd Db.close 第二步:设置INI文件路径。在VB的程序中使用了访问外来数据库操作,将应用程序生成EXE文件后,必须提供一个INI文件。若找不到这个INI文件,将会导致不能访问数据库,并出现“NOTFOUNDIN STOLLABKISAMS’的错误信息。设置INI文件路径后,VB的程序会在WINDOWS子目录中寻找与应用程序同名的INI文件。设置INI文件路径代码为: SetDataAccessOption1,“Path/Filename” 第三步:编辑.INI文件可对不同种类的数据库进行设置,下面为一INI文件代码: [Options] SystemDB=c: /MyPATH/SYSTEM.MDA [ISAM] PageTimeout=5 MaxBufferSize=128 LockRetry=20 CommitLockPetry=20 ReadAheadPages=16 [InstallableISAMs] Paradox3.x=C:/VB/pdx110.DLL FoxPro2.0=C:/VB/xbs110.DLL FoxPro2.5=C:/VB/pdx110.DLL dBASE=C:/VB/pdx110.DLL dBASE=C:/VB/pdx110.DLL Btrieve=C:/VB/btrv110.DLL [ParadoxISAM] PageTimeout=600 ParadoxUsername=BaiUser ParadoxNetPath=P:/PDXDB/ CollatingSeguence=Ascii [dBASE] centry=off Data=American Mark=47 Deleted=on 这样通过访问新数据库MYDB.MDB和表“DBASEAU THORTABK”即可访问你所要访问的外来数据库了。 使用这种方法访问外来数据库应该注意的是,附加表在所加到的数据库中只是建立了一个链接关系,表的实际所在,仍然存在于原数据库中,该表在所附加到的数据库中被删除时,只是删掉了链接关系,实际的表并没有被删除。  
2/2 首页 上一页 1 2 |