2.增加记录
增加记录使用AddNew()函数,要求数据库必须是以允许增加的方式打开:
m_pSet->AddNew(); //在表的末尾增加新记录 m_pSet->SetFieldNull(&(m_pSet->m_type), FALSE); m_pSet->m_type=″电动机″; …… //输入新的字段值 m_pSet->Update(); //将新记录存入数据库 m_pSet->Requery(); //重建记录集
3.删除记录
可以直接使用Delete()函数来删除记录,并且在调用Delete()函数之后不需调用Update()函数:
m_pSet->Delete(); if (!m_pSet->IsEOF()) m_pSet->MoveNext(); else m_pSet->MoveLast();
4.修改记录
修改记录使用Edit()函数:
m_pSet->Edit(); //修改当前记录 m_pSet->m_type=″发电机″; //修改当前记录字段值 …… m_pSet->Update(); //将修改结果存入数据库 m_pSet->Requery();
5.撤消操作
如果用户选择了增加或者修改记录后希望放弃当前操作,可以在调用Update()函数之前调用:
CRecordSet::Move(AFX_MOVE_REFRESH)来撤消增加或修改模式,并恢复在增加或修改模式之前的当前记录。其中,参数AFX_MOVE_REFRESH的值为零。
6.数据库连接的复用
在CRecordSet类中定义了一个成员变量m_pDatabase:
CDatabase* m_pDatabase;
它是指向对象数据库类的指针。如果在CRecordSet类对象调用Open()函数之前,将一个已经打开的CDatabase类对象指针传给m_pDatabase,就能共享相同的CDatabase类对象。如:
CDatabase m_db; CRecordSet m_set1,m_set2; m_db.Open(_T(″Super_ES″)); //建立ODBC连接 m_set1.m_pDatabase=&m_db; //m_set1复用m_db对象 m_set2.m_pDatabse=&m_db; // m_set2复用m_db对象
7.SQL语句的直接执行
虽然我们可以通过CRecordSet类完成大多数的查询操作,而且在CRecordSet::Open()函数中也可以提供SQL语句,但是有时候我们还是希望进行一些其他操作,例如建立新表、删除表、建立新的字段等,这时就需要使用CDatabase类直接执行SQL语句的机制。通过调用CDatabase::ExecuteSQL()函数来完成SQL语句的直接执行:
BOOL CDB::ExecuteSQLAndReportFailure(const CString& strSQL) {TRY {m_pdb->ExecuteSQL(strSQL); //直接执行SQL语句} CATCH (CDBException,e) {CString strMsg; strMsg.LoadString(IDS_EXECUTE_SQL_FAILED); strMsg+=strSQL; return FALSE;} END_CATCH return TRUE;}
应当指出的是,由于不同的DBMS提供的数据操作语句不尽相同,直接执行SQL语句可能会破坏软件的DBMS无关性,因此在应用中应当慎用此类操作。
8.动态连接表
表的动态连接可以利用在调用CRecordSet::Open()函数时指定SQL语句来实现。同一个记录集对象只能访问具有相同结构的表,否则查询结果将无法与变量相对应。
void CDB::ChangeTable() { if (m_pSet->IsOpen()) m_pSet->Close(); switch (m_id) { case 0: m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE, ″SELECT * FROM SLOT0″); //连接表SLOT0 m_id=1; break; case 1: m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE, ″SELECT * FROM SLOT1″); //连接表SLOT1 m_id=0; break; }}
9.动态连接数据库
可以通过赋与CRecordSet类对象参数m_pDatabase来连接不同数据库的CDatabase对象指针,从而实现动态连接数据库。
void CDB::ChangeConnect() {CDatabase* pdb=m_pSet->m_pDatabase; pdb->Close(); switch (m_id) { case 0: if (!pdb->Open(_T(″Super_ES″))) //连接数据源Super_ES { AfxMessageBox(″数据源Super_ES打开失败″,″请检查相应的ODBC连接″, MB_OK|MB_ICONWARNING); exit(0); } m_id=1; break; case 1: if (!pdb->Open(_T(″Motor″))) //连接数据源Motor { AfxMessageBox(″数据源Motor打开失败″,″请检查相应的ODBC连接″, MB_OK|MB_ICONWARNING); exit(0); } m_id=0; break; }}
总结:Visual C++中的ODBC类库可以帮助程序员完成绝大多数的数据库操作。利用ODBC技术使得程序员从具体的DBMS中解脱出来,从而可以减少软件开发的工作量,缩短开发周期,并提高效率和软件的可靠性。  
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |