Bug #28454 ADO RecordSet fields collection inaccesible
Submitted: 15 May 2007 19:56 Modified: 28 May 2013 8:23
Reporter: Ralph Kolva Email Updates:
Status: Closed Impact on me:
None 
Category:Connector / ODBC Severity:S3 (Non-critical)
Version:3.51.14+ OS:Windows
Assigned to: CPU Architecture:Any

[15 May 2007 19:56] Ralph Kolva
Description:
Addressing ADO Recordset fields collection results in iDispatch error for ODBC provider version above 3.51.12 in read only recorset.  Iterating thought the fields collection works fine in provider version 3.51.12 but results in an error in 3.51.14, 3.51.15 and in 5.00.11, don't know about other versions.

XML schema is also incorrect for string returns from a Stored Procedure.  The SP tested returns 3 string fields that were converted to bin.hex types and the rs:data was padded with ASCII 3 making the return unreadable.

How to repeat:
Attempting to iterate through the fields collection results in error.

FOR EACH oField in Recorset.Fields
[23 May 2007 13:53] Tonci Grgin
Hi Ralph and thanks for your report. Please do attach test case and all relevant info to it and change status back to "Open" if problem persists.

So far, I can't repeat:
 - MySQL 5.0.38BK on WinXP Pro SP2 localhost
 - MyODBC 3.51.15GA
 - Simple table `a` with two fields:
| a     | CREATE TABLE `a` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(30) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 |
  
    Dim cx As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    cx.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;UID=root;PWD=;OPTION=16427"
    cx.Open()
    rs.Open("SELECT * FROM a", cx, CursorTypeEnum.adOpenForwardOnly, LockTypeEnum.adLockReadOnly) 'LockTypeEnum.adLockOptimistic)
    Dim oField As ADODB.Field
    Dim oStr As String
    oStr = ""
    Do Until rs.EOF
        For Each oField In rs.Fields
            oStr = oStr & (oField.Name & ": " & oField.Value) & vbCrLf
            If oField.Name = "Extra" Then
                oStr = oStr & vbCrLf
            End If
        Next
        Console.Write(oStr)
        oStr = ""
        rs.MoveNext()
    Loop
    rs.Close()
Output:
id: 1
name: -1231321
id: 2
name: 1234567890abcdefš???.-
id: 3
name: testing
...
[23 Jun 2007 23:00] Bugs System
No feedback was provided for this bug for over a month, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
[28 May 2013 8:23] Bogdan Degtyariov
Cannot continue without feedback from the reporter.
The bug is closed.