sql - 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
推荐阅读
- javascript - Firebase 托管:如何生成可在所有页面上使用的全局“地图/数组”,而不是在每个页面加载时解析数据库
- ios - 用排序的图像填充表格
- firebase - 当我使用 Firebase CLI 将数据发送到 Arduino UNO 到 Cloud Firestore 数据库时,我收到 404 错误
- sql - 对数据库表名使用 CONCAT
- java - 在 Spring Boot 中排除 BootstrapConfiguration 类以进行测试
- docker - Windows Docker 映像、更改语言、区域设置、标准编码
- php - 如何验证未定义的索引?
- php - Wocomerce Wordpress PHP 包装店
- 中的项目
- javascript - Safari浏览器中使用react或javascript的pointerevent的替代方法是什么?
- php - Cakephp 4.0 如何使用 Outlook Oauth2 进行身份验证?