ADOQuery1.FilterGroup := fgPredicate;
ADOQuery1.Filtered := true;
错误信息: '参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。'.
谁解决了,给个办法吧。
12 个解决方案
#1
哦,大家使用fgPredicate没有问题吗?为什么我的不行呢?
#2
没用过该功能,不过依据EMB网站上的例子,应该是:
if ADOQuery1.LockType = ltBatchOptimistic then
begin
ADOQuery1.Filtered := True;
ADOQuery1.FilterGroup := ...
//...
end;
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
这个是设置过滤条件的,当没有设置条件,时会出现: '参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。'.
Filtered
这个是设置过滤条件的,当没有设置条件,时会出现: '参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。'.
#5
上一贴打错了。
应该是Filter
Filter是设置过滤条件的,没有设置条件,时会出现: '参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。'.
应该是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。
不知道有没有这方面的补丁?
加不加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的过滤结果一样,显示不出缓存中删除的记录。
其他任何顺序,均提示楼顶的错误。
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.
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
fgPendingRecords这个修改数据的参数没有问题,有问题的是在缓存中删除数据的显示参数fgPredicate。
ADOQuery1.LockType := ltBatchOptimistic已经设置,还是出错。
#1
哦,大家使用fgPredicate没有问题吗?为什么我的不行呢?
#2
没用过该功能,不过依据EMB网站上的例子,应该是:
if ADOQuery1.LockType = ltBatchOptimistic then
begin
ADOQuery1.Filtered := True;
ADOQuery1.FilterGroup := ...
//...
end;
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
这个是设置过滤条件的,当没有设置条件,时会出现: '参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。'.
Filtered
这个是设置过滤条件的,当没有设置条件,时会出现: '参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。'.
#5
上一贴打错了。
应该是Filter
Filter是设置过滤条件的,没有设置条件,时会出现: '参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。'.
应该是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。
不知道有没有这方面的补丁?
加不加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的过滤结果一样,显示不出缓存中删除的记录。
其他任何顺序,均提示楼顶的错误。
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.
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
fgPendingRecords这个修改数据的参数没有问题,有问题的是在缓存中删除数据的显示参数fgPredicate。
ADOQuery1.LockType := ltBatchOptimistic已经设置,还是出错。