我需要动态(并快速)将Access表(大表)中的部分数据导入Excel

时间:2012-03-09 14:31:57

标签: ms-access import excel-vba vba excel

我正在尝试在Excel中创建动态报告。我有很多销售数据,我希望用户能够根据他的需要进行切片和切块。

通常我会使用两张纸:一张是隐藏的,包含原始数据,另一张是可见的,包含所有按钮和表单控件,这样用户就可以在时间上只选择和可视化原始数据的一小部分。

问题是这次我需要处理6.000.000+行数据(并计算)。将它全部存储在Excel工作表中不是一种选择。此外,数据已经是Access表的形式。

我尝试通过一个查询“din”地访问它,根据用户在Excel工作表上的表单控件中选择的内容“过滤掉”不需要的信息。出于某种原因,这非常缓慢。只需要4-5分钟即可获得10行数据。

必须有一个更快的方法来做到这一点!我需要整个过程感觉“瞬间”。

有什么想法吗?


编辑:好的,所以问题似乎与我的访问表实际上是指向* .txt文件的链表有关。这会减慢进口量。

我尝试了两种建议的解决方案。

iDevlop的想法非常快(在10-15秒内导入20万行),但每次更新表时我都有不足之处。我将发布另一个问题,就像他建议的那样,看看这个过程是如何以及是否可以实现自动化。

Remou的脚本现在也很完美(我很难把它弄好但是他真的很开放,很有帮助,所以知道我知道了)而且,虽然速度较慢,但​​它的优点是不需要任何数据库维护。

在选择使用哪种方法之前,还有一些我需要做的事情。现在,我想说的是谢谢你们的帮助!如果没有你,我本来可以做到的!

2 个答案:

答案 0 :(得分:2)

正如Remou所说,检查xour索引,但也要确保以允许索引使用的方式输入标准!
例如:WHERE Format(myDate,"yyyy-mm") = "2011-09"不允许日期索引优化,
WHERE myDate BETWEEN #09/01/2011# AND #09/30/2011#确实允许索引优化。


编辑:
如果您的文本文件中有某种唯一标识符,并将其转换为表格设计中的PK,则可以定期导入整个文件,PK将丢弃重复项。 导入可以自动化,即使使用.vbs,您也不需要Access来执行此操作。如果你遇到困难,再提出另一个问题。 您也可以要求IT人员每个月左右删除旧记录。

答案 1 :(得分:2)

如果您有文本文件,请不要打扰通过Access。这可能会阻碍您,直到您可以获得更好的系统。

Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim s As String
Dim i As Integer, j As Integer

strFile = "z:\docs\"

''Note that if HDR=No, F1,F2 etc are used for column names,
''if HDR=Yes, the names in the first row of the range
''can be used.
''
''Connection strings : http://www.connectionstrings.com/excel

strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
    & ";Extended Properties=""Text;HDR=Yes;IMEX=1"";"

''Late binding, so no reference is needed

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

strSQL = "SELECT * " _
       & "FROM [test.txt] a " _
       & "WHERE a.FirstName ='Bernard'"

rs.Open strSQL, cn, 3, 3


''Pick a suitable empty worksheet for the results

Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs

''Tidy up
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

如果您的文件是制表符分隔符,则可以使用schema.ini(http://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx)。它必须与文本文件位于同一目录中,并且只需包含两行:

[Ordini BO new.txt]
Format=TabDelimited

您的连接字符串应为:

strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Text;HDR=No;IMEX=1;FMT=Delimited"";"