不小心把客户数据库的兼容性从80改成了90,改回80后出现了客户应用程序出现了一系列问题:
1、运行了7-8年的delphi程序T-query控件报错,提示:can't modify a read only dataset;
2、查询库存时出现死锁,以前从来没出现过死锁的问题

解决方案 »

  1.   

    界面看有时没刷新,用以下SQL查看. select name,compatibility_level 
     from sys.databases 
     where name='[数据库名]'
      

  2.   

    客户程序,已经运行了7-8年,突然出现像下面的错误,数据库的哪些配置改变会造成下面的影响?
    procedure TForm1.Button1Click(sender : TObject)
    begin
      with Query1 do
      begin
        Close;
        Databasename := 'c:\';
        sql.clear;
        sql.Add('select * from aa');
        open;       //open没问题
      end;
      while not  Query1.eof do
      begin  
        Query1.edit;      //奇怪,这里不能edit,什么问题?
        Query1.FieldByName('id').asInteger := 11;
        Query1.post;
        next;
      end;
    end;用 update aa set id=11 就可以完成,
      

  3.   

    query1.edit 不是数据库里的问题吧.
      

  4.   

    客户的delphi程序已经用了7-8年
      

  5.   

    现在要重新改delphi的代码才可以。哭啊,被骂死
      

  6.   

    在查询可用库存的时候,用下面的语句查看锁资源,发现很多object对象锁,是S锁
    SELECT request_session_id as spid, 
     db_name(resource_database_id) as dbname, 
        CASE 
       WHEN resource_type = 'OBJECT' THEN 
             object_name(resource_associated_entity_id)
       WHEN resource_associated_entity_id = 0 THEN 'n/a'
       ELSE object_name(p.object_id) 
     END as entity_name, index_id,
           resource_type as resource, 
        resource_description as description, 
           request_mode as mode, request_status as status
    FROM sys.dm_tran_locks t LEFT JOIN sys.partitions p
    ON p.hobt_id = t.resource_associated_entity_id
    WHERE resource_database_id = db_id();
      

  7.   

    Tquery控件的编辑,除了在delphi中设置控件的属性外,还要求数据库服务器的什么选项?
      

  8.   

    delphi的控件属性,只是在delphi里设置,和数据库没关系.
      

  9.   

    我在存储过程中设置
            SET ARITHABORT ON ;这个选项是会话级,还是数据库级别?        
         
      

  10.   

    另外,就是,我在存储过程中用try catch,在catch中回滚事务,但是,存储过程中出错的时候不会到catch块中,和兼容级别有关系吗?
      

  11.   

    兼容级别80不支持try catch报错can't modify a read only dataset和兼容级别没有关系。
      

  12.   

    can't modify a read only dataset不能修改只读的dataset ,应该是前台客户端上出现了报错。
      

  13.   

    我又测试了下,兼容级别是80的时候,执行try catch的存储过程,并不报错。只是执行的时候,异常不进入catch块,NND
      

  14.   

    本帖最后由 fcuandy 于 2011-07-12 11:02:14 编辑