我们如何使用CRecordset批量更新记录

时间:2012-02-02 17:21:34

标签: c++ database mfc odbc

我有一个mfc应用程序,它使用CRecordsets来获取和更新/插入数据。

我能够实现批量行提取,但我现在正在寻求使用派生的CRecordset实现批量行更新/插入/删除。

有没有人这样做过?你能提供代码示例吗?

2 个答案:

答案 0 :(得分:2)

我偶然发现了一篇描述如何在CRecordset上实现批量行更新的旧帖子。 首先,您必须在记录集上实现bulk row fetching(您还可以查看this post示例)

一旦你的记录集用于获取数据,它就非常简单。

//Declare your recordset
CMyRecordsetBulk regSetBulk(&myDatabase);

//Open it
regSetBulk.Open(NULL, NULL, CRecordset::useMultiRowFetch);

//Select the row you want to change
regSetBulk.SetRowsetCursorPosition(nRow);

//Update the value(s) you need to change.
regSetBulk.m_pnPrecision = 21;

//Set the length of the data in the field you modified (the "Precision" field is a byte)
regSetBulk.m_plnPrecision = 1;


//Do the same thing for a couple of other rows

regSetBulk.SetRowsetCursorPosition(++nRow);
regSetBulk.m_pnPrecision = 32;
regSetBulk.m_plnPrecision = 1;

regSetBulk.SetRowsetCursorPosition(++nRow);
regSetBulk.m_pnPrecision = 21;
regSetBulk.m_plnPrecision = 1;

regSetBulk.SetRowsetCursorPosition(++nRow);
regSetBulk.m_pnPrecision = 12;
regSetBulk.m_plnPrecision = 1;

//Update the rows and check for errors
int nRetCode;
AFX_ODBC_CALL(::SQLSetPos(regSetBulk.m_hstmt, NULL, SQL_UPDATE, SQL_LOCK_NO_CHANGE)); 
regSetBulk.CheckRowsetError(nRetCode);

答案 1 :(得分:1)

只需使用CDatabase::ExecuteSQL即可。通过循环作为CRecordset进行更新不是您真正想要做的事情。 CRecordSet仅在使用单个条目而非整个数据集时才有用。