I wroe this code to get ROWID, but if I assign output of sqlite3_step to an
id, and assign that id, is OK?.

const char *    rowidSql = "SELECT max(ROWID)+1 "EVENTLOG_TBL ;

    const char *    zSql;
    sqlite3_stmt *  pStmt, pStmt2;

/* This is added to run query to get ROWID */
        rc = sqlite3_prepare(pDB, rowidSql, -1, &pStmt2, 0);
        if( rc != SQLITE_OK )
            {
            ADP_PRINTF ("sqlite3_prepare failed for %s\n", rowidSql);
            return (ERROR);
            }
        eventLogRowIndex = sqlite3_step(pStmt2)
        sqlite3_bind_int(pStmt, 1, eventLogRowIndex);


On Fri, Feb 5, 2010 at 3:30 PM, Shane Harrelson <sh...@sqlite.org> wrote:

> As stated before, in general, you should not specify the ROWID on inserts,
> but instead, let the database engine choose it for you.
> This is true of most/all database engines.
>
> The syntax you're trying below is not supported.   Indeed, even it were,
> max(ROWID) is the maximum ROWID *in use*.  Trying to insert another row
> with
> the same ROWID will result in a collision.
>
> At the very least you would need to do something like "SELECT max(ROWID)+1
> from EVENTLOG_TBL;", use sqlite_step() to run this query, and bind the
> ROWID
> returned here into your insert statement and run that.
>
> You can read more on SQLite's ROWID usage at
> http://www.sqlite.org/search?q=rowid
>
> HTH.
> -Shane
>
>
>
>
> On Fri, Feb 5, 2010 at 3:22 PM, Vasanta <vtan...@gmail.com> wrote:
>
> > This is my actual string, still not working:
> >
> >  const char *    replaceSql = "INSERT INTO "EVENTLOG_TBL \
> >                           "(_ROWID_, component, facilityId, logLevel,"\
> >                           "textMessage, binMessage) VALUES(?,?,?,?,?,?);
> > SELECT max(ROWID) from EVENTLOG_TBL";
> >
> >
> > On Fri, Feb 5, 2010 at 3:05 PM, Vasanta <vtan...@gmail.com> wrote:
> >
> > > Thanks jay.
> > >
> > > Can I combine like this:
> > >
> > > "INSERT INTO trends(UnitID,HeureTrends,DateTrends) VALUES(?,?,?);SELECT
> > > max(ROWID) FROM table-name";
> > >
> > > or
> > >
> > > "INSERT INTO trends(UnitID,HeureTrends,DateTrends) VALUES(?,?,?);SELECT
> > > last_insert_rowid() AS [ID]";
> > >
> > >
> > > On Fri, Feb 5, 2010 at 2:49 PM, Jay A. Kreibich <j...@kreibi.ch> wrote:
> > >
> > >> On Fri, Feb 05, 2010 at 02:28:33PM -0500, Vasanta scratched on the
> wall:
> > >>  > command "SELECT rowid from table-name;"  gives all rows from 1 to
> 100
> > >> for
> > >> > total 100 rows, any command to get last rowid?. I need insert from
> > last
> > >> > rowid onwards (if table already 100 records, need to insert from 101
> > >> > onwards)
> > >>
> > >>  SELECT max(ROWID) FROM table-name;
> > >>
> > >>
> > >>  You shouldn't be setting ROWIDs manually, however.  Just insert the
> > >>  row and let SQLite pick the ROWID.  If you have a ROWID alias in the
> > >>  form of an INTEGER PRIMARY KEY, in most cases you should still just
> > >>  let SQLite pick the value, possibly with AUTOINCREMENT.
> > >>
> > >>   -j
> > >>
> > >> --
> > >> Jay A. Kreibich < J A Y  @  K R E I B I.C H >
> > >>
> > >> "Our opponent is an alien starship packed with atomic bombs.  We have
> > >>  a protractor."   "I'll go home and see if I can scrounge up a ruler
> > >>  and a piece of string."  --from Anathem by Neal Stephenson
> > >>   _______________________________________________
> > >> sqlite-users mailing list
> > >> sqlite-users@sqlite.org
> > >> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> > >>
> > >
> > >
> > _______________________________________________
> > sqlite-users mailing list
> > sqlite-users@sqlite.org
> > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> >
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to