如果.sql文件中的第一行为注释,则无法打开VBA ADOBD.Recordset

我在Excel中有一个宏来运行.sql文件,该文件连接到Oracle以提取数据。我的问题是,根据.sql文件的第一行是否为注释行,我有一个非常奇怪的“错误”。

如果只有--或整个注释行位于选择之后,则可以使用,但是如果第一行的--之后有某些内容,则无法使用。 (与/**/的处理相同。不能在/ *和* /之间插入内容,否则将无法正常工作。)

以下是.sql的一些示例:

示例1(无效):

-- test
select 
* 
from ABC.ABC_FIELD ABCField 
where what_ever = 15

示例2(可行):

--
select 
* 
from ABC.ABC_FIELD ABCField 
where what_ever = 15

示例3(可行):

select 
-- test
* 
from ABC.ABC_FIELD ABCField 
where what_ever = 15

以下是VBA可能相关的代码。似乎在rs.Open行失败(rs根本没有打开),但是我没有收到任何错误。因此rs.Fields.Count等于0,这使得尝试读取记录失败。

Public cnn As ADODB.Connection

...

Set cnn = New ADODB.Connection
        cnn.ConnectionString = "Dsn=ABC_ORA;UID=" & UserId & ";PWD=" & Password & ";Persist Security Info=true"
cnn.Open

...

Dim myFile As String
Dim text As String
Dim textline As String

LaRequete = ""

myFile = Application.Worksheets(FeuilleParametres).Range("FICHIER").Value

Open myFile For Input As #1

Do Until EOF(1)
    Line Input #1,textline
    LaRequete = LaRequete & textline & " " & vbCrLf
Loop
Close #1

...

Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset

rs.Open LaRequete,cnn.ConnectionString 

For iCols = 0 To rs.Fields.Count - 1
    resultatsSheet.Cells(1,iCols + 1).Value = rs.Fields(iCols).Name
Next

这是我在ADODB.Connection中遇到的两个错误。抱歉,描述是法文。

Error 1
Native Error: 0 
Number : -2147217887
Source : "microsoft OLE DB Provider for ODBC Drivers"
Description : "Une opération OLE-DB en plusieurs étapes a généré des erreurs. Vérifiez chaque valeur d'état OLE-DB disponible. Aucun travail n'a été effectué."

Error 2
Help Context : 1240640
Native Error : -2147217887
Number : -2147217887
Source : "ADODB.Connection"
Description : "Le fournisseur ne prend pas en charge cette propriété."

我希望我提供了解决此问题所需的所有信息。谢谢。

c363121143 回答:如果.sql文件中的第一行为注释,则无法打开VBA ADOBD.Recordset

最后弄清楚问题在于ADODB.Recordset仅接受以SELECT开头的查询。如果以其他任何内容开头,则会将其视为表名或类似的名称。

因此解决方案是将其嵌套在“来自(YOURQUERYHERE)的select *”中。

感谢RenéNyffenegger在这里Why can't I do a "with x as (...)" with ADODB and Oracle?

回答了它
本文链接:https://www.f2er.com/2751388.html

大家都在问