VB6 ADODB.Recordset Свойство RecordCount всегда возвращает -1 - PullRequest
9 голосов
/ 17 февраля 2010

Я пытаюсь заставить старый код VB6 работать с SQL Server Compact.

Я могу подключиться, открыть базу данных и все, кажется, хорошо.Я могу запустить команды вставки выбора, которые работают.

Однако свойство ADODB.Recordset RecordCount всегда возвращает -1, хотя я могу получить доступ к полям и просмотреть данные.Изменение CursorLocation = adUseClient вызывает проблему при выполнении SQL (многоэтапные операции генерируют ошибки).

Option Explicit
    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 rs As ADODB.Recordset

    Set rs = New ADODB.Recordset


    Dim DbConnectionString As String

    DbConnectionString = mSqlProvider & _
                            mSqlHost


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

    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

        mCmd.CommandText = "select * from myTestTable"
        mCmd.CommandType = adCmdText

        Set rs = mCmd.Execute

        Debug.Print rs.RecordCount  ' Always returns -1  !!
        Debug.Print rs.Fields(0)   ' returns correct data for first row, first col
        Debug.Print rs.Fields(1)   ' returns correct data for first row, 2nd col
        Debug.Print rs.Fields(2)   ' returns correct data for first row, 3rd col

    End If

End Sub

Любой совет будет с благодарностью принят.

Ответы [ 11 ]

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

Заменить Set rs = mCmd.Execute на:

set rs = new ADODB.Recordset
rs.Open "select * from myTestTable", mDBConnection, adOpenDynamic, adLockOptimistic

adOpenDynamic позволит читать вперед / назад, чтобы получить ваш рекорд.

...