谁解决了 ADOQuery1.FilterGroup := fgPredicate报错的问题?

时间:2021-10-23 17:06:47
 ADOQuery1.Filtered := false;
 ADOQuery1.FilterGroup := fgPredicate;
 ADOQuery1.Filtered := true;

错误信息: '参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。'.
谁解决了,给个办法吧。

12 个解决方案

#1


哦,大家使用fgPredicate没有问题吗?为什么我的不行呢? 谁解决了 ADOQuery1.FilterGroup := fgPredicate报错的问题?

#2


没用过该功能,不过依据EMB网站上的例子,应该是:
if ADOQuery1.LockType = ltBatchOptimistic then
begin
  ADOQuery1.Filtered := True;
  ADOQuery1.FilterGroup := ...
//...
end;

#3


您应该设置  Filetr 属性
with ADODataSet1 do begin
  Filtered := False;
  Filter := 'State = ' + QuotedStr('CA') + ' OR ' +
    'State = ' + QuotedStr('CA');
  Filtered := True;
end;

#4


你可能没有设置
Filtered
这个是设置过滤条件的,当没有设置条件,时会出现: '参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。'.

#5


上一贴打错了。
应该是Filter
Filter是设置过滤条件的,没有设置条件,时会出现: '参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。'.

#6


上面说的似乎都不是,我也在网上找了很久,很多这个问题,但都没有答案,貌似就是这个参数的问题fgPredicate,FilterGroup 的其他参数都正常。
加不加Filter 都提示错误。
FilterGroup 在前在后也都提示错误。

  ADOQuery1.LockType := ltBatchOptimistic;
  ADOQuery1.Close;
  ADOQuery1.sql.Clear;
  ADOQuery1.sql.add('select *  from ceshi');
  ADOQuery1.Open;

  ADOQuery1.Filtered := false;
  ADOQuery1.Filter := '无论怎么设置都不行';
  ADOQuery1.Filtered := true;
  ADOQuery1.FilterGroup := fgPredicate;
可能真是ADO的一个BUG。
不知道有没有这方面的补丁?

#7


 ADOQuery1.FilterGroup := fgPredicate;
  ADOQuery1.Filter := 'b > ' + QuotedStr('30');
  Memo1.Lines.add(ADOQuery1.Filter);  //仅为了注释,没有其他意义
  ADOQuery1.Filtered := true;
奇怪了,如果是这样的顺序,不会出现错误提示,但是得不出正确的结果,和去掉fgPredicate的过滤结果一样,显示不出缓存中删除的记录。
其他任何顺序,均提示楼顶的错误。

#8


这个过滤真的不好用。

#9


你先设置一下这个值,再打开数据
ADOQuery1.LockType := ltBatchOptimistic

#10


delphi 中的 fgPendingRecords 中提到了
fgPendingRecords Filters to show just the rows that have been changed and the changes have not been applied ( UpdateBatch method) or canceled ( CancelBatch).

delphi 中 UpdateBatch 的帮助中提到
Note: To use batch updating, the CursorType property of the dataset component must be either ctKeySet (the default) or ctStatic and the LockType property must be ltBatchOptimistic.

#11


//修改数据 之前再执行
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.Active:=false;
ADOQuery1.LockType := ltBatchOptimistic;
ADOQuery1.Active:=true;
end;
//修改外数据后再再执行:
procedure TForm1.Button2Click(Sender: TObject);
begin
 ADOQuery1.Filtered:=false;
  ADOQuery1.Filtered:=true;
 ADOQuery1.FilterGroup:=fgPendingRecords ;
//如果想更新数据可以这样
  if ADOQuery1.RecordCount>0 THEN     ADOQuery1.UpdateBatch();
end;

#12


引用 9 楼 shw014 的回复:
你先设置一下这个值,再打开数据
ADOQuery1.LockType := ltBatchOptimistic

