记录集提交时出错:缺少更新或刷新的键列信息。
记录集:
ssql = " select a.*,b.QUE_CODE " _
& " from TQ_CATALOG_QUESTION_LIST a " _
& " left join TQ_QUESTION b on a.QUESTION_ID = b.ID " _
& " and a.CATALOG_ID = " & CStr(nCatalogID)
'& " order by question_serial "
m_rcs_Catalog_Questions.Open ssql, m_Conn, adOpenStatic, adLockBatchOptimistic, adCmdText
Set m_rcs_Catalog_Questions.ActiveConnection = Nothing
提交时:
m_rcs_Catalog_Questions.Filter = 0
Set m_rcs_Catalog_Questions.ActiveConnection = m_Conn
m_rcs_Catalog_Questions.UpdateBatch '出错:
错误描述:缺少更新或刷新的键列信息
提交时测得各字段值(前三个字段为主键):
TOPIC_ID:1|CATALOG_ID:1|QUESTION_ID:1|QUESTION_SCORE:0|QUESTION_SERIAL:1|QUE_CODE:k01z01j01d00b1001|
TOPIC_ID:1|CATALOG_ID:1|QUESTION_ID:2|QUESTION_SCORE:0|QUESTION_SERIAL:2|QUE_CODE:k01z01j01d00b1002|
TOPIC_ID:1|CATALOG_ID:1|QUESTION_ID:4|QUESTION_SCORE:0|QUESTION_SERIAL:3|QUE_CODE:k01z01j01d00b1004|
TOPIC_ID:1|CATALOG_ID:1|QUESTION_ID:3|QUESTION_SCORE:0|QUESTION_SERIAL:4|QUE_CODE:k01z01j01d00b1003|
急切想找出出错原因
问题点数:0、回复次数:12Top
1 楼RUKYO(蠢蠢的男子汉 - 恋星夜柔光,舔烈酒豪情)回复于 2004-09-02 20:23:52 得分 0
DataGrid的先天缺陷看看这里:
http://www.china-askpro.com/msg49/qa51.shtml
Top
2 楼greatplain(蓝屏)回复于 2004-09-03 15:41:42 得分 0
不是这个问题
我的sql语句也有点问题,应该改为:
ssql = " select a.*,b.QUE_CODE " _
& " from TQ_CATALOG_QUESTION_LIST a " _
& " left join TQ_QUESTION b on a.QUESTION_ID = b.ID " _
& " where a.CATALOG_ID = " & CStr(nCatalogID)
'& " order by question_serial "
Top
3 楼RUKYO(蠢蠢的男子汉 - 恋星夜柔光,舔烈酒豪情)回复于 2004-09-03 16:56:47 得分 0
你SQL语句中结果集已经涉及两个表,所以就DataGrid就有这样的出错提示了,以前我也听人家说过DataGrid有这方面问题,我给你上面的链接也说得很清楚了,解决方法是用一个临时工作表存放多表查询的结果,将多表操作转换为单表操作。数据流程如下:
多表查询→记录集→临时表→录入、修改→存入基本表。
Top
4 楼RUKYO(蠢蠢的男子汉 - 恋星夜柔光,舔烈酒豪情)回复于 2004-09-03 16:57:41 得分 0
另外,把你语句单独放在SQL查询分析器里执行下看看结果是不是你期望的。Top
5 楼greatplain(蓝屏)回复于 2004-09-05 12:13:28 得分 0
结果是我期望的
我用的也不是datagrid,
就是单独的recordset
执行m_rcs_Catalog_Questions.UpdateBatch 就出错,
最后没法子我就调用m_rcs_Catalog_Questions.Update逐条提交
倒也没出错
Top
6 楼sangshuyezi(留一点空间去思考)回复于 2004-09-05 12:56:23 得分 0
批处理要将记录集的游标设成客户端的。
m_rcs_Catalog_Questions.CursorLocation = adUseClientTop
7 楼RUKYO(蠢蠢的男子汉 - 恋星夜柔光,舔烈酒豪情)回复于 2004-09-05 13:30:18 得分 0
可以用这句测试下你 Recordset 对象是否支持特定类型的功能:
If m_rcs_Catalog_Questions.Supports(adUpdateBatch) Then MsgBox "Supports"
Top
8 楼hdhai9451(☆新人类☆)回复于 2004-09-05 13:44:50 得分 0
如果你每次只提交一條記錄,就不要用adLockBatchOptimistic,而應該用adLockOptimisticTop
9 楼greatplain(蓝屏)回复于 2004-09-06 17:10:52 得分 0
to 回复人: sangshuyezi(桑树叶子)
我的连接本来就是adUseClient的,
要不然不可能执行 Set m_rcs_Catalog_Questions.ActiveConnection = Nothing
to 回复人: RUKYO(SpeakFool - 蠢蠢的男子汉)
我是以
m_rcs_Catalog_Questions.Open ssql, m_Conn, adOpenStatic, adLockBatchOptimistic, adCmdText
打开的,所以你说着这句当然是返回success
Top
10 楼sangshuyezi(留一点空间去思考)回复于 2004-09-09 08:46:47 得分 0
楼主的记录集更新是关联表,如果还没有找到原因,在提交时把它改成只更新一个单表操作试一试。Top
11 楼haohaohappy(50岁以前拿命换钱,50岁以后拿钱换命)回复于 2004-09-09 11:36:59 得分 0
只能把两张表合为一张然后导入DATAGRIDTop
12 楼greatplain(蓝屏)回复于 2004-09-10 09:07:12 得分 0
这些都不是问题的原因阿Top




