1

我正在将旧应用程序转换为使用 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 数据访问对象 6.0 库。

我得到的错误是:

运行时错误 -2147217887 (80040e21)

多步操作产生错误。检查每个状态值

只是想知道是否有人有任何建议?

谢谢

4

3 回答 3

0

现在得到这个工作:

改变

mDbConnection.CursorLocation = adUseClient 

mDbConnection.CursorLocation = adUseServer worked!  
于 2010-02-16T14:55:09.243 回答
0

我不是 100% 确定错误来自此代码,而不是它之后的内容,这是“最后已知的良好”类型位置。最常见的错误原因:

  1. 您正在将数据隐式转换为错误的数据类型(例如,正在将一个字母字符串值插入到数字字段中。)

  2. 您正在插入格式错误的值(往往最常发生在日期上)

  3. 正在将空值插入到不允许空值的字段中。

  4. 您已超过字段的最大长度值。(例如,在 10 个字符的字段中粘贴 50 个字符长的字符串)

此外,如果连接未打开,则不会出现任何错误。

于 2010-02-16T15:02:12.000 回答
0

这个问题与这两个非常相似:

这将是以下三件事之一:

  • 连接字符串(您使用的是什么驱动程序?)
  • 安全性(使用集成安全性而不是用户名/密码)
  • 或如贝利兹所说,光标位置
于 2010-06-28T02:31:34.013 回答