要求是动态创建个表, 实现AddColumn动态添加字段, 然后实现AddItem 添加一条记录, 实现 SetItemData() 动态添加记录中某一字段的值, 我是这样实现的, 创建个表后,直接添加一个字段 "ID", 然后由使用者添写其他的字段, 问题就出在SetItemData这个实现过程中, 创建字段都没有问题, 我测试程序创建了3个字段, 当添加一行记录的时候, 第一个字段加入成功,后面的就没有了, 调试发现第2次 SetItemData 的时候,修改完数据后, Update()的时候函数没有返回,一直在执行,程序也没有死, 很邪门......小弟初学数据库开发,请大人们多多指教
开发环境: winxp sp2   ms sql 2000个人版   vc.net2005
以下是实现代码SetItemData(int nIdx, int nSubItem, LPCTSTR lpText)
{
_RecordsetPtr pRs = NULL;
HRESULT hr;
CString sCMD;
try
{
sCMD.Format( "select * from %s where ID=%d", m_sCurTabName, nIdx);
CommandDatabase( sCMD, pRs);
long nCount = 0;
CString sColName;
Fields* fields = NULL;
try{
// 取结果集的列集
hr = pRs->get_Fields(&fields);
if (SUCCEEDED(hr))
hr = fields->get_Count((long *)&nCount);
for(long i=0;i<nCount;i++)
{
BSTR bstrColName;
if( i == nSubItem )
{
hr = fields->Item[i]->get_Name(&bstrColName);
sColName = bstrColName;
break;
}
}
// 释放列集
if (SUCCEEDED(hr)) fields->Release();
}
catch (_com_error &e)
{
//::MessageBox(NULL, e.ErrorMessage(),"警告",MB_OK | MB_ICONWARNING); 
return FALSE;
} pRs->MoveFirst();
pRs->Fields->GetItem(_variant_t(sColName))->Value=_bstr_t(lpText);
pRs->Update();     //////就在这里出现的问题
}//try
catch (_com_error &e)
{
//::MessageBox(NULL,e.Description(),"警告",MB_OK | MB_ICONWARNING);
return FALSE;
}
}