Subject R: [IBO] TIBO* "Refresh" after InternalDataset buffer syncronizat ion ?
Author Enrico Raviglione
Thanks Geoff,
"case ditEdit" calling TIBODataset->InvalidateBookmark(...) work fine.

But i don't find a solution for ditInsert and ditDelete.
I have tried this:

case ditDelete:
{
IDataset->DeleteBufferBookmark(
IDataset->KeyFields->RowData );
UpdateCursorPos();
Resync( [] );
}
break;

case ditInsert:
{
IDataset->InsertBufferBookmark(
IDataset->KeyFields->RowData );
UpdateCursorPos();
Resync( [] );
}
break;

but i see a strange behaviour, the TDataset are updated but seem not all the
internal buffers.

An example:
I have 3 TIBOTable objects on the same form with 3 TDatasource and 3
TDBGrid.
I insert a record into TIBOTable1 then (after DMLCaching code) i see the new
record on TIBOTable2 and TIBOTable3 (it seem all work fine).
I Delete the new record from TIBOTable1 but when i call:
IDataset->DeleteBufferBookmark(IDataset->KeyFields->RowData);
from DMLCaching code of TIBOTable2 and TIBOTable3 a receive an Exception.

Exception are throwed from IB_Nodelist.pas:

procedure TIB_NodeList.BufferDelete
begin
if IsEmpty or BufEof or BufBof or ( BufRef.Pos < BofRef.Pos
) then
raise Exception.Create( E_Invalid_Reference_To_Delete );

DeleteNode( BufRef.Node );
end;

called from TIB_BDataset::DeleteBufferRowNum(...)
called from TIB_BDataset::DeleteBufferBookmark(...)

I don't know how i can try now, how the TIBODataset and TIBOInternalDataset
are sincronized?
There was some help or white paper on TIBODataset - TIBOInternalDataset
structure ?

Thanks for any suggestion,
Enrico Raviglione.