Command.Execute "Object or provider is not capable of performing requested operation"

Var79
Дата: 23.12.2011 14:24:25
написал функцию которая должна проверять есть ли уже в таблице поле с заданным значением:
Public Function Exists(tableName As String, culumnName As String, uniqValue As String, needMessageIfExists As Boolean)
    Dim cmd As ADODB.Command
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim p As ADODB.Parameter
    
    Dim result As Boolean
    Dim msgBoxResult As Integer
  
    Dim curDatabase As Object
    Dim querySQLstr As String
    
    Set curDatabase = CurrentDb
    Set cnn = CurrentProject.Connection
    Set cmd = New ADODB.Command
    
    querySQLstr = "SELECT " + culumnName + " FROM " + tableName + " WHERE " + culumnName + " = :uniqValue;"
        
    With cmd
        .ActiveConnection = cnn
        .CommandText = querySQLstr
        .CommandType = adCmdText
        .NamedParameters = True
        .Parameters.Append .CreateParameter(":uniqValue", adBSTR, adParamInput, , uniqValue)
        Set rs = .Execute(, , adExecuteRecord)
    End With
        
    result = rs.RecordCount > 0
    
    Set cmd = Nothing
    rs.Close:
    Set rs = Nothing
    cnn.Close:
    Set cnn = Nothing
    Set curDatabase = Nothing
    
    If result And needMessageIfExists Then
        msgBoxResult = MsgBox("Already exists: " + uniqValue, vbOKOnly, tableName + "." + culumnName)
    End If
    
    Exists = result
End Function

но в .Execute ошибка
"Object or provider is not capable of performing requested operation"
MS Access прилинкован на таблицы MySql

подскажите что не так
подозрение на сочетание
.CommandType = adCmdText
и
.Execute(, , adExecuteRecord)
Программист-Любитель
Дата: 23.12.2011 14:30:24
CurrentDB.Execute ("SELECT " + culumnName + " FROM " + tableName + " WHERE " + culumnName + "='" + uniqValue +"'").Fields(0)


Вы всегда вместо одной строки стараетесь экран кода забабахать ?
Var79
Дата: 23.12.2011 14:33:00
Программист-Любитель,

"='" + uniqValue +"'" - не кошерно, символы могут быть любыми, поэтому использую именованный параметр, ну или подскажите как экранировать символы '
Var79
Дата: 23.12.2011 14:33:33
или как в ваш вариант добавить именованный параметр
Var79
Дата: 23.12.2011 14:35:42
если делать
.Execute()
то
rs.RecordCount = -1
хотя поле с искомым значением имеется (
Var79
Дата: 23.12.2011 14:57:39
еще подозрение на
CreateParameter(":uniqValue", adBSTR
может быть не adBSTR
Var79
Дата: 23.12.2011 16:46:13
может кто проверит, у вас работает?
Guest33
Дата: 23.12.2011 17:43:00
Если не менять запрос, то:
+
    With cmd
        .ActiveConnection = cnn
        .CommandText = querySQLstr
        .CommandType = adCmdText
        .NamedParameters = True
        .Parameters.Append .CreateParameter(":uniqValue", adBSTR, adParamInput, , uniqValue)
        Set rs = New ADODB.Recordset
        rs.CursorLocation = adUseClient
        rs.Open cmd
    End With

или проще
+
    querySQLstr = "SELECT Count(*) FROM " & tableName & " WHERE " & culumnName & " = :uniqValue;"
    With cmd
        .ActiveConnection = cnn
        .CommandText = querySQLstr
        .CommandType = adCmdText
        .NamedParameters = True
        .Parameters.Append .CreateParameter(":uniqValue", adBSTR, adParamInput, , uniqValue)
        Set rs = .Execute()
    End With
        
    result = rs(0) > 0
Guest33
Дата: 23.12.2011 17:56:25
Еще проще
+
    querySQLstr = "SELECT Count(*) FROM " & tableName & " WHERE " & culumnName & " = ?;"
    With cmd
        .ActiveConnection = cnn
        .CommandText = querySQLstr
        .CommandType = adCmdText
        .Parameters(0).Value = uniqValue
        Set rs = .Execute()
    End With
        
    result = rs(0) > 0

ЗЫ: Проверял все на локальной таблице (не линкованной)
Var79
Дата: 23.12.2011 18:25:27
Guest33,

во, спасибо, все работает! :-)