在无状态模式下,设置DatasetProvider的allowcommandtext=true
然后在客户端动态改变ClientDataSet的commandText,使用不同的sql语句取得数据。问题是:为什么第一次赋给一条语句,可以执行得到结果,第二次就不行了?
错误提示是:Can not perform this operation on an open dataset!如果我在第二次的时候,也是先close,然后,把和第一次同样的语句赋给clientdataset的commandtext去open,没有任何错误。thanks a lot 先!
然后在客户端动态改变ClientDataSet的commandText,使用不同的sql语句取得数据。问题是:为什么第一次赋给一条语句,可以执行得到结果,第二次就不行了?
错误提示是:Can not perform this operation on an open dataset!如果我在第二次的时候,也是先close,然后,把和第一次同样的语句赋给clientdataset的commandtext去open,没有任何错误。thanks a lot 先!
procedure TpurchaseCo.dspDs1BeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
begin with Sender as TDataSetProvider do
begin
if not DataSet.Active then
DataSet.Active:=True;
if not (VarIsEmpty(OwnerData) or VarIsNull(OwnerData)) then
DataSet.Locate(DataSet.Fields[0].FieldName,OwnerData,[])
else DataSet.First ;
end;end;procedure TForm1.cdsMasBeforeGetRecords(Sender: TObject;
var OwnerData: OleVariant);
var
LastValue: OleVariant;
CDSClone:TClientDataSet;
begin
if cdsMas.Active then
begin
CDSClone := TClientDataSet.Create(nil);
try
CDSClone.CloneCursor(cdsMas, True);
CDSClone.FetchOnDemand := False;
CDSClone.Last;
LastValue := CDSClone.Fields[0].AsString;
CDSClone.Close;
finally
CDSClone.Free;
end;
end else
LastValue:=null; OwnerData := LastValue;end;
无论是前台还是后台改变CommandText时,都必须先关闭它所在的记录集.
ClientDataSet1.CommandText:='select * from xxxx';
ClientDataSet1.Active:=True;屡试屡爽,某问题的啦。