2012-03-22 67 views
1

您好我写了一个代码来读取数据库及其工作。但是当它尝试使用AddNew()写入数据库时​​。但它给出了调试断言错误。这里是我正在尝试的代码在使用ODBC在MFC中创建的基于对话框的应用程序中写入数据库

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; 
} 
+0

我们正在使用的数据库是MS接取 – user1285170 2012-03-22 06:53:44

+0

和代码写在Visual Studio 2008中 – user1285170 2012-03-22 06:54:06

回答

0

您正在以快照模式打开数据库 - 这是只读的。您需要打开它作为一个动态集:

recset.Open(CRecordset::dynaset...) 
+0

当我们使用dyanset它给这个错误 – user1285170 2012-03-22 08:10:47

+0

当我们使用dyanset它给这个例外,“ODBC驱动程序不支持动态集” – user1285170 2012-03-22 08:11:31

+0

MSDN帮助表示快照也是可更新的。但是当我们尝试在快照中打开时,它会给出一个例外,即在SQL提取之前没有列被绑定。任何1可以帮助吗? – user1285170 2012-03-22 09:07:05

相关问题