Bug #28063 MyODBC 5/ ADO record set status - adRecPermissionDenied not working correctly
Submitted: 24 Apr 2007 2:13 Modified: 22 Oct 2007 14:40
Reporter: Erica Moss Email Updates:
Status: Duplicate Impact on me:
None 
Category:Connector / ODBC Severity:S3 (Non-critical)
Version:5.0.12 OS:Windows (xp sp 2)
Assigned to: CPU Architecture:Any

[24 Apr 2007 2:13] Erica Moss
Description:
In this test a user who only has a SELECT grant is attempting to update the
datasource.  After this attempt, the recordset status should have
adRecPermissionDenied added to it, but it doesn't.  

When adUseClient cursor is used, the rs.status is set to adRecModified.
When adUseServer cursor is used, the status is set to adRecModified +
adRecIntegrityViolation.

The behavior in this test is identical for MyODBC 3.51 but a different bug is
entered for tracking purposes

How to repeat:
SETUP:
DROP TABLE IF EXISTS ado_test;
CREATE TABLE ado_test (C1 INT PRIMARY KEY, C2 CHAR(20));
INSERT INTO ado_test VALUES (1, 'A'), (2, 'B');
CREATE USER foo@localhost IDENTIFIED BY 'bar';
GRANT SELECT ON ado.* TO foo@localhost;

VB Code:
Private Sub Test()
    On Error GoTo EH
    Dim strSQL, strConn As String
    Dim connection1 As ADODB.Connection
    Dim recset1 As ADODB.Recordset
    Dim fld As Field
    Set connection1 = New ADODB.Connection
    Set recset1 = New ADODB.Recordset
    Set recset2 = New ADODB.Recordset
    
    strSQL = "SELECT * FROM ado_test"
        
    strConn = "DRIVER={MySQL Connector/ODBC v5};" & _
            "SERVER=localhost;DATABASE=ado" & _
            ";UID=foo;PWD=bar;OPTION=3;"

   ' open connection
    connection1.ConnectionString = strConn
    connection1.CursorLocation = adUseClient
   ' connection1.CursorLocation = adUseServer
    connection1.Open
    
    strSQL = "SELECT * FROM ado_test"
    recset1.Open strSQL, connection1, adOpenStatic, _
                            adLockBatchOptimistic, adCmdText
    recset1.MoveFirst

    recset1.Fields(0).Value = 111
    recset1.Fields(1).Value = "test"
    recset1.UpdateBatch
    Debug.Print "New Status: " & recset1.Status
    
    recset1.Close
    Set recset1 = Nothing

    connection1.Close
    Set connection1 = Nothing
    Exit Sub
EH:
    Debug.Print Err.Description & " " & Err.Number & vbNewLine
    Resume Next
End Sub
[22 Oct 2007 14:40] Susanne Ebrecht
This is a duplicate of bug #28062