Sql VBA/ADO查询在我的计算机上运行,在同事的计算机上失败

Sql VBA/ADO查询在我的计算机上运行,在同事的计算机上失败,sql,excel,vba,ado,Sql,Excel,Vba,Ado,下面的代码在我的计算机上运行得非常好。我不明白为什么它不能在另一台电脑上工作。有人能给我一些想法,帮助我解决这个问题吗? 错误(注释为on错误)是数组没有加载数据。获取类似“当前记录的bof或eof为真”的错误 我还可以告诉你,如果on错误GoTo NEXTT保持开启状态。。它到达那里并尝试擦除数组并返回错误的数据类型错误。让我觉得数组是空的 我检查了连接状态,可以确认连接已打开 Function sbADO(ban_id, upc_id, div_id) 'Must add Activex d

下面的代码在我的计算机上运行得非常好。我不明白为什么它不能在另一台电脑上工作。有人能给我一些想法,帮助我解决这个问题吗? 错误(注释为on错误)是数组没有加载数据。获取类似“当前记录的bof或eof为真”的错误

我还可以告诉你,如果on错误GoTo NEXTT保持开启状态。。它到达那里并尝试擦除数组并返回错误的数据类型错误。让我觉得数组是空的

我检查了连接状态,可以确认连接已打开

Function sbADO(ban_id, upc_id, div_id)
'Must add Activex data objects libaray 2.8
Dim sSQLSting As String
On Error GoTo nextt

Dim Conn As New ADODB.Connection
Dim mrs As New ADODB.Recordset

Dim DBPath As String, sconnect As String



DBPath = ThisWorkbook.FullName

'You can provide the full path of your external file as shown below


sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBPath _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

Conn.Open sconnect
sSQLSting = "SELECT * From [data$] where BANNER_ID IN (" & ban_id & ") AND UPC_ID IN (" & upc_id & ") AND DIVISION_ID IN (" & div_id & ") " 'Your SQL Statemnt (Table Name= Sheet Name=[DataSheet$])

    mrs.Open sSQLSting, Conn
        '=>Load the Data into an array
        ReturnArray = mrs.GetRows
                ''OR''
        '=>Paste the data into a sheet
        'Sheets("Sheet1").Range("A2").CopyFromRecordset mrs
    'Close Recordset
    mrs.Close

'Close Connection
Conn.Close

'
Exit Function
nextt:
Erase ReturnArray
'mrs.Close
Conn.Close
    'MsgBox (ReturnArray(6, 2)) '(feild, row)

End Function
问题在于
DBPath=ThisWorkbook.FullName您似乎在使用ADO查询同一工作簿中的数据?这可能是为了简化这个问题,但是通过直接引用范围来获取所需的数组会更容易、更快。但是在这个答案中,我假设您确实想要使用ADO

您试图使用ADO打开工作簿,但没有指定ConnectionString或具有任何只读参数的open方法。尝试进行以下调整:

'Add Mode=Read

sconnect = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBPath & _
";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";Mode=Read;"

'Add adLockReadOnly
mrs.Open sSQLSting, Conn, , adLockReadOnly

由于您使用早期绑定,其他同事是否在VBE>工具>引用中检查了ADO引用?它是如何失败的?错误消息?没有结果?“不起作用”不是对实际问题的有用描述。数组似乎没有加载任何内容,因此我发现一个错误—bof或eof为真或当前记录—是的,其他同事检查了与我在“引用”窗口中所做的相同的内容。在进行了规定的更改后,我仍然会收到相同的错误。有什么想法吗?你是不是碰巧让我把所有东西都设置为只读?我想我需要的正好相反。如果文件是只读的,那么您可以拥有的唯一访问权限(以及您需要的唯一访问权限,给定您的SQL)是只读的,并且您需要显式地指定它。我原以为我已经指定了正确的ConnectionString参数,但可能有一个Excel特定的只读名称-值对……当文件未设置为只读时,上述方法有效。我必须使它只读。但是,我认为连接需要写入权限才能填充数组。(或者看起来是这样)。基本上,我在SHEET1上有数据,我想使用ADO SQL将数据从SHEET1写入数组。。当文件不是只读文件时,它工作。。当文件设置为只读时失败。我很困惑为什么会发生这种情况。为什么连接需要写入权限才能读取数据?ADO正在尝试以读写方式打开连接,但无法打开,因为该文件是只读的(并且已打开),但您应该能够使连接以只读方式工作,因为您没有写入任何数据。