在添加记录后,DataGrid无法更新???我往Product添加记录后(在Access数据表里显示已经添加该项记录),为何不更新DataGrid显示? 在重新运行程序后,显示正确结果.
>>>>初始化
m_pConnection = NULL;   
m_pRecordSetProduct = NULL;
m_pRecordSetQuery = NULL;
m_pConnection.CreateInstance(__uuidof(Connection));
m_pRecordSetProduct.CreateInstance( __uuidof(Recordset));
m_pRecordSetQuery.CreateInstance( __uuidof(Recordset));
try
{
m_pConnection->Open(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ProductLM.mdb", L"", L"", -1);
        m_pRecordSetProduct->Open("Product", (LPCSTR)m_pConnection->GetConnectionString(), 
adOpenKeyset,adLockOptimistic, adCmdTable);
m_pRecordSetQuery->Open("SELECT * FROM Product INNER JOIN ProductType ON Product.ProductID = ProductType.ProductID", 
(LPCSTR)m_pConnection->GetConnectionString(), adOpenKeyset,adLockReadOnly, adCmdTable);
}
catch (_com_error &e)
{
...
}
m_ctlDataGrid.SetRefDataSource(NULL);
m_ctlDataGrid.SetRefDataSource( (LPUNKNOWN) m_pRecordSetQuery ); m_ctlDataGrid.Refresh();>>>>添加记录函数 try
{
...
m_pRecordSetProduct->AddNew();
...
m_pRecordSetProduct->Update();
m_pRecordSetQuery->Requery(adCmdUnknown);
}
catch (_com_error &e)
{
...
} m_ctlDataGrid.SetRefDataSource(NULL);
m_ctlDataGrid.SetRefDataSource( (LPUNKNOWN) m_pRecordSetQuery ); m_ctlDataGrid.Refresh();

解决方案 »

  1.   

    修改pRecordSet->Open的第二个参数为_variant_t((IDispatch *)m_pConnection, true)
    修改pRecordSet->Open的第三个参数为adOpenDynamic
    在Access里建立查询qProduct, 然后用qProduct代替原来的Select语句 m_pConnection->Open(L"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ProductLM.mdb", L"", L"", -1);
            m_pRecordSetProduct->Open("Product", _variant_t((IDispatch *)m_pConnection, true), 
    adOpenDynamic,adLockOptimistic, adCmdTable);
    m_pRecordSetQuery->Open("qProduct", 
    _variant_t((IDispatch *)m_pConnection, true), adOpenDynamic,adLockReadOnly, adCmdTable);