前提:
数据库ACCESS 2000,数据表DOCUMENTITEM中的字段DC_CODE为Required
ADO问题:
m_pRecordset->AddNew();报错"由于其 Required 属性设置为真(True),字段 'DOCUMENTITEM.DC_CODE' 不能包含 Null 值。在此字段中输入一个数值。"奇怪之处:
::CoInitialize(NULL);
HRESULT hr=S_OK; _ConnectionPtr m_pConn = NULL;
try
{
m_pConn.CreateInstance(__uuidof(Connection));
m_pConn->ConnectionTimeout = 30;
m_pConn->CommandTimeout = 180;
m_pConn->CursorLocation = adUseClient;
m_pConn->Open(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Simple.mdb;Persist Security Info=False","","",adOpenUnspecified); m_pConn->Execute(L"SELECT * FROM DOCUMENTITEM",&vtMissing,adCmdText); //若这一句给注释掉则成功保存数据.我在这里插入这么一句的目的是看看为什么AddNew会报错,结果发现,只要在AddNew之前的任何地方(包括其它函数中)有对数据库操作的语句,则AddNew就不会成功,不知何故? 期待大家给予指点. _RecordsetPtr pRs;
pRs.CreateInstance(__uuidof(Recordset)); pRs->Open("SELECT * FROM DOCUMENTITEM_2004100100000002 WHERE DI_CODE='test'",m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
pRs->AddNew();
....
pRs->Update(); pRs->Close();
pRs = NULL;
数据库ACCESS 2000,数据表DOCUMENTITEM中的字段DC_CODE为Required
ADO问题:
m_pRecordset->AddNew();报错"由于其 Required 属性设置为真(True),字段 'DOCUMENTITEM.DC_CODE' 不能包含 Null 值。在此字段中输入一个数值。"奇怪之处:
::CoInitialize(NULL);
HRESULT hr=S_OK; _ConnectionPtr m_pConn = NULL;
try
{
m_pConn.CreateInstance(__uuidof(Connection));
m_pConn->ConnectionTimeout = 30;
m_pConn->CommandTimeout = 180;
m_pConn->CursorLocation = adUseClient;
m_pConn->Open(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Simple.mdb;Persist Security Info=False","","",adOpenUnspecified); m_pConn->Execute(L"SELECT * FROM DOCUMENTITEM",&vtMissing,adCmdText); //若这一句给注释掉则成功保存数据.我在这里插入这么一句的目的是看看为什么AddNew会报错,结果发现,只要在AddNew之前的任何地方(包括其它函数中)有对数据库操作的语句,则AddNew就不会成功,不知何故? 期待大家给予指点. _RecordsetPtr pRs;
pRs.CreateInstance(__uuidof(Recordset)); pRs->Open("SELECT * FROM DOCUMENTITEM_2004100100000002 WHERE DI_CODE='test'",m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
pRs->AddNew();
....
pRs->Update(); pRs->Close();
pRs = NULL;
是不是DC_CODE字段你设置了不能为空,但事实上你让他为空了如果不是上面得问题,用insert table() values看看
pRs->AddNew();
....
pRs->Update();这种方式插记录,而不直接用SQL语句,因为插入的是大二进制.怎么才避免上面的错误.
要是pRs为NULL怎么办?
m_pConn->Execute(L"Insert Into [DOCUMENTITEM_2004100100000002] Values('值1','值2',.....)",&vtMissing,adCmdText);这样效率比较高