各位高人:我在程序运行时要求把Adodataset的Marshaloptions属性改变,
比如从ltOptimistic到ltReadOnly,我试过重新Open,或重新Active 都没有效果,
还有maxRecords也不能在运行时改变。
    请各位指点。或者UP。谢了!

解决方案 »

  1.   

    ADO以事务方式运行,把当前事务中止后,改变ADODataset的参数,重开另外一个事务试试,建议你安装最新的MDAC。
      

  2.   

    你的提法有错误,Marshaloptions属性是用在客户端游标返回服务器修改过的数据用的,一般情况下是默认moMarshalAll,你改不改都没有任何影响,即使你在程序中改了也没有用,它还是会固定为moMarshalAll。
    至于ltOptimistic或者ltReadOnly是属于LockType属性,maxRecords同理,在运行期间都可以修改,只是如果你不预先断开ADO的服务器连接的话,是看不到效果的(实际上确实已经改了,只是你看不到效果),下面是我试验的代码:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, CSIntf, DB, ADODB, Grids, DBGridEh;type
      TForm1 = class(TForm)
        ComboBox1: TComboBox;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        CSGlobalObject1: TCSGlobalObject;
        Button1: TButton;
        DataSource1: TDataSource;
        DBGridEh1: TDBGridEh;
        Button2: TButton;
        procedure ComboBox1DropDown(Sender: TObject);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.ComboBox1DropDown(Sender: TObject);
    begin
      with TForm2.Create(Self) do
        ShowModal;
      Abort;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      with ADoQuery1 do
      begin
        Close;
        Connection.Connected := False;//关键
        MarshalOptions := moMarshalAll;
        LockType := ltOptimistic;
        MaxRecords := 0;
        Connection.Connected := True;//关键
        Open;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      with ADOQuery1 do
      begin
        Close;
        Connection.Connected := False;//关键
        MarshalOptions := moMarshalModifiedOnly;
        LockType := ltReadOnly;
        MaxRecords := 1;
        Connection.Connected := True;//关键
        Open;
      end;
      end;
    end.
    我标注的四句话就是关键所在,你可以分别打开和注释这四句话,看看前后的效果就知道了。