我用VC6通过ODBC连到SQL Server 7.0,读取可以,可是在写入时出错。
是不是用户权限问题,我已经把这个用户设置为public而且对要操作的表具有
update,delete等权限。
程序流程大致如下
select top 10 * from table1
while not eof 
{
msg=rsr->msg; if msg的长度>0 
 { 
 rsr.edit();
 rsr->send=1;
 rsr.update()
 }
rsr->movenext(); 
}
代码太长,大致意思是这样的,在msg的长度大于时,居然写入会出错

解决方案 »

  1.   

    是不是打开数据库的函数中参数应当设为可写的?例如MSDN中的CDatabase::Open()其中的参数bReadOnly应设为FALSE;bReadOnly:
    TRUE if you intend the connection to be read-only and to prohibit updates to the data source. All dependent recordsets inherit this attribute. The default value is FALSE
      

  2.   

    数据库打开语句是这样的
    spdb.OpenEx(_T("DRIVER=SQL Server;UID=yuanying;PWD=a123b123;SERVER=sql7"),0);
    CSendRecordset* srs=new CSendRecordset(&spdb);
    srs->Open(AFX_DB_USE_DEFAULT_TYPE,_T("Select top 1 * from send_tb where send_ok>0"));
    这样会不会有问题呀
      

  3.   

    是srs->Open(AFX_DB_USE_DEFAULT_TYPE,_T("Select top 10 * from send_tb where send_ok>0"));
      

  4.   

    你再把打开数据库那段代码写出来
    你在前面加上
    while not bof
    {
         rsr->movefirst();
    }
    试试看吧
      

  5.   

    如果你这段代码在同样的系统环境下以前是可以的,那么就很有可能是由SQL Server引起的。
    你在安装SQL Server时不要选window用户登陆,它是默认的。按你自己的用户名和密码登陆也就是  UID=yuanying;PWD=a123b123
      

  6.   

    to nuaawyd(我是菜鸟,我怕谁!) 
    是的,我的yuanying是正常的SQL帐号,查询时是正常的
      

  7.   

    你现在的意思是说现在可以update和edit就是不能addnew
      

  8.   

    参看
    http://www.csdn.net/expert/topic/862/862682.xml?temp=.4818842
      

  9.   

    参看
    http://www.csdn.net/expert/topic/862/862682.xml?temp=.4818842
      

  10.   

    我的是只能Select 不能Update和Edit,addnew
      

  11.   

    我用
    srs->Open(AFX_DB_USE_DEFAULT_TYPE,_T("Select top 1 * from send_tb where send_ok>0"));打开
    这个是什么意思,
    这个AFX_DB_USE_DEFAULT_TYPE和CRecordSet::dynadoc有什么区别,
    我用::dynadoc打开也是只能select 不能edit和update
      

  12.   

    还有一个问题需要说明
     我以前说好使是在SQL7.0+vc6+win2000下
    现在则是在SQl 2000+VC6+win2000下编译,然后要用在Win2000+SQL7环境
    会不会是这里的问题
      

  13.   

    CRecordset::dynamic   
    CRecordset::dynaset   
    也都是老样子