2014-09-06 1 views
2

У меня есть БД MySQL на Localhost, с которым я хочу получить доступ из VBA.Выбор запроса выполняется из VBA с использованием объекта ADO.RecordSet не возвращает полный результат

Я установил соединение 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 Kamat

+0

пытаются использовать records.MoveFirst перед цикл – Pundit

+0

я на Это. Будет обновляться. Спасибо –

+0

@Pundit: Спасибо, что указал мне в правильном направлении. Надеюсь, это тоже поможет другим. –

ответ

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 
Смежные вопросы