CString name1;
    CString key1;
    GetDlgItemText(IDC_EDIT1,name1);
    GetDlgItemText(IDC_EDIT2,key1);
    
    if(m_pSet->IsOpen()) m_pSet->Close();
    m_pSet->m_strFilter="[name]='"+name1+"'and[key]='"+key1+"'";
    m_pSet->Open();
    if(m_pSet->IsBOF()||m_pSet->IsEOF())
{

        MessageBox(_T("用户名或密码错误!请重新输入"));
}
    else
{
  for(m_pSet->MoveFirst();!m_pSet->IsEOF();m_pSet->MoveNext())
{
if(m_pSet->m_name==name1)
{
      m_pSet->Edit(); 
     m_pSet->m_zaixian="1";
     m_pSet->Update();
m_pSet->Requery();
}
}
MessageBox(_T("登陆成功!"));
        Cuser u;
u.DoModal();
}
    m_pSet->Close();数据库是access的,我看了dbm不是只读文件,权限也是可以读写的,但是,运行显示的就不能修改了说是只读

解决方案 »

  1.   

    你打开数据库所用的打开方式是不是readonly啊?
      

  2.   

    不是是snaphost没有readonly这个选项吧
      

  3.   

    不是是snaphost没有readonly这个选项吧
      

  4.   

    记得用snapshot好像是会有问题,改成dynaset就可以了,但是查msdn又不感觉snapshot有什么问题,另外你用的是CRecordset么?readonly是另外一个参数,不是snapshot所在位置的参数
      

  5.   

    用的是CRecordset没错那那个readonly在什么位置啊还有个问题以前就没问题但是,我换了win7之后就出问题了让我很奇怪
      

  6.   

    set->Open(CRecordset::dynaset,sql,CRecordset::none);
    试试看
      

  7.   

    1-打开的连接方式是不是readonly
    2-recordset是不是只读
    3-mdb文件本身是不是只读了,好象2003有这个毛病,遇到过但忘记怎么解决了
      

  8.   

    打开的方式应该不是不过,我找不到打开方式在哪
    mdb本身不是只读我看了
    怎么看recordset是不是只读啊
      

  9.   

     
    pRst->Open("[表名]", _variant_t(sSql), adOpenStatic,    
                       adLockBatchOptimistic, adCmdUnknown);
      

  10.   

    m_pSet->Open();这一行,Open(CRecordset::dynaset,sql,CRecordset::none)参数都写上试试,sql是你要填入的sql语句,可以填NULL
    试试看行不行
      

  11.   

    我找到问题了是因为我把数据库内的两个表放到了同一个记录集里面网上说要把两个表放到两个记录集里面要怎么把两个表放到两个记录集里?创建工程的时候,只能创建一个啊需要自己写.h和.cpp文件吗?
      

  12.   

    说错了,一个数据库里可以放多个表,我的理解一个记录集就是一个表、动态记录、CRecorset的对象,你怎么把两个表放到一个记录集里面的
      

  13.   

    那个不是只是提供可选的范围而已么?
    比如表A和表B,你生成两个CRecordset的对象分别取两个表的数据不就可以了么?
    比如CRecordset set1,set2;
    CString sql1,sql2;
    sql1="select * from A";
    sql2="select * from B";
    set1.Open(CRecordset::dynaset,sql1,CRecordset::none);
    set2.Open(CRecordset::dynaset,sql,CRecordset::none);
    这样子不行么?
      

  14.   

    m_pSet->m_zaixian="1";
    这句话是你写进数据库字段的吗?那你检查一下m_pSet->Edit();
    //////////////////////////////////////////////////////////////////
    CRecordset::Editvirtual void Edit();
      throw( CDBException, CMemoryException );说明:
    此成员函数用来支持对当前记录的修改。当应用程序调用Edit之后,就可以通过直接重新设置字段数据成员的值来改变它们。当后来应用程序重新调用Update成员函数来将这些改变保存到数据源上时,这次操作才算完成。
    注意:
    如果你已经实现了成组行读取,你就不能调用Edit。这将导致一个失败断言。虽然类CRecordset不提供用于更新成组数据行的机制,但是你可以使用ODBC API函数SQLSetPos来编写你自己的函数。有关如何做到这一点的例子,请参见DBEFETCH示例。
    ///////////////////////////////////////////////////////////////////////////////////
    以上是MSDN的解释,我再看看