class CDATZZ
{
public:
CDATZZ()
{
memset( (void*)this, 0, sizeof(*this) );
};
CTimem_B01;
char  m_B02[2];
char  m_B03[2];
  
BEGIN_COLUMN_MAP(CDATZZ)
COLUMN_ENTRY_TYPE(1, DBTYPE_DBTIMESTAMP, m_B01)
COLUMN_ENTRY_TYPE(2, DBTYPE_STR, m_B02)
COLUMN_ENTRY_TYPE(3, DBTYPE_STR, m_B03)
END_COLUMN_MAP()
};class CZdwsrvSet : public CCommand<CAccessor<CDATZZ> >
{
public:
HRESULT Open(CString cxsql)
{
CDataSource db;
CSessionsession;
HRESULThr;CDBPropSetdbinit(DBPROPSET_DBINIT);
dbinit.AddProperty(DBPROP_AUTH_PASSWORD, "123456");
dbinit.AddProperty(DBPROP_AUTH_USERID, "jnabc");
dbinit.AddProperty(DBPROP_INIT_DATASOURCE, "jnabc");
dbinit.AddProperty(DBPROP_INIT_LCID, (long)2052);
dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);
dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, true);hr = db.OpenWithServiceComponents("MSDAORA.1", &dbinit);
if (FAILED(hr))
return hr;hr = session.Open(db);
if (FAILED(hr))
return hr;CDBPropSetpropset(DBPROPSET_ROWSET);
propset.AddProperty(DBPROP_CANFETCHBACKWARDS, true);
propset.AddProperty(DBPROP_IRowsetScroll, true);
propset.AddProperty(DBPROP_IRowsetChange, true);
propset.AddProperty(DBPROP_UPDATABILITY, DBPROPVAL_UP_CHANGE | DBPROPVAL_UP_INSERT | DBPROPVAL_UP_DELETE );
hr = CCommand<CAccessor<CDATZZ> >::Open(session, cxsql, &propset);if (FAILED(hr))
{
AfxMessageBox("打开出错");
return hr;
}
return MoveNext();
}
};以上是连接oracle的类,用以下进行增加记录,
CZdwsrvSet datzztab;
datzztab.Open("select * from tableName");datzztab.Insert();datzztab.b01=timeValue;
lstrcpy(datzztab.b02,stringValue);
datzztab.b03=longValue;datzztab.SetData();datzztab.Close();
问题1
增加可以成功,为什么当我用 dattab.Open("select * from tableName where "
当where 后加条件,而且没有记录满足时,此时就不能正确的增加记录。
问题2
如何判断已到记录集的结尾和记录为空。
问题3
如何进行批量删除和修改。请你帮帮我,谢谢。

解决方案 »

  1.   

    上次的回答是有问题的
    1、加了这样一行后
    propset.AddProperty(DBPROP_IRowsetUpdate, true);更改成:
    CZdwsrvSet datzztab;
    datzztab.Open("select * from tableName where Condition");datzztab.fieldA=0;
    lstrcpy(datzztab.fieldB,stringValue);
    HRESULT hr=datzztab.Insert(0,true);lstrcpy(datzztab.fieldB,stringValue);
    hr=datzztab.SetData();
    hr=datzztab.Update();

    datzztab.Close();2、 可以从MoveLast 和 MoveFirst 的返回值中判断
      

  2.   

    我就纳闷,为什么不用标准SQL语句来做这些工作呢?