Ultimately what I want to have most of the functions of DBNavigator and a search function. I would like my users to be able to search for a particular record and if successful have the current record pointer moved to the first record that matches the criteria without reloading the table. That way they can continue to navigation from that point. SQLQuery.Locate does that handily but it causes a lot of data movement.
Is there any way of directly accessing and setting the absolute position of the current record counter in a dataset?
Nope, there is not. If you want the complete dataset you can't put a cursor in the "middle" without reading the previous records. There isn't even such a thing as "middle" in a dataset if you haven't read all records yet because the client only know how many records there are if the server gives an EOF on the last record.
I think you need to step off the idea of "moving the pointer" in the dataset. You said you don't have a DBGrid (or do you??) so you could just work with SQL statements to get the correct record.
For instance.
1)A TEdit-box
as filter.
Typing in test you could issue a statement like SELECT * FROM TABLE WHERE NAME like %test%.
The dataset would only hold records with test in the name. The user could step through those with Next en Prior.
2)A TEdit-box
as start-value.
You could do SELECT * FROM TABLE WHERE NAME>=test.
In that case you could get all records with name starting from test and all the rest. The user could step through all Next records but can't do Prior to those records. But maybe that's enough.
So if it is sufficient that the user only sees the records with what (s)he typed in then go for option 1. If (s)he needs to step further through to name=xoro then go for option 2.
In both cases you could also implement a "Last" button and order by NAME DESC in which case the first record is directly the last. The only thing you need to do is remember that you have a reversed list so if the user presses the Previous button you do a Dataset.Next and if (s)he presses Next-button you do a Dataset.Prior.
I think that is the best and fastest way to work when you want direct DB-access and don't have a DBGrid.
If you want I could create an example tomorrow (if somebody doesn't beat me to it) with a dataset, filterbox and a few navigate buttons, if you can't implement this yourself.