关于ado的batchupdata,(50分)

  • 主题发起人 主题发起人 陈晨
  • 开始时间 开始时间

陈晨

Unregistered / Unconfirmed
GUEST, unregistred user!
当filtergroup := fgPredicate;变量或者类型不正确,
或者不在可接受的范围之内,要不就是与其他数据冲突。

其它的值没问题。
 
我在实现Delphi 5.X ADO_MTS_COM+高级程序设计篇第二章的batchupdata时出现的现象
我用的是oracle 数据库。其他同原书介绍。请各位帮忙。分数好商量,
 
怎么没有人回答呢?分数,我有好多呢,都给你们。
 
各位,发表点意见呀
 
老兄,帮不了啦。
或者,Filtered not true。
又或者,根本就不在ltBatchOptimistic中!
再或者,跳楼吧。
 
delphi封装的ado是好象很不完善。
 
应该是Ado的bug了。
设为fgPredicate时的确出错,其他值正常。
我试着直接加入
if (DataModule2.AdoQuery1.LockType = ltBatchOptimistic) then
begin
DataModule2.AdoQuery1.Filtered := True;
// DataModule2.AdoQuery1.FilterGroup := fgPredicate;
DataModule2.ADOQuery1.Recordset.Filter := 4;
DataModule2.ADOQuery1.First;
end;
出错相同。进AdoDB单元查看
追踪到TCustomADODataSet.SetFilterGroup
procedure TCustomADODataSet.SetFilterGroup(const Value: TFilterGroup);
begin
CheckBrowseMode;
inherited SetFilterText('');
FFilterGroup := Value;
if (FFilterGroup <> fgUnassigned) and Filtered then
begin
Recordset.Filter := Integer(FilterGroupValues[FFilterGroup]);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
First;
end;
end;
而FilterGroupValues[fgPredicate]的值正是4。
FilterGroupValues: array[TFilterGroup] of TOleEnum = ($FFFFFFFF {Unassigned},
adFilterNone, adFilterPendingRecords, adFilterAffectedRecords,
adFilterFetchedRecords, adFilterPredicate, adFilterConflictingRecords);

const
adFilterNone = $00000000;
{$EXTERNALSYM adFilterNone}
adFilterPendingRecords = $00000001;
{$EXTERNALSYM adFilterPendingRecords}
adFilterAffectedRecords = $00000002;
{$EXTERNALSYM adFilterAffectedRecords}
adFilterFetchedRecords = $00000003;
{$EXTERNALSYM adFilterFetchedRecords}
adFilterPredicate = $00000004;
{$EXTERNALSYM adFilterPredicate}
adFilterConflictingRecords = $00000005;
{$EXTERNALSYM adFilterConflictingRecords}
其他值均正常。
在追踪RecordSet的Filter属性
Recordset15 = interface(_ADO)
['{0000050E-0000-0010-8000-00AA006D2EA4}']
。。。。。。。。。。。。
property Filter: OleVariant read Get_Filter write Set_Filter;
。。。。。。。。。。
function Get_Filter: OleVariant; safecall;
procedure Set_Filter(Criteria: OleVariant); safecall;
。。。。。。。。。。。。。

到Set_Filter就看不到代码了。
// ********************************************************************* //
// Type Lib: C:/PROGRAM FILES/COMMON FILES/SYSTEM/ADO/MSADO15.DLL //
// IID/LCID: {00000200-0000-0010-8000-00AA006D2EA4}/0 //
// PASTLWTR : $Revision: 1.6 $ //
// HelpString: Microsoft ActiveX Data Objects 2.1 Library //
// Version: 2.1 //
// ********************************************************************* //
所以我想是Ado的问题了,可惜不知道在Set_Filter里它是怎么处理Filter=4的。
既是Ado的问题,那我想使用原生Ado对象也应该出相同错误。(just guess,no action)
只是不知道Broland的测试员怎么没发现?!!
也许升级Ado可以解决!
(个人意见,仅供参考)
 
多人接受答案了。
 
后退
顶部