Выбор запроса от VBA с использованием объекта ADO.RecordSet не возвращает полный результат

2

У меня есть MySQL DB на Localhost, с которым я хочу получить доступ из VBA.

Я установил соединение ODBC с MySQL, и я могу запросить результаты.

В настоящее время таблица MySQL содержит 2 строки данных, которые должны быть возвращены. Но "Элементы" в "Recordset.Fields" сохраняют только последнюю строку.

Мой код выглядит следующим образом

Public Sub Query_()

Dim connection As connection
Set connection = OpenConnection()

' Create a record-set that holds all the tasks
Dim records As ADODB.Recordset
Set records = New ADODB.Recordset
Call records.Open("SELECT pk_Client, PAN_Client FROM client", connection)

Dim result() As String

For Each Item In records.Fields

    MsgBox (Item.OriginalValue)

Next

connection.Close

End Sub

Вот OpenConnection UDF:

Private Function OpenConnection() As ADODB.connection

'Read type and location of the database, user login and password

    Dim source As String, location As String, user As String, password As String
    source = "taskman"
    location = "localhost"
    user = "root"
    password = ""

'Build the connection string depending on the source

    Dim connectionString As String

    connectionString = "Driver={MySQL ODBC 5.3 Unicode Driver};Server=" & location & ";Database=taskman;UID=" & user & ";PWD=" & password

'Create and open a new connection to the selected source
    Set OpenConnection = New ADODB.connection
    Call OpenConnection.Open(connectionString)

End Function

Пожалуйста, помогите мне разобраться, почему весь результат запроса не сохраняется.

благодаря

-Chinmay Камат

  • 0
    попробуйте использовать records.MoveFirst перед циклом for
  • 0
    Я на этом. Буду обновлять. Спасибо
Показать ещё 1 комментарий
Теги:
activexobject

1 ответ

2
Лучший ответ

Вот как вы обычно кодируете такую операцию:

Public Sub Query_()

    Dim conn As ADODB.Connection
    Dim records As ADODB.Recordset, fld As ADODB.Field

    Set conn = OpenConnection()
    Set records = New ADODB.Recordset

    records.Open "SELECT pk_Client, PAN_Client FROM client", conn

    'check you got any records
    If Not records.EOF Then

        'loop over records
        Do While Not records.EOF

            Debug.Print "-------------------------"

            For Each fld In records.Fields
                Debug.Print fld.Name, fld.OriginalValue
            Next

            records.movenext 'next record
        Loop

    End If

    records.Close
    conn.Close

End Sub

Ещё вопросы

Сообщество Overcoder
Наверх
Меню