Subject | TIBOTable.Locate issue |
---|---|
Author | masonwheeler |
Post date | 2013-04-14T04:40:31Z |
I've got a TIBOTable mapped to a DB table with 240 rows. I've got a routine that iterates over a second table that has a FK to the first table, and calls Locate on the FK value to do some processing. The FK relationship ensures that the row will be there. For ID values from 1 to 135, it works, but above 135, Locate returns False.
Looking into the code, it appears that the internal dataset has a list of buffer nodes, and it loads the first 135 of them (why i35? That's a very arbitrary number) and if Locate doesn't ask for a value that can be found in this node list, it does not check to see if its node count < self.RecordCount and fetch more from the server.
Calling Last on the TIBOTable before starting the iteration works as a workaround, presumably because it forces it to load more data. Not sure how much more it makes it load, and if this would simply cause a gap to start showing up once the table in question has more than 270 rows.
Mason
Looking into the code, it appears that the internal dataset has a list of buffer nodes, and it loads the first 135 of them (why i35? That's a very arbitrary number) and if Locate doesn't ask for a value that can be found in this node list, it does not check to see if its node count < self.RecordCount and fetch more from the server.
Calling Last on the TIBOTable before starting the iteration works as a workaround, presumably because it forces it to load more data. Not sure how much more it makes it load, and if this would simply cause a gap to start showing up once the table in question has more than 270 rows.
Mason