[GRASS-user] db_fetch questions

Moritz Lennert mlennert at club.worldonline.be
Thu Mar 20 09:41:10 EDT 2008


On 20/03/08 14:31, Jaime Carrera wrote:
> Hi Markus and Moritz,
> 
> Thanks for your suggestions; I tried another loop (the one from v.in.db) 
> and gave the result that I needed. Below are my "experiments":
> The first db_fetch loop (exits after one interaction): I have to "cheat" 
> to be able to get all the records from the database:
> 
>   while(1){
>     if(db_fetch (&cursor, DB_NEXT, &more) != DB_OK)
>       return(-1);
>     nodeprop=db_get_value_as_double(dbvalue,ctype);
>     printf("node prop= %.2f\n",nodeprop);
>     count++;
>     if(count<12699) /* use max(cat) value for this one, just testing*/
>        more=0;
>     if ( more) break;
>   }
> 
> Now, using the loop as used in v.in.db I get what I need, without 
> "cheating':
> 
>    while ( db_fetch (&cursor, DB_NEXT, &more ) == DB_OK && more ) {
>      nodeprop=db_get_value_as_double(dbvalue,ctype);
>      printf("node prop= %.2f\n",nodeprop);
>    }
> 
> There are two differences: on the first loop more==1 immediately, and 
> thus exits the loop; while on the second one the loop is exptecting 
> more==1. Another difference is the != or == DB_OK part.
> 
> What I can gather from this, is that the first loop is more appropriate 
> to queries done on a category basis, but not for fetching an entire table.

I don't really understand the first one. Why do you break if more==1 ? 
Instead of

if(count<12699) /* use max(cat) value for this one, just testing*/
      more=0;
if ( more) break;

Shouldn't this just be

if(!more) break;

?

Moritz


More information about the grass-user mailing list