Sql ADODB连接为空,无法读取CSV文件

Sql ADODB连接为空,无法读取CSV文件,sql,vba,connection-string,adodb,recordset,Sql,Vba,Connection String,Adodb,Recordset,我已经得到下面的代码与所有文件类型,除了CSV文件的工作 我试图将一个CSV文件复制到工作表中,我把自己弄糊涂了。一切帮助都将不胜感激 调试器显示: rsConn = "" szSQL = "SELECT * FROM export.csv" 当我击中 rsData.Open szSQL, rsCon, 0, 1, 1 我转到myError错误处理程序 我把问题归结到这些步骤,但我找不到答案 szSQL = "SELECT * FROM export.cvs" Set rsCon = C

我已经得到下面的代码与所有文件类型,除了CSV文件的工作

我试图将一个CSV文件复制到工作表中,我把自己弄糊涂了。一切帮助都将不胜感激

调试器显示:

rsConn = ""
szSQL  = "SELECT * FROM export.csv"
当我击中

rsData.Open szSQL, rsCon, 0, 1, 1
我转到
myError
错误处理程序

我把问题归结到这些步骤,但我找不到答案

szSQL = "SELECT * FROM export.cvs"

Set rsCon = CreateObject("ADODB.Connection")
Set rsData = CreateObject("ADODB.Recordset")

rsCon.Open szConnect
rsData.Open szSQL, rsCon, 0, 1, 1

