Subject | R: [IBO] TIBO* "Refresh" after InternalDataset buffer syncronizat ion ? |
---|---|
Author | Enrico Raviglione |
Post date | 2002-02-09T15:36:28Z |
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.
"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.