Avevo infatti gia letto quel topic, ma l'unico punto in cui si parla di aggiungere un record è in questo codice:
PUBLIC FUNCTION EseguiSql(mysql AS String) AS Result
'LETTURA TABELLA MyResult = MySqlite.EseguiSql("select * FROM test")
'NUOVO RECORD MyResult = MySqlite.EseguiSql("INSERT into test (id) values (555)"
'AGGIORNO RECORD MyResult = MySqlite.EseguiSql("UPDATE test valore1=12 WHERE id=1")
RETURN conn.Exec(mysql)
END
Dove non si fa alcun riferimento all'oggetto "MySqlite" che non è certo l'oggetto connessione!
Se provo ad eseguirlo ovviamente mi da errore!
Forse ho capito l'arcano..... ma quanto sono ignorante!
Quello che ritenevo un'oggetto, cioe "MySqlite" forse altro non è che un modulo del programma dell'amico!
Infatti se provo a dare il comando in questo modo:
Risultato = connessione.Exec(com_select)
'dove com_select contiene la stringa:
"INSERT into agenti (id_age) values (" & Trim(Str(posizione)) & ")"
Mi aggiunge sempre un nuovo record con il numero in progressione.
Quello che mi resta da capire ora è il perchè del successivo messaggio di errore:
"Result is not available"
@leo72
Usa il metodo Create() dell'oggetto Connection, scusa. In questo modo fai fare tutto lo "sporco lavoro" a Gambas.
La cosa non mi è molto chiara! Se vado a cercarmi la sintassi di create, mi ritrovo la seguente sintassi:
FUNCTION Create ( Table AS String ) AS Result
Ma io la table ce l'ho già, quindi come diavolo uso sto comando per aggiungere un semplice record?
Se esiste un'altro impiego della funzione, perchè non è riportata nella guida?
SQLite3 è compatibile con la sintassi SQL, ma ne omette alcune caratteristiche come ne utilizza di proprie:
http://www.sqlite.org/lang.html
Per quanto riguarda il metodo Create(), la documentazione che hai citato nella sola parte relativa alla sintassi dice:
Returns a read/write Result object used for creating records in the specified table.
Che tradotto sta a:
Restituisce un oggetto Result leggibile/scrivibile usato per creare record nella tabella specificata
Quindi è ciò che fa al caso nostro.
Ecco un esempio di codice:
PRIVATE SUB Crea_tabella()
DIM Connessione AS NEW Connection
DIM Risultato AS Result
'-- connetti al database
Connessione.Name = Application.Path & "/nome_db"
Connessione.Type = "sqlite3"
Connessione.OPEN
'-- salvataggio nuovi dati
Risultato = Connessione.Create("nome_tabella")
Risultato["campo_1"] = dato_1
Risultato["campo_2"] = dato_2
...
Risultato["campo_n"] = dato_n
Connessione.Commit
Connessione.CLOSE
END
Avevo compreso che la riga:
Risultato = Connessione.Create("nome_tabella")
creasse in realtà la table, e le successive:
Risultato["campo_1"] = dato_1
Risultato["campo_2"] = dato_2
inserissero nella nuova table le colonne dei campi dato_1 e dato_2
Vedi cosa vuol dire l'ignoranza?
Ed ora sto trovando un'altra difficoltà con gli esempi per la cancellazione di un record:
WITH connessione
.Begin
result = .Delete("agenti", criterio, parametro)
risultato.Update
.Commit
END WITH
che mi da l'errore incomprensibile: "wanted result, got void instead"
Mentre nella guida il comando exec riporta un esempio, questo non esiste per il comando delete.
Come fare? Ti prego, porta pazienza!!!