Description of read-only recordset with Microsoft SQL Server version 6.0 and 6.5 (136994)
The information in this article applies to:
- The Microsoft Foundation Classes (MFC), when used with:
- Microsoft Visual C++ for Windows, 16-bit edition 1.51
- Microsoft Visual C++ for Windows, 16-bit edition 1.52
- Microsoft Visual C++, 32-bit Editions 2.0
- Microsoft Visual C++, 32-bit Editions 2.1
- Microsoft Visual C++, 32-bit Editions 2.2
- Microsoft Visual C++, 32-bit Editions 4.0
- Microsoft Visual C++, 32-bit Editions 4.1
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2
- Microsoft Visual C++, 32-bit Professional Edition 4.2
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
- Microsoft SQL Server 6.0
- Microsoft SQL Server 7.0
This article was previously published under Q136994 SYMPTOMS
Microsoft SQL Server versions 6.0 and 6.5 support dynasets. To use an
updatable dynaset, you must have a unique index on one or more fields in
the table. If there is no such index, the recordset will be read only.
Also, CRecordset::CanAppend() and CRecordset::CanUpdate() will return
FALSE.
STATUS
This behavior is by design.MORE INFORMATION
If you create a dynaset without specifying a unique index on one or more
fields in the table and then try to update or add a record, MFC will
throw an exception that says the cursor is read-only. Additionally, you
will see the following errors in the MFC Trace output:
In Visual C++ version 1.5x:
Cursor is read-only
State:S1009[Microsoft][ODBC SQL Server Driver][SQL Server]
Warning: 0 rows affected by update operation (expected 1).
No rows were affected by the update or delete operation.
In Visual C++ version 2.x and 4.x:
Error: failure updating record.
Cursor is read-only
State:S1009,Native:16929,Origin:[Microsoft][ODBC SQL Server Driver]
[SQL Server]
In Visual C++ 5.0, you will see:
Cursor concurrency changed
State:01S02, Native:0, Origin: [Microsoft][ODBC SQL Server Driver]
Warning: Concurrency changed by the driver.
Marking CRecordset as not updatable.
Recordset is read-only.
Note that if you use the PRIMARY KEY specification new to SQL Server
version 6.0 when creating your tables, you will automatically generate
a unique index on the primary key. Here is an example of this syntax:
CREATE TABLE Table1
(cola CHAR(8) PRIMARY KEY NOT NULL,
colb CHAR(8))
If you are using the Microsoft SQL Server ODBC driver, version 2.65.0201,
that comes with SQL Server version 6.5, MFC will throw an exception that
says:
"Invalid argument value"
Additionally, you will see the following errors in the MFC Trace output:
Error: failure updating record.
Invalid argument value
State:S1009,Native:0,Origin:[Microsoft][ODBC SQL Server Driver]
Modification Type: | Major | Last Reviewed: | 4/22/2005 |
---|
Keywords: | kbtshoot kbDatabase kbprb kbusage KB136994 kbAudDeveloper |
---|
|