2015-03-30 4 views
1

Я использую Access 2010 с Excel 2010, и я бы хотел выполнить запрос с помощью команды ADO. Ниже то, что я сделал в Excel VBA:Команда ADO в VBA

Public Sub test() 
On Error GoTo TrataErro 

Dim cnn As ADODB.Connection 
Dim cmd As New ADODB.Command 
Dim rst As ADODB.Recordset 
Dim Query As String 

Set cnn = DBcnn 
Set cmd.ActiveConnection = cnn 
cmd.CommandType = adCmdText 

Query = "SELECT * FROM tblTermos WHERE Termo like @Termo" 

cmd.CommandText = Query 

cmd.Parameters.Append cmd.CreateParameter("@Termo", adVarChar, adParamInput, 500, "%[%") 

Set rst = cmd.Execute 

Do Until rst.EOF 
    MsgBox rst.Fields("Termo").Value & " " & rst.Fields("id_Grupo").Value 
    rst.MoveNext 
Loop 

DBdisconnect cnn, rst, cmd 

Exit Sub 

TrataErro: 

TrataErro "Erro durante a execução do procedimento ""TrataTermo""." 

End Sub 

Ни одно значение не возвращается, используя этот запрос выше, но в моей БД у меня есть строки с «[», «word1 [», «[word2» и другие. Однако при переписывании конкретной строки, как показано ниже, я получаю только строку с «[» значением.

cmd.Parameters.Append cmd.CreateParameter("@Termo", adVarChar, adParamInput, 500, "[") 

Как я мог выполнить этот запрос с помощью ADO Command и возвращает все значения, которые содержат «[» внутри строки?

Если я не очень хорошо объяснил свою ситуацию, пожалуйста, спросите меня больше информации. Я новичок в этом сообществе.

+0

Вы указываете, у вас есть значения в столбце 'Termo', которые начинаются с' [ '. Что происходит, когда вы добавляете свой параметр со значением '' [% "'? Например: 'cmd.Parameters.Append cmd.CreateParameter (« @ Termo », adVarChar, adParamInput, 500,« [% »)' – FreeMan

+0

Привет, FreeMan. Когда я добавляю параметр со значением «[%» (как вы писали выше), значение не возвращается. –

ответ

1

... возвращаются все значения, которые содержат «[» внутри строки

[ персонаж имеет особое значение в Like рисунка. Он используется для соответствия диапазону символов. Например, этот шаблон будет соответствовать a, b или c в любом месте Termo.

Termo Like '%[a-c]%' 

Если вы хотите, чтобы соответствовать [ характер самого, поставить его в диапазоне от себя.

Termo Like '%[[]%' 

В коде, добавьте параметр, как это ...

cmd.Parameters.Append cmd.CreateParameter("@Termo", adVarChar, adParamInput, 500, "%[[]%") 
+0

ADO имеет регулярное выражение? Кто знал? – FreeMan

+0

Удерживает '[' work - как это: ''% \ [% "'? – FreeMan

+0

Нет, это не похоже на регулярное выражение. :-) По крайней мере, я никогда не нашел способ сделать обратную косую силу буквенным символом в шаблоне «Like». – HansUp

0

Поскольку вы, кажется, имеют фиксированный параметр, который вы ищете, вы могли бы устранить параметр, делая это:

Query = "SELECT * FROM tblTermos WHERE Termo like %[%" 

Если у вас есть разные вещи вы выбираете для вас могли бы сделать что-то вроде этого :

Dim MyParm as string 
MyParm = "%[%" 
Query = "SELECT * FROM tblTermos WHERE Termo like '" & MyParm & "'" 

Не решайте вашу точную проблему, но они могут работать вокруг.

+0

Привет. Как вы это делали, вы не используете команду/параметр ADO, верно? –

+0

Исправить. вы пропустите строку 'cmd.Parameters.Append ...', но оставите ее. Извините за не указание. Проверьте ответ HansUp, хотя это может исправить. – FreeMan

Смежные вопросы