fgPendingRecords这个修改数据的参数没有问题,有问题的是在缓存中删除数据的显示参数fgPredicate。
ADOQuery1.LockType := ltBatchOptimistic已经设置,还是出错。

#1


哦,大家使用fgPredicate没有问题吗?为什么我的不行呢? 谁解决了 ADOQuery1.FilterGroup := fgPredicate报错的问题?

#2


没用过该功能,不过依据EMB网站上的例子,应该是:
if ADOQuery1.LockType = ltBatchOptimistic then
begin
  ADOQuery1.Filtered := True;
  ADOQuery1.FilterGroup := ...
//...
end;

#3


您应该设置  Filetr 属性
with ADODataSet1 do begin
  Filtered := False;
  Filter := 'State = ' + QuotedStr('CA') + ' OR ' +
    'State = ' + QuotedStr('CA');
  Filtered := True;
end;

#4


你可能没有设置
Filtered
这个是设置过滤条件的,当没有设置条件,时会出现: '参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。'.

#5


上一贴打错了。
应该是Filter
Filter是设置过滤条件的,没有设置条件,时会出现: '参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。'.

#6


上面说的似乎都不是,我也在网上找了很久,很多这个问题,但都没有答案,貌似就是这个参数的问题fgPredicate,FilterGroup 的其他参数都正常。
加不加Filter 都提示错误。
FilterGroup 在前在后也都提示错误。

  ADOQuery1.LockType := ltBatchOptimistic;
  ADOQuery1.Close;
  ADOQuery1.sql.Clear;
  ADOQuery1.sql.add('select *  from ceshi');
  ADOQuery1.Open;

  ADOQuery1.Filtered := false;
  ADOQuery1.Filter := '无论怎么设置都不行';
  ADOQuery1.Filtered := true;
  ADOQuery1.FilterGroup := fgPredicate;
可能真是ADO的一个BUG。
不知道有没有这方面的补丁?

#7


 ADOQuery1.FilterGroup := fgPredicate;
  ADOQuery1.Filter := 'b > ' + QuotedStr('30');
  Memo1.Lines.add(ADOQuery1.Filter);  //仅为了注释,没有其他意义
  ADOQuery1.Filtered := true;
奇怪了,如果是这样的顺序,不会出现错误提示,但是得不出正确的结果,和去掉fgPredicate的过滤结果一样,显示不出缓存中删除的记录。
其他任何顺序,均提示楼顶的错误。

#8


这个过滤真的不好用。

#9


你先设置一下这个值,再打开数据
ADOQuery1.LockType := ltBatchOptimistic

#10


delphi 中的 fgPendingRecords 中提到了
fgPendingRecords Filters to show just the rows that have been changed and the changes have not been applied ( UpdateBatch method) or canceled ( CancelBatch).

delphi 中 UpdateBatch 的帮助中提到
Note: To use batch updating, the CursorType property of the dataset component must be either ctKeySet (the default) or ctStatic and the LockType property must be ltBatchOptimistic.

#11


//修改数据 之前再执行
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.Active:=false;
ADOQuery1.LockType := ltBatchOptimistic;
ADOQuery1.Active:=true;
end;
//修改外数据后再再执行:
procedure TForm1.Button2Click(Sender: TObject);
begin
 ADOQuery1.Filtered:=false;
  ADOQuery1.Filtered:=true;
 ADOQuery1.FilterGroup:=fgPendingRecords ;
//如果想更新数据可以这样
  if ADOQuery1.RecordCount>0 THEN     ADOQuery1.UpdateBatch();
end;

#12


引用 9 楼 shw014 的回复:
你先设置一下这个值,再打开数据
ADOQuery1.LockType := ltBatchOptimistic

fgPendingRecords这个修改数据的参数没有问题,有问题的是在缓存中删除数据的显示参数fgPredicate。
ADOQuery1.LockType := ltBatchOptimistic已经设置,还是出错。