scusa ma se id è autoincrementante a cosa ti servr fare un movelast per inserire un nuovo record?
a me lo inserisce in posizione corretta automaticamente con un semplice:
$hconn.Open
$hconn.Begin
rarticoli = $hconn.Create("clienti")
rarticoli!cli1 = "pippo"
rarticoli!cli2 = "pippo11"
rarticoli!cli3 = "pippo22"
rarticoli!cli4 = "pippo33"
rarticoli.Update
$hConn.Commit
$hconn.Close
perconoscere l'id dell' ultimo record fai:
DIM hdata AS Result
DIM $hConn AS Connection
DIM sName AS String
$hConn = NEW Connection
'TRY $hConn.Close
sName = "pippo.db"
WITH $hConn
.Type = "sqlite3"
.Host = User.Home
.Login = ""
.Password = ""
END WITH
$hConn.Name = sName
$hConn.Open
$hconn.Begin
hData = $hConn.Exec("SELECT * FROM clienti")
hdata.MoveLast
label1.text = hdata!id
be no non devi chiudere e riaprire puoi benissimo utilizzare un semplice commit
dopo la creazione:
DIM hdata AS Result
DIM $hConn AS Connection
DIM sName AS String
$hConn = NEW Connection
sName = "pippo.db"
WITH $hConn
.Type = "sqlite3"
.Host = User.Home
.Login = ""
.Password = ""
END WITH
$hConn.Name = sName
$hConn.Open
$hconn.Begin
hdata = $hconn.Create("clienti")
hdata!cli1 = "pippo"
hdata!cli2 = "pippo"
hdata!cli3 = "pippo"
hdata!cli4 = "pippo"
hdata.Update
$hconn.Commit
hData = $hConn.Exec("SELECT * FROM clienti")
hdata.MoveLast
label1.text = hdata!id 'indica il numero dell' ultimo id
label2.text = hdata.Count 'indica il numero di record
$hconn.Close
questo per leggere effettivamente il numero dell' id aggiunto
se invece devi fare una previsione e quindi sapere l' id del record prima di scriverlo
ti conviede dare prima l'istruzione SELECT
quindi:
hdata.movelast
numero id futuro= (hdata!id)+1
Meglio così:
CREATE TABLE 'tabella' ( 'KeyNumber' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 'stringa' CHAR(255) DEFAULT NULL);
infatti.. se non sbaglio con il codice postato da leo72 il campo id oltre che essere autoincrementante ha la particolarita di non lasciare "buchi" cancellando dei record intermedi, overro avendo 1000 record e cancellando ad esempio il n° 500 dopo l' operazione di update e commit l'id dell' ultimo record sarà 998 e non 999 come in un autoincrementale creato con un istruzione del tipo
CREATE TABLE 'tabella' ( 'KeyNumber' INTEGER NOT NULL PRIMARY KEY, 'stringa' CHAR(255) DEFAULT NULL);
questo lo scoperto ieri sera girovagando in http://www.sqlite.org/lang.html
un ottimo sito sul linguaggio SQLITE, con un unico neo : è tutto in inglese.
Avendo a disposizione files .csv contenenti i dati originali, li ho trasferiti automaticamente in un DB Sqlite3 usando Kexi, il quale mi propone sempre l'alternativa di usare un campo chiave tra quelli che ho oppure crearne uno automaticamente di nome ID.
io invece di usare kexi utilizzo sqlitebrowser che mi piace molto di più
inoltre se creo un db SQLITE3 con gambas con kexi non riesco ad aprirlo mentro con sqlitebrowser non ho nessun problema.Chissa se a qualcun' altro succede o se solo a me?