Microsoft KB Archive/223771

= PRB: Appending Fields to a Recordset Generates an Error =

Article ID: 223771

Article Last Modified on 8/23/2001

-

APPLIES TO


 * Microsoft ActiveX Data Objects 2.0
 * Microsoft ActiveX Data Objects 2.01
 * Microsoft ActiveX Data Objects 2.1
 * Microsoft ActiveX Data Objects 2.5
 * Microsoft ActiveX Data Objects 2.6
 * Microsoft ActiveX Data Objects 2.7

-



This article was previously published under Q223771



SYMPTOMS
If you try to append Fields to an opened Recordset, you receive the following run-time error:

Run-time error '3219':

The operation requested by the application is not allowed in this context.

In ActiveX Data Objects version 2.7, you receive the following run-time error:

Run-time error '3219':

Operation is not allowed in this context.



CAUSE
From the ADO Help:

"Calling the fields.Append method for an open Recordset or a Recordset where the ActiveConnection property has been set, will cause a run-time error. You can only append fields to a Recordset that is not open and has not yet been connected to a data source. Typically, these are new Recordset objects that you create with the CreateRecordset method or by explicitly assigning a new Recordset object to an object variable."



RESOLUTION
There are two workarounds to getting additional Fields appended to a Recordset object.

  Create the Recordset from scratch, creating all the necessary Fields, then open the custom recordset and populate it with the necessary data: Dim rst As New ADODB.Recordset

rst.Fields.Append "xx1", adInteger rst.Fields.Append "xx2", adChar, 5 rst.Open

For Each ofld In rst.Fields Debug.Print ofld.Name Next   Use the Shape Provider Service to append the additional Fields on at the time the recordset is open. This sample uses the Biblio.mdb: Dim rst As New ADODB.Recordset

rst.Open "SHAPE {SELECT author FROM authors}" & _ "APPEND NEW adChar(10) NewCol1, NEW adChar(10) NewCol2", _ "Provider=MSDATASHAPE" & _ ";Data Provider=MSDASQL" & _ ";Data Source=" & _ ";User ID=;Password=;", _ adOpenStatic, adLockBatchOptimistic

For Each ofld In rst.Fields Debug.Print ofld.Name Next

rst.AddNew Array("author", "NewCol1", "NewCol2"), _ Array("Detroit", "string1", "string2")

rst.MoveFirst While rst.EOF <> True Debug.Print rst!author, rst!NewCol1, rst!NewCol2 rst.MoveNext Wend 



STATUS
This behavior is by design.



Steps to Reproduce Behavior
 Start Visual Basic and select a New Standard EXE Project. Form1 is created by default. Add the following Project Reference: Microsoft ActiveX Data Objects Library

</li>  Pass the following code in the Load Method of the default Form. This sample uses the Biblio.mdb: Dim rst As New ADODB.Recordset rst.Open "SELECT * FROM authors", _ "Provider=MSDASQL;Data Source=<your_dsn>;User ID=;Password=;", _ adOpenStatic, adLockBatchOptimistic rst.Fields.Append "xx1", adInteger </li> Run the project.</li></ol>

Additional query words: column

Keywords: kberrmsg kbdatabase kbprb KB223771

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.