【发布时间】:2018-10-25 16:11:19
【问题描述】:
我是在 VBA 中使用记录集的新手,这个问题让我发疯。
我得到一个大报告(cca 57000 行),它保存为带有标签的文本文件。我的任务是删除不必要的数据,插入其他数据并创建数据透视表之类的东西。现在这个任务是在 Excel 中手动完成的,它会产生一个使用不便的大文件。所以我想在一个记录集中导入TXT文件并用SQL语句操作数据,并将结果保存在一个单独的Excel文件中。
我已经设法直接从 TXT 导入数据。 .CountRecord 显示正确的记录数,但它们为 Null。
我尝试从.Execute 和.Open 创建记录集,结果相同。
这是我的 VBA 代码:
Sub user_statistic_report()
Dim sPath As String
Range("A1").EntireRow.Delete
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0;"
.Properties("Data Source") = "C:\\Mydocs\raport\" 'sample path
.Properties("Extended properties") = "text;HDR=No;FMT=Delimited;"
.Open
End With
rs.CursorLocation = 3 'someone told it helped him but it did not a trick for me
'later I'd like to select only rows with specific conditions
rs.Open "SELECT * FROM [b.txt]", cn, 3
Debug.Print "Number of records:", rs.RecordCount
Set dbFields = rs.Fields
For i = 0 To dbFields.Count - 1
Debug.Print "Column #", i, dbFields.Item(i).Name
Next i
Debug.Print "Recordset item", rs(3)
rs.Close
cn.Close
Set cn = Nothing
Set rs = Nothing
End Sub
这是我在即时窗口中看到的内容:
Number of records: 5<BR>
Column # 0 F1<BR>
Column # 1 F2<BR>
Column # 2 F3<BR>
Column # 3 F4<BR>
Recordset item Null<BR>
这是我的示例 TXT 文件 b.txt。每行都以制表符开头:
Col1 Col2 Col3
11 12 13
21 22 23
这里是 schema.ini:
[b.txt]
Format=TabDelimited
ColNameHeader=False
MaxScanRows=0
您能否告知为什么记录集返回 Null 值?
更新: 问题出在我的 TXT 文件中,它以某种方式损坏。我已经在文件中重新输入了值,脚本现在可以工作了。
【问题讨论】:
-
如果您将
rs(3)更改为rs.RecordCount,它会达到您的预期吗?或rs(2)、rs(1)或rs(0)。顺便说一句,这句话很奇怪 - .CountRecord 显示正确的记录数,但它们是 Null。 -
@Vityata,问题是我可以使用 rs.RecordCount(5 条记录)检索记录数,但是 rs(i)、rs.Fields(I) 的所有值都是 Null。