Italian SQL Lite e suoi limiti

Discussion in 'Italian Forum' started by Oldmanenzo, Feb 2, 2015.

  1. Oldmanenzo

    Oldmanenzo Member Licensed User

    Salve a tutti
    giocherellando un po con sql lite mi rendo conto di un limite direi abbastanza importante, almeno credo che sia cosi, visto che il db ed alcune tabelle le creo con visual studio.
    Ho notato che la chiave principale di un campo (di solito ID) non ha possibilità di autoincrement. Puo essere sicuramente univoco. Come e quale metodo utilizzate per incrementare il vostro ID o se utilizzate altri metodi. Io di solito carico un cursor con il solo campo id e lo metto in ordine ascendente. A questo punto posiziono il cursore sull'ultimo record, leggo il contenuto ed incremento di 1. So che non è un buon metodo, ma sinceramente non ne trovo altri.
    Voi di solito come fate??
    Grazie a tutti.
     
  2. AlpVir

    AlpVir Well-Known Member Licensed User

    Meglio così :
    Code:
    '        '--- individuo l'ultimo ID
    '        MaxID=dbWP.ExecQuerySingleResult("SELECT MAX(ID) FROM TabWP")+1
     
  3. cimperia

    cimperia Active Member Licensed User

    Auto-incremento è possibile (AUTOINCREMENT), ma questo non è necessario con sqlite. È addirittura dannoso.

    In SQLite, a column with type INTEGER PRIMARY KEY is an alias for the ROWID

    https://www.sqlite.org/autoinc.html
     
  4. Oldmanenzo

    Oldmanenzo Member Licensed User

    Stavo leggendo un po ed in effetti è possibile dichiarare autoincrement ma se dannoso allora non conviene
    il problema e faccio un piccolo esempio utilizzando il db access e dichiaro la chiave primaria con autoincrement
    quando scrivo un nuovo record non ho la necessità di scrivere anche il valore dell'indice perche viene incrementato automaticamente
    di uno. Mi sembra che questo non sia possibile in sql lite.
    comunque l'istruzione dettata da AlpVir è sicuramente piu comoda e veloce.
     
  5. cimperia

    cimperia Active Member Licensed User

    Ma sì, SQLite funziona esattamente così: quando si inserisce un nuovo record non si specifica l'ID e sarà incrementato di 1. Vedrete che una tabella viene creata (sqlite_sequence) se non esiste già, e conterrà un record per la tabella e l'ultimo numero di sequenza.

    Dannoso significa rallenta (un po '), l'inserto.

    Code:
    drop table IF EXISTS test;

    create table test
    (
    id integer primary key  autoincrement
    ,name varchar2
    );

    insert into test (name) values (
    "john");
    insert into test (name) values (
    "carlos");

    select * from test;

    id    name
    1    john
    2    carlos

    select * from sqlite_sequence;

    name   seq
    test     
    2
     
    Last edited: Apr 6, 2015
  6. Oldmanenzo

    Oldmanenzo Member Licensed User

    Grazie cimperia
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice