Visual c++ 使用ODBC在MFC中创建的基于对话框的应用程序中写入数据库
嗨,我写了一个代码来读取数据库及其工作状态。但是当我尝试使用AddNew写入数据库时。但它给出了调试断言错误。这是我正在尝试的代码Visual c++ 使用ODBC在MFC中创建的基于对话框的应用程序中写入数据库,visual-c++,Visual C++,嗨,我写了一个代码来读取数据库及其工作状态。但是当我尝试使用AddNew写入数据库时。但它给出了调试断言错误。这是我正在尝试的代码 void CReadDBDlg::OnRead() { // TODO: Add your control notification handler code here CDatabase database; CString SqlString; CString sCatID, sCategory; CString sDriver = "MICROSOFT ACC
void CReadDBDlg::OnRead()
{
// TODO: Add your control notification handler code here
CDatabase database;
CString SqlString;
CString sCatID, sCategory;
CString sDriver = "MICROSOFT ACCESS DRIVER (*.mdb)";
CString sDsn;
CString sFile = "d:\\Test.mdb";
// You must change above path if it's different
int iRec = 0;
// Build ODBC connection string
sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,sFile);
TRY
{
// Open the database
database.OpenEx(NULL,false,false,sDsn);
// Allocate the recordset
CRecordset recset( &database );
// Build the SQL statement
SqlString = "SELECT CatID, Category "
"FROM Categories";
// Execute the query
recset.Open(CRecordset::snapshot,SqlString,CRecordset::appendOnly);
// Loop through each record
// Copy each column into a variable
recset.GetFieldValue("CatID",sCatID);
recset.GetFieldValue("Category",sCategory);
// goto next record
recset.MoveLast();
recset.GetFieldValue("CatID",sCatID);
//recset.AddNew();
// Close the database
database.Close();
}
CATCH(CDBException, e)
{
// If a database exception occured, show error msg
AfxMessageBox("Database error: "+e->m_strError);
}
END_CATCH;
}
您正在以快照模式(即只读)打开数据库。您需要将其作为动态集打开:
recset.Open(CRecordset::dynaset...)
我们使用的数据库是MS Acessa,代码是在Visual Studio 2008中编写的。当我们使用dyanset时,ODBC驱动程序不支持DynaSet,这是一个例外。MSDN帮助说快照也可以更新。但当我们尝试在快照中打开时,会出现一个异常,即在SQL获取之前没有绑定任何列。有人能帮上忙吗?您使用的是什么Access版本,以及是否包含Categories表中的主键?我知道你有CatID,但它真的是表中的主键吗?