我有一些非常大的.csv文件,我想查询这些文件并提取条目。我已经成功地在Excel 2016中使用ADO进行了设置,或者看起来如此,而且速度非常快。我正在使用以下方法查询字段ID:
SELECT * FROM <file> WHERE ID = #.
这一直很好,直到包含字母的ID号(即960545H4)为止。这些出现在文件的更下方,大约有40万行。
我认为问题在于excel假设此字段(在标题ID下)是基于第一个x条目数的数字。我希望将此设置为文本。
反正有设置字段/列的数据类型以便我可以成功查询吗?
Sub testSQL()
Dim xlcon as ADOB.Connection
Dim xlrs as ADOB.RecordSet
Dim nextRow as Integer
Dim datafilepath as String
Dim datafilename as String
Set xlcon = New ADOB.Connection
Set xlrs = New ADOB.RecordSet
datafilepath = "U:\Common\"
datafilename = "test_file"
xlcon.Provider = "Microsoft.Jet.OLEDB.4.0"
xlcon.ConnectionString = "Data Source=" & datafilepath & ";" & "Extended Properties=""text;HDR=Yes;FMT=Delimited,"""
xlcon.Open
xlrs.Open "SELECT * FROM [" & datafilename & ".csv] WHERE ID = '023487562HH'", xlcon
'the rest of the code...
我希望有些东西能延长线的长度;
SELECT * FROM [file] WHERE CStr(ID) = 34897562FD
但这似乎不起作用。
非常感谢您的帮助!
答案 0 :(得分:1)
感谢Storax关于使用架构文件的建议,我已经完成了这项工作。
我在与文件相同的位置创建了一个模式文件。该文件看起来像;
let data = new FormData();
data.append('foo', 'bar');
data.append('file', document.getElementById('file').files[0]);
let config = {
onUploadProgress: function(progressEvent) {
let percentCompleted = Math.round( (progressEvent.loaded * 100) / progressEvent.total );
}
};
axios.put('/upload/server', data, config)
.then(function (res) {
output.className = 'container';
output.innerHTML = res.data;
})
.catch(function (err) {
output.className = 'container text-danger';
output.innerHTML = err.message;
});
我现在可以返回正在寻找的ID!非常感谢Storax提供此解决方案!
答案 1 :(得分:0)
可以采用Killuminati的解决方案,并根据需要添加字段名称。参数MaxScanRows
仅确保OLEDB驱动程序将按照documentation
还可以确定字段的数据类型。使用 MaxScanRows选项,指示何时应扫描多少行 确定列类型。如果将MaxScanRows设置为0,则整个 文件被扫描。 Schema.ini中的MaxScanRows设置将覆盖 在Windows注册表中逐个文件设置。
为了声明每个字段的数据类型,可以使用这样的schema.ini
[test_file.csv]
Format=Delimited(;)
DecimalSymbol=,
ColNameHeader=False
Col1=Field1 Text
Col2=Field2 Text
Col3=Field3 Text
Col4=StartDate Date
Col5=EndDate Date
Col6=Price Currency
等号后的条目是字段名称。柱。如果文件包含标题,则可以相同,但不必相同,但这是必需的。
代码可能看起来像这样
Sub ADO()
Dim rs As New ADODB.Recordset
Dim conn As New ADODB.Connection
Dim myPath As String
myPath = ThisWorkbook.Path & "\TextFiles\"
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myPath & ";Extended Properties=""text;HDR=No;FMT=Delimited()"";"
With rs
.ActiveConnection = conn
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.Open "SELECT * FROM [test_file.csv]"
.AddNew
.Fields("Field1") = "Doe"
.Fields("Field2") = "John"
.Fields("Field3") = "123456"
.Fields("StartDate") = Date
.Fields("EndDate") = "05.10.2018"
.Fields("Price") = 1234.56
.Update
End With
conn.Close
End Sub