Subject RE: [IBO] Query 3 times slower in 5.9 as compared with 4.21
Author IBO Support List



There isn’t anything to fix where TIB_Cursor is concerned.
When a component is inherently unidirectional it changes the behavior of things.


Calling TIB_Cursor.Open merely opens the dataset cursor for fetching, but it doesn’t do a fetch so it starts at BOF.

If you call the First method it will always close, if open, then reopen and fetch the first record for you.


I realize this is different than how a buffered query works but I want each to work appropriately for what they specialize in.


Hope this made sense.


Jason Wharton


From: [mailto: ]
Sent: Wednesday, April 05, 2017 3:17 PM
Subject: Re: [IBO] Query 3 times slower in 5.9 as compared with 4.21


>I remember Jason many years ago saying that with IB_Cursors, you should call "First" and not "Open".

> He also said that once a cursor reach eof it is closed, so closing a cursor that has eof = true isn't

> necessary. Queries on the other hand, can move forwards and backwards, should use "Open" and

> ought to be explicitly closed. Do you still get the same result if you change your IB_Cursor to using

> "First" and not "Open"?


I recall that as well, but why hasn't that been fixed? There are two ways I can see doing this in an OO soltuion:


1) the Open call could be virtual a the TIB_Dataset level, and override it with the cursor and the TIB_Cursor call First

2) Don't expose open to the public for the TIB_Dataset and therefore TIB_Cursor objects could not call .Open.