如何在程序动行时改变 Adodataset的locktype。 各位高人:我在程序运行时要求把Adodataset的Marshaloptions属性改变,比如从ltOptimistic到ltReadOnly,我试过重新Open,或重新Active 都没有效果,还有maxRecords也不能在运行时改变。 请各位指点。或者UP。谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ADO以事务方式运行,把当前事务中止后,改变ADODataset的参数,重开另外一个事务试试,建议你安装最新的MDAC。 你的提法有错误,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.我标注的四句话就是关键所在,你可以分别打开和注释这四句话,看看前后的效果就知道了。 ehlib的grid组件如何显示行号? delphi中怎样能输出类的类型信息? 怎样将记录结构写入BUF中? fastreport3.23.7做图表做不来呀 請教:在ie中可以顯示的網頁,在webbrowser中確無法顯示,怎麼回事?在線等!給100分 如何用DELPHI操作ORACLE 大字段 ■■■困惑!!!序号自动加一问题,这样的SQL语句怎样写?■■■ SQL的问题: codegear.com.cn寻求合理的使用者 大家帮帮忙,公司想买我的软件版权,我该怎么办,值得卖吗? 各位来拿分!请问在delphi中判断某个表是否存在用什么语句? 招delphi程序员(广州)
至于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.
我标注的四句话就是关键所在,你可以分别打开和注释这四句话,看看前后的效果就知道了。