Excel vba中的SQL LIKE

约玛瑟

我是在 VBA 中使用 SQL 的新手,似乎无法使我的查询正常工作。我在论坛中搜索并尝试了许多不同的解决方案,但无济于事。

这是我的代码:

Sub RequeteClasseurFerme_Excel2007()
Dim Cn As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, texte_SQL As String
Dim Rst As ADODB.Recordset
Dim CoPo As String

'Définit le classeur fermé servant de base de données
Fichier = ThisWorkbook.Worksheets("Menu").Range("B7").Value
'Nom de la feuille dans le classeur fermé
NomFeuille = "Data"
CoPo = ActiveWorkbook.Worksheets("Menu").Range("B3").Value

Set Cn = New ADODB.Connection

'--- Connexion ---
With Cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
        & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
    .Open
End With
'-----------------

'Request
request_SQL = "SELECT * FROM [" & NomFeuille & "$] WHERE [" & NomFeuille & "$].[CodePostal] LIKE '" & CoPo & "%'"

Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(request_SQL)

Worksheets("Data2").Range("A1").CopyFromRecordset Rst
'
'... la requête ...
'

'rst.Find
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing

我很确定它是这样的,因为当我删除它时,它确实返回了我所有的结果。

切廷巴索

您应该始终使用参数:

Sub RequeteClasseurFerme_Excel2007()

Dim Cn As ADODB.Connection
Dim Fichier As String
Dim NomFeuille As String, texte_SQL As String
Dim cmd As ADODB.Command
Dim Rst As ADODB.Recordset
Dim CoPo As String

'Définit le classeur fermé servant de base de données
Fichier = ThisWorkbook.Worksheets("Menu").Range("B7").Value

'Nom de la feuille dans le classeur fermé
NomFeuille = "Data"
CoPo = ActiveWorkbook.Worksheets("Menu").Range("B3").Value

Set Cn = New ADODB.Connection

'--- Connexion ---
With Cn
    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
        & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
    .Open
End With
'-----------------

'Request
request_SQL = "SELECT * FROM [" & NomFeuille & "$] WHERE [" & NomFeuille & "$].[CodePostal] LIKE ?"


Set cmd = New ADODB.Command
cmd.ActiveConnection = Cn
cmd.CommandText = request_SQL
cmd.Parameters.Append cmd.CreateParameter("@postalCode", adVarChar, adParamInput, 50)

cmd.Parameters("@postalCode").Value = CoPo + "%"

Set Rst = cmd.Execute

Worksheets("Data2").Range("A1").CopyFromRecordset Rst
'
'... la requête ...
'

'rst.Find
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章