在添加记录后,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();
>>>>初始化
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();
修改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);