以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  数据源临时表问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=142332)

--  作者:goldenfont
--  发布时间:2019/10/24 14:13:00
--  数据源临时表问题
我有一个窗口,需要导入excel到表里,但是只有第一次是成功的,后面同样的按钮紧接着再接着导入,会出现问题,说是找不到临时表
Dim dlg As New OpenFileDialog
dlg.MultiSelect = False
dlg.Filter= "模板文件|*.xls;*.xlsx" \'设置筛选器
dlg.InitialDirectory = SpecialFolder.DesktopDirectory \'初始目录
If dlg.ShowDialog = DialogResult.OK Then 
    If Connections.Contains("临时连接") Then  \'连接要导入的Excel
        If DataTables.Contains("临时表") Then DataTables.Unload("临时表")
        Connections.Delete("临时连接")
    End If
    Connections.Add("临时连接", "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dlg.FileName & ";Extended Properties=\'Excel 8.0;HDR=yes\'")
    \'--------接下来把所有的数据导入到临时表里----------------------
    Dim q As new QueryBuilder
    q.C
    q.TableName = "临时表"
    q.SelectString = "S elect * fr om [Sheet1$]"
    q.Build
    Dim t As Table = e.Form.Controls("Table1").Table
    If DataTables.Contains("临时表")
        t.DataSource = DataTables("临时表")
    Else
        
    End If
End If

--  作者:有点蓝
--  发布时间:2019/10/24 14:20:00
--  
测试没有问题哦。上传实例说明
--  作者:goldenfont
--  发布时间:2019/10/24 16:18:00
--  
邪门了,我单独用这段代码做测试准备上传,是没问题的,但是在我的项目里就不行了,因为我的项目很大,没法上传,这是啥道理?
想了一下,没啥变化的啊,就是我本身用的主连接是连的数据库的,不是这个临时的,窗口是独立的,就这点区别啊

--  作者:goldenfont
--  发布时间:2019/10/24 16:58:00
--  
老师,有没有办法能遍历DataTables以哪些字符开头的所有的DataTables表?
例如找到所有以"临时表_"开头的所有表?
DataTables.Contains("临时表")怎么写?

--  作者:有点蓝
--  发布时间:2019/10/24 17:05:00
--  
for each dt as datatable in DataTables
if dt.name like "临时表_*"

--  作者:goldenfont
--  发布时间:2019/10/24 17:37:00
--  
好吧,还有,一个问题,
If Connections.Contains("临时连接") Then  \'连接要导入的Excel
        Connections.Delete("临时连接")
End If
总是提示我:该数据源正在使用,无法删除
这在什么情况下,可以硬删除此连接啊

--  作者:goldenfont
--  发布时间:2019/10/24 18:36:00
--  
代码重现了那个问题了
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试用途.zip

[此贴子已经被作者于2019/10/24 18:36:48编辑过]

--  作者:有点蓝
--  发布时间:2019/10/25 9:18:00
--  
我测试没有问题。或者可以改改代码:
……
If dlg.ShowDialog = DialogResult.OK Then
    If Connections.Contains("临时连接") Then  \'连接要导入的Excel
        If DataTables.Contains("临时表") Then DataTables.Unload("临时表")
        Connections.Delete("临时连接")
    End If
    If dlg.FileName.EndsWith(".xlsx")
        Connections.Add("临时连接", "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dlg.FileName & ";Extended Properties=\'Excel 8.0;HDR=yes\'")
    Else
        Connections.Add("临时连接", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dlg.FileName & ";Extended Properties=\'Excel 8.0\'")
    End If
……

其次下载安装下面的数据访问组件:
http://www.foxtable.com/download/AccessDatabaseEngine.exe