导出系统数据的代码:
SystemReady = False
try
If DataTables.Contains("Temp") = False Then
Dim q As new QueryBuilder
q.C
q.TableName = "Temp"
q.SelectString = " Select * from {A} where false"
q.Build
End If
Dim dts() As String = { "A","B","C","D","E","F" }
Dim dlg As New SaveFileDialog
dlg.Filter= "Access文件|*.accdb"
dlg.OverwritePrompt = True
If dlg.ShowDialog = DialogResult.Ok Then
If FileSys.FileExists(dlg.FileName) Then
FileSys.DeleteFile(dlg.FileName,2,2)
End If
For i As Integer = 0 To dts.Length - 1
Dim dt As DataTable = DataTables(dts(i))
If dt.Type = 3 Then '只导出外部表
If dt.Name = "A" Or dt.DataCols.Contains("AID") Then
Dim Fil As String
Select Case dt.Name
Case "A"
Fil = "ID = '" & Tables("A").Current("ID") & "'"
Case Else
Fil = "AID = '" & Tables("A").Current("ID") & "'"
End Select
DataTables("Temp").StopRedraw
DataTables("Temp").Fill("select * from {" & dt.Name & "} where " & Fil ,"AAAA",True )
DataTables("Temp").ResumeRedraw
Dim ex As new Exporter
ex.SourceTableName = "Temp"
ex.FilePath = dlg.FileName
ex.Format = "Access2007"
ex.PassWord = "foxtable"
ex.NewTableName = dt.Name
ex.Export
End If
End If
StatusBar.Message1= "导出进度"
StatusBar.ProgressBar.Visible = True
StatusBar.Refresh
StatusBar.ProgressBar.Minimum = 0
StatusBar.ProgressBar.Maximum = dts.Length
StatusBar.ProgressBar.Value = i + 1
StatusBar.Message2= math.Round(100*(i+1)/dts.Length,0) & "%"
If i = dts.Length - 1 Then
StatusBar.Reset()
End If
Next
End If
Catch ex As Exception
MessageBox.Show("导出数据失败")
End Try
SystemReady = True
原来的项目,在执行这个代码的时候(我做了一个程序菜单按钮),就直接退出。
新建了一个项目,在里面做了N个表,但这些表之间没有建立任何关系,导出的时候就没问题 。
想法:因为我在做的时候,要考虑独占式编辑,所以执行了增加临时列的代码,会不会因为这个有影响?例如在窗口A的afterload事件中
Dim t As Table = Tables(e.Form.Name & "_Table1") ‘说明这个窗口中的Table1是normal型的,绑定了表D
'增加临时列表
Dim dt As DataTable = t.DataTable
If dt.DataCols.Contains("Temp") = False Then
dt.DataCols.Add("Temp", Gettype(Boolean))
End If
[此贴子已经被作者于2014-6-8 22:20:18编辑过]