'These are the values being passed in.
GetData("export.csv" ,"A1:BE", "BirdFeet", "A1", "sku", True, True
整个代码如下所示:

Public Sub GetData(SourceFile As Variant, SourceSheet As String, SourceRange As String, _
                                          TargetSheet As String, TargetRange As String, _
                                          TargetSortColumn As String, _
                                          HaveHeader As Boolean, UseHeaderRow As Boolean)

Dim lColumn As Long
    Dim lCount As Long
    Dim lRow As Long

    Dim rsCon As Object
    Dim rsData As Object

    Dim szConnect As String
    Dim szSQL As String

    lRow = Range(TargetRange).Row
    lColumn = Range(TargetRange).Column
' Create the connection string.
If HaveHeader = False Then                                                          'No there is NOT a header row.
    If Val(Application.Version) < 12 Then
        szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=" & SourceFile & ";" & _
                    "Extended Properties=""Excel 8.0;HDR=No"";"
    Else
        szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                    "Data Source=" & SourceFile & ";" & _
                    "Extended Properties=""Excel 12.0;HDR=No"";"
    End If
Else                                                                                'Yes there is a Header Row
    If Val(Application.Version) < 12 Then
        szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                    "Data Source=" & SourceFile & ";" & _
                    "Extended Properties=""Excel 8.0;HDR=Yes"";"


    Else
            If (Right(SourceSheet, 4) = ".csv") Then
                szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                            "Data Source=" & SourceFile & ";" & _
                            "Extended Properties=""text; HDR=Yes; FMT=Delimited; IMEX=1;"""
            Else
                szConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=" & SourceFile & ";" & _
                            "Extended Properties=""Excel 12.0;HDR=Yes"";"
            End If
    End If
End If

If SourceSheet = "" Then 
    'Create query strings
    szSQL = "SELECT * FROM " & SourceRange$ & " ORDER BY sku;"

ElseIf SourceSheet = "DiamondAvian" Or SourceSheet = "export.csv" Then

    szSQL = "SELECT * FROM export.csv"

Else

    szSQL = "SELECT * FROM [" & SourceSheet$ & "$" & SourceRange$ & "] WHERE sku <> NULL ORDER BY " & TargetSortColumn & ";"   'THIS WORKS FOR DICIONARY

End If

On Error GoTo SomethingWrong

Set rsCon = CreateObject("ADODB.Connection")
Set rsData = CreateObject("ADODB.Recordset")

rsCon.Open szConnect
rsData.Open szSQL, rsCon, 0, 1, 1
                                                                                     ' Check to make sure we received data and copy the data
If Not rsData.EOF Then

    If HaveHeader = False Then
        Cells(1, 1).CopyFromRecordset rsData
    Else
                                                                                     'Add the header cell in each column if the last argument is True
        If UseHeaderRow Then
            For lCount = 0 To rsData.Fields.Count - 1                                'Builds the Header row one column at a time.
                Cells(lRow, lColumn + lCount).value = rsData.Fields(lCount).Name     'lcount determines the Column to paste header info in.
            Next lCount
        Cells(lRow + 1, lColumn).CopyFromRecordset rsData                            'This is the step that copies and Pastes the data.
        Else
            Cells(lRow + 1, lColumn).CopyFromRecordset rsData
        End If
    End If

Else
    MsgBox "No records returned from : " & SourceFile, vbCritical
End If

rsData.Close                                                                        ' Clean up our Recordset object.
Set rsData = Nothing
rsCon.Close
Set rsCon = Nothing

Exit Sub

SomethingWrong:

MsgBox "The file name, Sheet name or Range is invalid of : " & SourceFile, vbExclamation, "Error"

On Error GoTo 0

End Sub
Public子GetData(SourceFile作为变量,SourceSheet作为字符串,SourceRange作为字符串_
TargetSheet作为字符串,TargetRange作为字符串_
TargetSortColumn作为字符串_
HaveHeader为布尔值,UseHeaderRow为布尔值)
暗柱与长柱一样
暗淡如长
暗淡的光线和长的一样
作为对象的Dim rsCon
将数据作为对象
作为字符串连接
作为字符串的SQL
lRow=范围(目标范围)。行
lColumn=范围(TargetRange).Column
'创建连接字符串。
如果HaveHeader=False,则“否”没有标题行。
如果Val(Application.Version)<12,则
szConnect=“Provider=Microsoft.Jet.OLEDB.4.0;”_
“数据源=”&SourceFile&“;”&”_
“扩展属性=”“Excel 8.0;HDR=No”“
其他的
szConnect=“Provider=Microsoft.ACE.OLEDB.12.0;”_
“数据源=”&SourceFile&“;”&”_
“扩展属性=”“Excel 12.0;HDR=否”“
如果结束
Else'是有一个标题行
如果Val(Application.Version)<12,则
szConnect=“Provider=Microsoft.Jet.OLEDB.4.0;”_
“数据源=”&SourceFile&“;”&”_
“扩展属性=”“Excel 8.0;HDR=Yes”“
其他的
如果(右(源代码表,4)=“.csv”),则
szConnect=“Provider=Microsoft.Jet.OLEDB.4.0;”_
“数据源=”&SourceFile&“;”&”_
“扩展属性=”“text;HDR=Yes;FMT=Delimited;IMEX=1;””
其他的
szConnect=“Provider=Microsoft.ACE.OLEDB.12.0;”_
“数据源=”&SourceFile&“;”&”_
“扩展属性=”“Excel 12.0;HDR=Yes”“
如果结束
如果结束
如果结束
如果SourceSheet=“”,则
'创建查询字符串
szSQL=“按sku从”&SourceRange$&“订单中选择*”
ElseIf SourceSheet=“DiamondAvian”或SourceSheet=“export.csv”则
szSQL=“从export.csv中选择*
其他的
szSQL=“从[”&SourceSheet$&“$”&SourceRange$&“]中选择*,其中sku空顺序由“&TargetSortColumn&“;”决定”,这适用于DICIONARY
如果结束
在出错的时候出错了
设置rsCon=CreateObject(“ADODB.Connection”)
Set rsData=CreateObject(“ADODB.Recordset”)
rsCon.打开szConnect
rsData.openszsql,rsCon,0,1,1
'检查以确保我们收到数据并复制数据
如果不是rsData.EOF,则
如果HaveHeader=False,则
单元格(1,1).CopyFromRecordset rsData
其他的
'如果最后一个参数为True,则在每列中添加标题单元格
如果用的话
对于rsData.Fields.Count-1的lCount=0,每次生成一列标题行。
单元格(lRow,lColumn+lCount).value=rsData.Fields(lCount).Name'lCount确定要粘贴标题信息的列。
下一个帐户
单元格(lRow+1,lColumn).CopyFromRecordset rsData'这是复制和粘贴数据的步骤。
其他的
单元格(lRow+1,lColumn)。从记录集rsData复制
如果结束
如果结束
其他的
MsgBox“未从以下位置返回任何记录:”&SourceFile,vbCritical
如果结束
rsData.Close'清理记录集对象。
设置rsData=Nothing
rsCon.关闭
设置rsCon=Nothing
出口接头
出了点问题:
MsgBox“文件名、工作表名或范围无效:”&SourceFile,VBEquipment,“错误”
错误转到0
端接头

连接字符串为空,因为向GetData发送了错误的参数。看看这些代码片段:

SourceSheet
是调用中的第二个参数,但您可以在此处将其作为第一个参数传递:

' Here's the call to GetData
GetData("export.csv" ,"A1:BE", ...
Filename作为第一个参数进入…但下面是GetData的声明

' But look at the declaration...SourceSheet is 2nd param, not 1st...
Public Sub GetData(SourceFile As Variant, SourceSheet As String,...
现在,看看决定连接字符串的代码:

' later in code
 If (Right(SourceSheet, 4) = ".csv") Then ' It contains "A1:BE", so your logic goes awry and your connection string ends up incorrect...

想想解决这个问题会解决你的问题。

export.csv示例数据---------------------------------------------------------------------------------------------------------------------sku价格发布日期发布日期gmt B1-M 4/19/2015 11:15 4/19/2015 15:15 B8 8.06 4/19/2015 11:11 4/19/2015 15:11 B1 10.79 4/19/201511:08 4/19/2015 15:08 B2 11.65 4/19/2015 11:08 4/19/2015 15:08 B3 11.98 4/19/2015 11:08 4/19/2015 15:08 B3B 12.74 4/19/2015 11:08 4/19/2015 15:08 B4 16.24 4/19/2015 11:08 4/19/2015 15:08 SB770 4/3/2015 12:37 4/3/2015 16:37 FM97 7.52 3/24/2015 15:52