如下,是访问SQL server2000数据库
class CMy
{
public:
CMy()
{
//memset( (void*)this, 0, sizeof(*this) );
ClearFields();
}; inline void ClearFields()
{
memset( (void*)this, 0, sizeof(*this) );
};
int m___ID;
char m_column0[21];
char m_column1[21];BEGIN_COLUMN_MAP(CMy)
COLUMN_ENTRY_TYPE(1, DBTYPE_I4, m___ID)
COLUMN_ENTRY_TYPE(2, DBTYPE_STR, m_column0)
COLUMN_ENTRY_TYPE(3, DBTYPE_STR, m_column1)
END_COLUMN_MAP()
};class COLEDBDemoSet : public CCommand<CAccessor<CMy> >
{
public:
HRESULT Open()
{
CDataSource db;
CSession session;
HRESULT hr; CDBPropSet dbinit(DBPROPSET_DBINIT);
dbinit.AddProperty(DBPROP_AUTH_INTEGRATED, "SSPI");
dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
dbinit.AddProperty(DBPROP_INIT_CATALOG, "Employees");
dbinit.AddProperty(DBPROP_INIT_LCID, (long)2052);
dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4); hr = db.OpenWithServiceComponents("SQLOLEDB.1", &dbinit);
if (FAILED(hr))
return hr;
hr = session.Open(db);
if (FAILED(hr))
return hr;
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_CANFETCHBACKWARDS, true);
propset.AddProperty(DBPROP_IRowsetScroll, true);
propset.AddProperty(DBPROP_IRowsetChange, VARIANT_TRUE);
propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE ); hr = CCommand<CAccessor<CMy> >::Open(session, "SELECT * FROM dbo.部门", &propset);
if (FAILED(hr))
return hr;
return MoveNext();//这里不太明白,为什么返回next,那第一条记录不会被跳过吗。。请解答,本人初学
}
};
................................
//增加一条记录
void COLEDBDemoView::onAddNewRecord()
{
SaveRecord();
AddRecord();
}void COLEDBDemoView::AddRecord()
{
m_bAddingRecord = TRUE;
m_pSet->ClearFields();
UpdateData(FALSE);
}
//保存记录
BOOL COLEDBDemoView::SaveRecord()
{
if(!UpdateData(TRUE))
return FALSE;
if(m_bAddingRecord)
{
m_bAddingRecord = FALSE;
if(FAILED(m_pSet->Insert()))//每次增加都没成功,进入下面提示Insert failed,不知原因
{
AfxMessageBox("Insert failed", MB_ICONEXCLAMATION);
m_pSet->MoveFirst();
UpdateData(FALSE);
return FALSE;
}
}
else if(FAILED(m_pSet->SetData(0)))//这里也不明白,每次都进入下面提示"Update via SetData failed"
{
AfxMessageBox("Update via SetData failed", MB_ICONEXCLAMATION);
UpdateData(FALSE);
return FALSE;
}
return TRUE;
}
先谢了!!!!!!!!!!!!!
class CMy
{
public:
CMy()
{
//memset( (void*)this, 0, sizeof(*this) );
ClearFields();
}; inline void ClearFields()
{
memset( (void*)this, 0, sizeof(*this) );
};
int m___ID;
char m_column0[21];
char m_column1[21];BEGIN_COLUMN_MAP(CMy)
COLUMN_ENTRY_TYPE(1, DBTYPE_I4, m___ID)
COLUMN_ENTRY_TYPE(2, DBTYPE_STR, m_column0)
COLUMN_ENTRY_TYPE(3, DBTYPE_STR, m_column1)
END_COLUMN_MAP()
};class COLEDBDemoSet : public CCommand<CAccessor<CMy> >
{
public:
HRESULT Open()
{
CDataSource db;
CSession session;
HRESULT hr; CDBPropSet dbinit(DBPROPSET_DBINIT);
dbinit.AddProperty(DBPROP_AUTH_INTEGRATED, "SSPI");
dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);
dbinit.AddProperty(DBPROP_INIT_CATALOG, "Employees");
dbinit.AddProperty(DBPROP_INIT_LCID, (long)2052);
dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4); hr = db.OpenWithServiceComponents("SQLOLEDB.1", &dbinit);
if (FAILED(hr))
return hr;
hr = session.Open(db);
if (FAILED(hr))
return hr;
CDBPropSet propset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_CANFETCHBACKWARDS, true);
propset.AddProperty(DBPROP_IRowsetScroll, true);
propset.AddProperty(DBPROP_IRowsetChange, VARIANT_TRUE);
propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE ); hr = CCommand<CAccessor<CMy> >::Open(session, "SELECT * FROM dbo.部门", &propset);
if (FAILED(hr))
return hr;
return MoveNext();//这里不太明白,为什么返回next,那第一条记录不会被跳过吗。。请解答,本人初学
}
};
................................
//增加一条记录
void COLEDBDemoView::onAddNewRecord()
{
SaveRecord();
AddRecord();
}void COLEDBDemoView::AddRecord()
{
m_bAddingRecord = TRUE;
m_pSet->ClearFields();
UpdateData(FALSE);
}
//保存记录
BOOL COLEDBDemoView::SaveRecord()
{
if(!UpdateData(TRUE))
return FALSE;
if(m_bAddingRecord)
{
m_bAddingRecord = FALSE;
if(FAILED(m_pSet->Insert()))//每次增加都没成功,进入下面提示Insert failed,不知原因
{
AfxMessageBox("Insert failed", MB_ICONEXCLAMATION);
m_pSet->MoveFirst();
UpdateData(FALSE);
return FALSE;
}
}
else if(FAILED(m_pSet->SetData(0)))//这里也不明白,每次都进入下面提示"Update via SetData failed"
{
AfxMessageBox("Update via SetData failed", MB_ICONEXCLAMATION);
UpdateData(FALSE);
return FALSE;
}
return TRUE;
}
先谢了!!!!!!!!!!!!!
解决方案 »
- Timer Bar怎么实现啊,类似刻度条,上面有时间刻度
- 我这样的代码有问题?在线等
- 关于动态加载DLL的问题
- 如何在我线程函数中调用我主框家里的成员变量!马上在线给分
- 谁知道DBGrid控件的详细资料
- 100分提问:如何让一个对话框显示在所有对话框的上面?
- 很简单的问题。如何写一个链接库程序。
- 如何使自己的应用程序不会在进程管理器中被关闭?up有分!
- 我在东莞工作了,怎么、啥时报名明年3月份的C二级考试?谢谢先
- 其他控件遮盖住PICTURE控件画的表格
- 关于CTreeCtrl怎样获得滚动条事件
- ftp客户端程序,有文件夹:127.0.0.1\01\02,可否SetCurrentDirectory("127.0.0.1\01\02")?如果不行,该怎么办?
BOOL COLEDBDemoView::OnMove(UINT nIDMoveCommand)
{
SaveRecord();
return COleDBRecordView::OnMove(nIDMoveCommand);
}
就是插入数据后,当要执行下条记录时才进行保存,但是保存时记录是插入失败的