Subject Re: Current record refresh in TIBOQuery

I appear to have found a simple solution:

qryEncounter.InvalidateBookmark(qryEncounter.Bookmark); // Just
refresh the current record

This seams to work OK. I didn't know this was supported by TIBOQuery
but it works (at least I haven't been able to fault it yet).

Thanks for your help :-)


--- In IBObjects@y..., "Geoff Worboys" <geoff@t...> wrote:
> > Sounds like an interesting idea, but I don't know how to
> > implement it. In this case the master would be a set of
> > records, just the keys I suppose, and the detail dataset
> > would have the same records with all the required fields.
> > But the detail dataset is connected to a grid and must
> > be scrollable. I don't know how that can be done.
> Hmmm, yes you understood the idea as I meant it, but the grid
> requirement does sort of upset things a bit.
> I dont think JoinLinks will help you. That property is there for
> people wanting to do implicit joins rather than 'JOIN xxxx ON'
> Here is a different idea, still using two datasets but without
> detail relationship.
> You have your main selection dataset, presumably with just the keys
> although that may depend on other requirements. The where clause
> this dataset will apply the full restrictions required.
> You have a second independant dataset selecting all the required
> fields and using the IDENTICAL keylinks definition of the first.
> where clause for this dataset would be almost the same as the main,
> but would not check the status field that is causing you problems.
> Make sure FetchWholeRows is true. To this dataset you attach code
> the OnFilterRecord event that does something like...
> uses IB_Utils; // for BinaryToHexText function
> procedure Form1.SecondDatasetOnFilterRecord( ARow: TIB_Row;
> var Accept: boolean );
> var
> tmpBkmk: string;
> begin
> // Calculate bookmark string for supplied row
> tmpBkmk := BinaryToHexText( ARow.RowNode.KeyData,
> SecondDataset.NodeList.KeyDataLength );
> // Try to get main dataset to match rows
> MainDataset.BufferBookmark := tmpBkmk;
> // If row not found in maindataset then dont accept it.
> if MainDataset.BufferRowNum = 0 then
> Accept := false
> else
> Accept := true;
> end;
> I have not tried building a bookmark in this way before, but AFAICT
> the code shown above should be OK. If Jason is watching; how about
> direct function for this purpose?
> Obviously this is not totally efficient, since the SecondDataset
> be retrieving more records than it needs from the server, and then
> discarding those that are not found in the MainDataset. However it
> will allow you to refresh the second dataset independantly of the
> MainDataset (keeping records that are still selected by the
> unrefreshed main dataset) and will also allow you to attach the
> dataset to a grid for normal scrolling etc.
> I have NOT tried this before so I cannot be certain it will work
> exactly how you want. Its the best I can come up with at short
> :-)
> Geoff Worboys
> Telesis Computing