Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在.csv文件上选择在第1列和第2列之后停止工作_Sql_Excel_Vba_Csv - Fatal编程技术网

Sql 在.csv文件上选择在第1列和第2列之后停止工作

Sql 在.csv文件上选择在第1列和第2列之后停止工作,sql,excel,vba,csv,Sql,Excel,Vba,Csv,我在.csv文件中有以下行: 1234;艾因考夫;26.08.2015;137873;616005;50308;Hiag;4100000;香港南区奥特广场路8号,9999号;;;试验场道;2000;VSM80;185.05;12;155.55;0.02 我运行以下代码: Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") cn.Open "Provider=Microsoft.ACE

我在
.csv
文件中有以下行:
1234;艾因考夫;26.08.2015;137873;616005;50308;Hiag;4100000;香港南区奥特广场路8号,9999号;;;试验场道;2000;VSM80;185.05;12;155.55;0.02

我运行以下代码:

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath & ";Extended Properties=""text;HDR=Yes;FMT=Delimited"";"

sQuery = vbNullString
sQuery = sQuery & "SELECT * FROM " & strFileName
sQuery = sQuery & ";"

rs.Open sQuery, cn

If Not (rs.EOF Or rs.BOF) Then
    If InclHeaders = False Then rs.Move 1

    ReDim rsArr(1 To 1)
    i = 1
    Do While Not rs.EOF
        ReDim Preserve rsArr(1 To i)
        For j = 0 To rs.Fields.Count - 1
            rsArr(i) = Trim(rsArr(i)) & " " & rs.Fields(j)
        Next j
        i = i + 1
        rs.MoveNext
    Loop
End If
一旦到达这里,前两次就可以了:
rsArr(i)=修剪(rsArr(i))和“&rs.Fields(j)

第三个字段返回0,尽管它不应该返回,因此
rsArr(i)
的值是
1234;艾因考夫;26.08.2015;137873;616005;50308;Hiag;4100000;Place路8号,9999 Ort

我不知道为什么会这样。它在字段中循环,因此在第二个字段之后不会停止

[文件有两个标题行,这就是为什么我要移动
rs
。不过这并不重要,因为无论标题行有多少,错误都会不断发生

编辑:前五行(如果删除前两行标题行,我会遇到同样的问题,因此请小心处理)


这是瞎猜,但对于多个标题,是否可能存在一些数据类型混淆?如果是这样,我认为扩展属性末尾的
IMEX=1;
有助于管理具有不同数据类型的情况:

cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
    strPath & ";Extended Properties=""text;HDR=Yes;FMT=Delimited;IMEX=1"";"
如果这不起作用,可能会显示CSV文件的实际前5行左右,以及标题和所有内容?可能会跳出一些内容

或者,我会注意到您的数据文件似乎没有带引号的值。如果这在整个文件中是一致的,您可以采用惰性方法,将文件作为普通分隔文件读取:

Dim fields() As String

Open strPath & "\" & strFileName for Input as #1

Do Until EOF(1)
  Line Input #1, line
  fields = Split(line, ",")
  ' your other stuff here
Loop

Close #1

正常的警告是,这与健壮的CSV解析器相去甚远…

您只有一个一维数组。您不需要2吗?在循环的第一次迭代中,您的数组被定义为rsArr(1)。这意味着当您在列中循环时,您只能填充rsArr(0)和rsArr(1)在空间不足之前。这是因为您已经动态调暗了数组中的行数,但没有调暗列的任何空间。我正在先将行合并,然后在第二次迭代中按“;”分割。问题是数据源(即csv文件)是一个clusterfuck,我需要操纵它才能使用它。所以目前我只需要一个一维数组。我添加了
.csv
文件的前五行。我现在使用你的解决方案来解决我的问题。我仍然觉得它不能正常工作非常奇怪。
Dim fields() As String

Open strPath & "\" & strFileName for Input as #1

Do Until EOF(1)
  Line Input #1, line
  fields = Split(line, ",")
  ' your other stuff here
Loop

Close #1