发布网友 发布时间:2022-04-21 02:56
共1个回答
热心网友 时间:2022-04-10 03:29
有很多方法都可将数据库中某个表的数据导出到电子表格中,例如通过创建Access.Application,可以利用Access本身的导出功能实现将表中的数据导出到电子表格中。但是这种方法会占用较多的系统资源,并且缺乏通用性。如果一个数据库没有导出的功能怎么办?下面的这段程序代码利用记录集实现导出的功能,这种做法的好处是显而易见的:你可以控制要导出的数据,而不用将整个表的内容都导出到电子表格中。为简单起见下面的程序代码仍将整个表的数据导出到电子表格中。如果你有兴趣的话,对下面的代码稍加改动就可做成更为通用的一个类或是一个控件。 首先在窗体上添加一个标签控件和一个命令按钮,然后在工程中添加对DAO引用。利用下面的程序代码就可将表中的数据导出到电子表格中。Option ExplicitPrivate Sub Command1_Click()Dim tempDB As DatabaseDim i As Integer ' 循环计数器Dim j As IntegerDim rCount As Long ' 记录的个数Dim xl As Object ' OLE自动化对象Dim Sn As RecordsetScreen.MousePointer = 11Label1.Caption = "打开数据库..."Label1.RefreshSet tempDB = Workspaces(0).OpenDatabase("Nwind.mdb")Label1.Caption = "创建Excel对象..."Label1.RefreshSet xl = CreateObject("Excel.Sheet.8")Label1.Caption = "创建快照型记录集..."Label1.RefreshSet Sn = tempDB.OpenRecordset("Customers", dbOpenSnapshot)If Sn.RecordCount > 0 ThenLabel1.Caption = "将字段名添加到电子表格中"Label1.RefreshFor i = 0 To Sn.Fields.Count - 1xl.Worksheets(1).cells(1, i + 1).Value = Sn(i).NameNextSn.MoveLastSn.MoveFirstrCount = Sn.RecordCount' 在记录中循环i = 0Do While Not Sn.EOFLabel1.Caption = "Record:" & Str(i + 1) & " of" & _Str(rCount)Label1.RefreshFor j = 0 To Sn.Fields.Count - 1' 加每个字段的值加到工作表中If Sn(j).Type < 11 Thenxl.Worksheets(1).cells(i + 2, j + 1).Value = Sn(j)Else' 处理Memo和LongBinary 类型的字段xl.Worksheets(1).cells(i + 2, j + 1).Value = "Memo or Binary Data"End IfNext jSn.MoveNexti = i + 1Loop' 保存工作表Label1.Caption = "保存文件..."Label1.Refreshxl.SaveAs "c:\Customers.XLS"'从内存中删除Excel对象Label1.Caption = "退出Excel"Label1.Refreshxl.Application.QuitElse' 没有记录End If' 清除Label1.Caption = "清除对象"Label1.RefreshSet xl = NothingSet Sn = NothingSet tempDB = NothingScreen.MousePointer = 0 ' 恢复鼠标指针Label1.Caption = "Ready"Label1.Refresh End SubPrivate Sub Form_Load()Label1.AutoSize = TrueLabel1.Caption = "Ready"Label1.RefreshEnd Sub