|
(二)非ACCESS数据库的动态调入
在实际应用的很多情况下,经常需要在对一些事先并不知道其具体库结构的数据库进行调入、显示及打印其记录。因而实现未知格式数据库的动态调入也是评价VB数据库应用程序兼容性的一个重要标志。
在VB中,网格控件非常适合用于浏览数据库中的数据,只需把数据放入网格即可。
在使用网格时动态调入的关键在于记录(Colume)内容和字段(Row)内容(包括字段的名称、类型、值等)的读取,因而生成一个可以对应于一个或多个数据表中的全部或部分记录的Dynaset对象是非常必要的。Dynaset对象还可以是一个动态查询的结果,能进行记录的增加、删除和修改等操作。
下面是一段用网格显示FoxPro数据库的程序。
Sub DBLoad( ) Dim Db1 As database, Ds1 As Dynaset,Td As TableDefs,Fld As Fields Dim Fname,Tmp,Path ToTalNum As String,I,J,Pos1 As Integer Dim MyNum ’定义一个变体型数据 CMD1.Filter = "FoxPro数据库文件(*.DBF)|*.DBF|所有文件|*.*" CMD1.DialogTitle = "调入Ms FoxPro数据库文件" CMD1.FilterIndex = 1 CMD1.Action = 1 Fname$ = CMD1.Filename Pos1% = GetPos( Fname$ ) Path$ = Left$( Fname$, Pos1% ) Tmp$ = Right$( Fname$, Len(Fname$)-Pos1) Fn$ = Left$( Tmp$, Instr( 1,Tmp$,“.”) - 1 ) Set Db1 = OpenDatabase( Path$, True, False, "FoxPro 2.5;" ) Set Ds1 = Db1.CreateDynaset( Fn$ ) If Ds1.EOF And Ds1.BOF Then ‘数据库表内无记录则退出 TotalNum = 0 MsgBox "此数据表为空表!" Exit Sub Else ‘显示数据库表内的实际记录数 Ds1.MoveLast TotalNum = Ds1.RecordCount Grid1.Rows = TotalNum + 1 ’置网格的实际行数 Total.Caption = Str$(TotalNum) End If ‘置网格的实际列数并置每列的宽度 Set Td = Db1.TableDefs Set Fld = Td( Fn$ ).Fields Grid1.Cols = Fld.Count + 1 Grid1.ColWidth(0) = 600 For I = 1 To Fld.Count Grid1.ColWidth(I) = 1500 Next I ‘在网格的第一行内填入字段名 Grid1.Row = 0, Grid1.Col = 0 Grid1.Text = "序号" For I = 1 To Fld.Count Grid1.Col = I Grid1.Text = Fld(I - 1).Name Next I ‘在网格中填入相应的数据 Ds1.MoveFirst I = 1 Do While Not Ds1.EOF Grid1.RowHeight(I) = 300 Grid1.Row = I Grid1.Col = 0 Grid1.Text = I For J = 1 To Fld.Count Grid1.Col = J MyNum = Ds1.Fields(J - 1).Value ‘对记录的数据类型进行判断后做相应的处理 If IsNumeric( MyNum ) Or IsDate( MyNum ) Then Grid1.Text = Str$( Ds1.Fields(J - 1).Value ) Else If VarType( MyNum ) = 8 Then Grid1.Text = Ds1.Fields(J - 1).Value Else If VarType( MyNum ) = 0 Or VarType( MyNum ) = 1 Then Grid1.Text = " " End If On Error Resume Next Next J Ds1.MoveNext I = I + 1 Loop Ds1.Close Db1.Close Exit Sub
最后应记住,在VB的数据库应用程序运行之前,一定要在AUTOEXEC.BAT文件中加入一句SHARE.EXE /L:500。
四、结束语
对非Access数据库的兼容是VB数据库编程中不可分割的重要部分。因而熟练掌握使用DAO方法对非ACCESS数据库的编程是极为重要的。并且,一定编程技巧的应用也有助于弥补VB对外来数据库支持的不足。
|