我正在编写一个宏来将请求转换为SQL查询,执行它并在新的Excel表上返回它。
我称之为“Result”的对象应该执行查询,基本上剩下的代码应该允许我提取数据并将其放在Excel工作表上。
在研究了这个主题之后,我得到了以下代码,
错误3021:'无当前记录'。
结果是一个对象,连接是一个对象(对于连接),请求是一个字符串,这是应该执行的SQL查询。
输出是一个变量。(我不知道这是用来做什么的)。
我在Debug.Print Result(i-1)
行上得到错误。
Set Result = connection.Execute(requete)
Do
For i = 1 To Result.Fields.Count
Debug.Print Result(i - 1)
Output = Output & Result(i - 1) & ";"
Ws_res.Cells(1, 1).CopyFromRecordset Result
Next i
Output = Output & vbNewLine
Result.MoveNext
Loop Until Result.EOF
我做了更多的研究,首先使用. xml进行“测试”,然后编写其余的代码,使用GetRows()
获取查询。
If not Result.EOF Then
Output = Result.GetRows()
nbcol = UBound(Output, 1) + 1
For i = 1 To Result.Fields.Count
For j = 1 To nbcol
Debug.Print Output(i, j)
Next j
Next i
Ws_res.Cells(1, 1) = Output
Else
MsgBox ("No Data found")
End If
这段代码运行,但它总是得到我“没有数据发现”。所以我被卡住了,因为我不知道第一位是否有效。
我不知道问题是从哪里来的,代码,记录还是查询?
下面是整个函数(我已经更新了导致我的建议出现问题的位,但我又出现了3021错误):
Function fct_resultat(fichier_type As Integer, Sql As String, rgD As Range) As Variant
Dim connection As Object
Dim Result As Object
Dim SaveName As Variant
Dim Wb_Res As Workbook
Dim Ws_res As Worksheet
Dim i As Integer, j As Integer
Dim nbcol As Integer, nbrow As Integer
Dim requete As String
Set Wb_Res = Workbooks.Add
Set Ws_res = Wb_Res.Worksheets(1)
Set connection = CreateObject("ADODB.Connection")
With connection
.Provider = "Microsoft.ACE.OLEDB.12.0"
.connectionstring = "Data Source=" & ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";" & "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
.Open
End With
requete = Sql
Set Result = connection.Execute(requete)
Do
Ws_res.Range("A1").CopyFromRecordset Result
Result.MoveNext
Loop Until Result.EOF
此外,关于查询本身(requete),它是一个通过各种函数构建的字符串(目标是从用户的输入创建查询)。因此,它是一个变量字符串,在前面的代码中定义(我有一个函数用于我的sql_string和一个函数来执行查询)。
下面是一个sql查询字符串的例子(我是法国人,它用法语解释了所有细节):
SELECT bps_codeFonds, Portefeuille, bps_libellePaysEmetteur,
bps_libTypeInstr, bps_libSousTypeInstr, id_inventaire,
bps_pruDevCot
FROM [Donnees$]
WHERE bps_deviseCotation="DKK" AND
bps_quantite<10000
ORDER BY AuM ASC;
我非常熟悉SQL和SQL,但这是我第一次处理连接这两种语言的对象。
1条答案
按热度按时间qgelzfjb1#
这段代码对我很有效:
如果您的特定SQL没有返回任何结果,则需要检查数据以确保它实际上具有匹配的记录。