Subject | RE: [IBO] TIBOQUERY filter and CachedUpdates |
---|---|
Author | Jason Wharton |
Post date | 2017-09-05T22:47:05Z |
Thank you for this. It was very helpful to me.
What I discovered is you need to use
FilterInMem property instead of Filter.
The Filter property puts that filter in the SELECT statement and since cached
updates hasn't yet altered the value in the database it won't work properly.
But if you use the FilterInMem property then IBO will parse that filter clause
and apply it to the records fetch into the buffer in memory. This is what you
want to use when doing cached updates.
However, I also found that there was a deficiency in the in-memory filter
processing logic. I didn't have support for the IS NULL and IS NOT NULL
operators. Here is a patch to add these operators into the filter processing
logic.
IB_Parse.pas approx line 1540
function TIB_FilterValue.GetResult( aRow: TIB_Row ): boolean;
var
tmpCol: TIB_Column;
CmpProc: function ( const A, B: string ): integer;
begin
tmpCol := aRow[ ColumnIndex ];
if ( Operation = 'IS NULL' ) then
Result := tmpCol.IsNull
else
if ( Operation = 'IS NOT NULL' ) then
Result := tmpCol.IsNotNull
else
if tmpCol.IsText then
begin
if fopCaseInsensitive in Owner.BDataset.FilterOptions then
CmpProc :=
{$IFDEF IBO_SUPP_SYSTEM_ANSISTRINGS}
System.SysUtils.
...
Please let me know if this works for your actual situation or if there is some
other aspect this sample app doesn't take into account that you still need
addressed.
Kind regards,
Jason Wharton
www.ibobjects.com
From:
IBObjects@yahoogroups.com [mailto:
IBObjects@yahoogroups.com ]
Sent: Tuesday, September 05, 2017
1:42 PM
To: IBObjects@yahoogroups.com
Subject: RE: [IBO] TIBOQUERY
filter and CachedUpdates
Ok, I uploaded a 7z file.. I'm sending a
zip file...