Works just fine for me ...

#include "sqlite3.h"
#include <stdio.h>

void main(int argc, char** argv)
{
    sqlite3* db = 0;
    sqlite3_stmt* stmt = 0;
    char* rest = 0;
    int rc = 0;
    int value = 0;
    sqlite3_open(":memory:", &db);
    rc = sqlite3_prepare_v2(db, "select value from generate_series where 
start=1 and stop=10;", -1, &stmt, (void*)&rest);
    if (rc != SQLITE_OK)
    {
        printf("Error %d during prepare\n", rc);
        return;
    }
    printf("\nLoop 1, no reset\n");
    for (;;)
    {
        rc = sqlite3_step(stmt);
        if (rc == SQLITE_DONE)
        {
            printf("!\n");
            rc = sqlite3_reset(stmt);
            printf("sqlite3_reset returns %d\n", rc);
            break;
        }
        if (rc == SQLITE_ROW)
        {
            value = sqlite3_column_int(stmt, 0);
            printf("%d ", value);
            continue;
        }
        printf("Error during stepping %d\n", rc);
        break;
    }
    printf("\nLoop 2, after reset\n");
    for (;;)
    {
        rc = sqlite3_step(stmt);
        if (rc == SQLITE_DONE)
        {
            printf("!\n");
            rc = sqlite3_reset(stmt);
            printf("sqlite3_reset returns %d\n", rc);
            break;
        }
        if (rc == SQLITE_ROW)
        {
            value = sqlite3_column_int(stmt, 0);
            printf("%d ", value);
            continue;
        }
        printf("Error during stepping %d\n", rc);
        break;
    }
}

gcc test.c -L. -lsqlite3 -o test.exe

2018-06-04 10:41:10 MinGW [D:\work]
>test

Loop 1, no reset
1 2 3 4 5 6 7 8 9 10 !
sqlite3_reset returns 0

Loop 2, after reset
1 2 3 4 5 6 7 8 9 10 !
sqlite3_reset returns 0



---
The fact that there's a Highway to Hell but only a Stairway to Heaven says a 
lot about anticipated traffic volume.


>-----Original Message-----
>From: sqlite-users [mailto:sqlite-users-
>boun...@mailinglists.sqlite.org] On Behalf Of Igor Korot
>Sent: Sunday, 3 June, 2018 22:32
>To: Discussion of SQLite Database; General Discussion of SQLite
>Database
>Subject: [sqlite] Reset the cursor
>
>Hi, All,
>After executing the following:
>
>int res = sqlite3_prepare_v2( ... stmt );
>while( ; ; )
>{
>    res = sqlite3_step( stmt );
>    if( res == SQLITE_ROW )
>    {
>        // process the record
>    }
>    else if( res == SQLITE_DONE )
>        break;
>    else
>    {
>        // error procressing
>    }
>}
>
>Now I'd like the cursor in the recordset of the "stmt" to go to the
>record 1
>so I can process those records again.
>
>I thought that this will be a job of sqlite_reset(), but when I
>called
>it and started re-processing the recordset I got SQLITE_DONE on the
>very first iteration.
>
>So, how do I reset the cursor to the first record?
>
>Thank you.
>_______________________________________________
>sqlite-users mailing list
>sqlite-users@mailinglists.sqlite.org
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to