我正在尝试在Excel中创建动态报告。我有很多销售数据,我希望用户能够根据他的需要进行切片和切块。
通常我会使用两张纸:一张是隐藏的,包含原始数据,另一张是可见的,包含所有按钮和表单控件,这样用户就可以在时间上只选择和可视化原始数据的一小部分。
问题是这次我需要处理6.000.000+行数据(并计算)。将它全部存储在Excel工作表中不是一种选择。此外,数据已经是Access表的形式。
我尝试通过一个查询“din”地访问它,根据用户在Excel工作表上的表单控件中选择的内容“过滤掉”不需要的信息。出于某种原因,这非常缓慢。只需要4-5分钟即可获得10行数据。
必须有一个更快的方法来做到这一点!我需要整个过程感觉“瞬间”。
有什么想法吗?
编辑:好的,所以问题似乎与我的访问表实际上是指向* .txt文件的链表有关。这会减慢进口量。
我尝试了两种建议的解决方案。
iDevlop的想法非常快(在10-15秒内导入20万行),但每次更新表时我都有不足之处。我将发布另一个问题,就像他建议的那样,看看这个过程是如何以及是否可以实现自动化。
Remou的脚本现在也很完美(我很难把它弄好但是他真的很开放,很有帮助,所以知道我知道了)而且,虽然速度较慢,但它的优点是不需要任何数据库维护。在选择使用哪种方法之前,还有一些我需要做的事情。现在,我想说的是谢谢你们的帮助!如果没有你,我本来可以做到的!
答案 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"";"