Сбой ADODB VB6 в SQL Compact: многошаговая операция вызвала ошибки - PullRequest
1 голос
/ 16 февраля 2010

Я преобразовываю старое приложение для использования базы данных SQL Compact (она работает нормально с SQ Server 2005 и 2008) и использование следующего кода выдает ошибку при попытке выполнить простую команду выбора:

Private Const mSqlProvider          As String = "Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;"
Private Const mSqlHost              As String = "Data Source=C:\database.sdf;"
Private mCmd                        As ADODB.Command   ' For executing SQL'
Private mDbConnection               As ADODB.Connection


Private Sub Command1_Click()

    Dim DbConnectionString As String

    DbConnectionString = mSqlProvider & _
                            mSqlHost


    Set mDbConnection = New ADODB.Connection
    mDbConnection.CursorLocation = adUseClient

    Call mDbConnection.Open(DbConnectionString)

    If mDbConnection.State = adStateOpen Then
        Debug.Print (" Database is open")
        ' Initialise the command object'
        Set mCmd = New ADODB.Command
        mCmd.ActiveConnection = mDbConnection

    End If


    mCmd.CommandText = "select * from myTable"
    mCmd.CommandType = adCmdText
    mCmd.Execute  ' FAILS HERE! '


End Sub

Я ссылался на библиотеку Microsoft ActiveX Data Access Object 6.0 в проекте.

Я получаю ошибку:

Ошибка времени выполнения -2147217887 (80040e21)

Многошаговая операция вызвала ошибки. Проверьте каждое значение статуса

Просто интересно, есть ли у кого-нибудь предложения?

Спасибо

Ответы [ 3 ]

0 голосов
/ 16 февраля 2010

Я не уверен на 100%, что ошибка в этом коде, а не в чем-то после него, и это позиция типа «последний известный хорошо». Наиболее распространенные причины ошибки:

  1. Вы неявно преобразуете данные в неправильный тип данных (например, значение альфа-строки вставляется в числовое поле.)

  2. Вы вставляете значение в неправильном формате (чаще всего это происходит в даты)

  3. Нулевое значение вставляется в поле, которое не допускает нулевые значения.

  4. Вы превысили максимальную длину поля со значением. (например, вставка строки длиной 50 символов в поле из 10 символов)

Кроме того, нет ошибки, если соединение не открыто.

0 голосов
/ 28 июня 2010

Этот вопрос очень похож на эти два:

Это будет одна из трех вещей:

  • Строка подключения (какой драйвер вы используете?)
  • Безопасность (использование встроенной безопасности вместо имени пользователя / пароля)
  • или, как сказал Беллиц, Местоположение Курсора
0 голосов
/ 16 февраля 2010

Теперь это работает:

Изменение

mDbConnection.CursorLocation = adUseClient 

до

mDbConnection.CursorLocation = adUseServer worked!  
...