Cursor.FindSingleValue
Thomas Flemming
tf at ttqv.com
Tue Dec 29 02:43:19 CST 2009
Hi,
> in. It looks like you do something like "select * from table" and than
> you are trying to apply another search criteria to the query result.
Yes, somehow....
ok, I will give a description of the problem.
Its actually a problem of displaying the data.
I'm using a grid to display the data, which has a virtual-display mode.
This means, the records are not loaded all at once in the grid, but only when
needed.
First I create the cursor with "select * from table order by field1"
Second only the records, which are currently visible, are loaded into the
grid. The row-number of the grid is the cursor-position.
So if the grid needs to display lets say rows 10000-10020 then it goes easy
with cursor.position=10000 etc.
This is very fast.
The problem comes now, when I need the grid to scroll down to show a specific
record.
For example, in another form I did a query:
"select * from table where name="flemming"
This gives me one record.
Now I want the grid to show this record, but I can only do this in scrolling
to this spcific grid-row, which is the cursor.position of the first query.
The only solution I found until now is iterating throug the cursor, until I
found this record. Then I have the cursor.position and can jump in the grid to
that row.
But this is of course slow for a large amount of data (1 mio records).
Regards,
Tom
Ivan Smahin schrieb:
> Hello Thomas,
>
> Monday, December 28, 2009, 10:23:11 PM, you wrote:
>
>
> >> and then in cursor you can do binary search by that field values.
>
>> what is "binary search by that field value" ?
>
>
> The best and most natural way is to query only records you really need
> in. It looks like you do something like "select * from table" and than
> you are trying to apply another search criteria to the query result.
>
> But you should do something like "select f1, f2 from t1 where f3 =
> 'value'" or something like this instead - I mean you should express your
> search criteria inside the query.
>
> Another way is creating some temporary table as a query result.
> It would be probably helpful in case of long running queries
> with complex search criteria. So later you could search a records in
> that temporary table as you are trying to do with cursor.
>
> One more note. Such problems may be result of poor database design.
> One of the popular example is denormalization... In short ...
> Assume you are developing some db schema for address book and you
> decide to keep all properties in different tables linked all together
> with some sort of link. So you will get something like People table,
> Address table (linked to People table) and so on... Seems to be
> correct... But finally you see that the only query you will run is -
> get all properties for all men/women.
>
> In our case it would be something like
> SELECT * FROM tblPerson JOIN tblAddresses JOIN tblPhones JOIN....
> WHERE fldGender = ...
>
> But in this case probably it would be better to have a single table
> with all that properties - yes it would be some repeatable records but
> your query might be running faster than n-join-query...
>
> To be more specific you should describe your needs more detailed.
>
--
/****************************************
** Dipl.-Ing. Thomas Flemming
** Software Development
**
** Touratech AG
** Auf dem Zimmermann 7-9
** D-78078 Niedereschach
**
** mail tf at ttqv.com
** fon +49 (0) 7728 9279-206
** fax +49 (0) 7728 9279-29
**
** http://www.ttqv.com
** http://www.touratech.de
**
** ... und immer dem Pfeil nach!
***************************************/
More information about the Valentina
mailing list