non capisco perchè con il seguente codice non riesco a creare un nuovo database.
PUBLIC Percorso AS String
PUBLIC Datanome AS String
PUBLIC Conn AS NEW Connection
PUBLIC Risultato AS Result
PUBLIC SUB Main()
Connessione()
END
PUBLIC SUB Connessione()
DIM sql AS String
Percorso = Application.Path
Datanome = "ordini"
WITH Conn
.Name = Datanome
.Host = Percorso
.Type = "Sqlite3"
.Login = ""
.Password = ""
END WITH
TRY Conn.Open()
IF ERROR THEN
Conn.Databases.Add("ordini")
sql = "CREATE TABLE fornitori (ID INTEGER AUTO_INCREMENT PRIMARY KEY, fornitore VARCHAR(50))"
Risultato = Conn.Exec(sql)
ENDIF
END
in giro ho trovato degli esempi che dicevano di fare così
prova così:
Percorso = Application.Path
Datanome = "/ordini"
edit:
ti consiglio di impostare la query così
sql = "CREATE TABLE 'fornitori' ("
sql &= " 'idfornitore' INTEGER PRIMARY KEY,"
sql &= " 'fornitore' varchar(30) DEFAULT NULL,"
sql &= " 'ragionesociale' varchar(30) DEFAULT NULL,"
sql &= " 'telefono' varchar(15) DEFAULT NULL,"
sql &= " 'indirizzo' varchar(30) DEFAULT NULL,"
sql &= " 'citta' varchar(30) DEFAULT NULL,"
sql &= " 'cap' varchar(8) DEFAULT NULL,"
sql &= " 'provincia' varchar(20) DEFAULT NULL,"
sql &= " 'telefono2' varchar(15) DEFAULT NULL,"
sql &= " 'fax' varchar(15) DEFAULT NULL,"
sql &= " 'email' varchar(30) DEFAULT NULL,"
sql &= " 'note' varchar(400) DEFAULT NULL,"
Risultato = Conn.Exec(sql)
ad occhio mi pare che:
- manchi il punto&virgola finale nella stringa SQL...
- e poi devi dare il "commit" per eseguire la transazione (credo ).
...
Risultato = Conn.Exec(sql)
Conn.Commit
End
PS. se non l'avessi già fatto leggi anche la fantastica guida di fsurfing...
http://www.gambas-it.org/wp/?wpfb_dl=123 (http://www.gambas-it.org/wp/?wpfb_dl=123)
PPS. segui l'ottimo suggerimento di Golia, che serve a dare più ordine alla query SQl che vai a scrivere...
Ti incollo questo modulo, a me funziona
PUBLIC $conn AS NEW Connection
PUBLIC sqliteName AS String = "prova"
PUBLIC sqlitePercorso AS String = Application.Path
PUBLIC PROCEDURE Connect()
$conn.Close
$conn.Type = "sqlite3"
$conn.Host = sqlitePercorso
$conn.Name = sqliteName
$conn.Open
END
PUBLIC PROCEDURE disconnect()
$conn.Close
END
PUBLIC SUB controlladb()
IF NOT Exist(sqlitePercorso & "/" & sqliteName) THEN
IF Message.Question("Creo il database", "Si", "No") = 1 THEN
WITH $conn
.Type = "sqlite3"
.Host = sqlitePercorso
END WITH
$conn.Open
$conn.Databases.Add(sqliteName)
$conn.Close
$conn.Name = sqliteName
$conn.Open()
creatabella()
ENDIF
ENDIF
END
PUBLIC SUB creatabella()
DIM sql AS String
DIM htable AS Result
sql = "CREATE TABLE 'rubrica' ("
sql &= " 'idrubrica' INTEGER PRIMARY KEY,"
sql &= " 'cognome' varchar(20) DEFAULT NULL,"
sql &= " 'nome' varchar(20) DEFAULT NULL,"
sql &= " 'indirizzo' varchar(30) DEFAULT NULL,"
sql &= " 'citta' varchar(30) DEFAULT NULL,"
sql &= " 'provincia' varchar(20) DEFAULT NULL,"
sql &= " 'telefono' varchar(10) DEFAULT NULL);"
hTable = $conn.EXEC(sql)
$conn.Commit
$conn.Close
END
il codice che hai scritto non mi sembra molto valido..
prima di tutto assicurati che il db non esista con
IF NOT $hConn.Databases.Exist(nome) THEN
attribuire la creazione ad un errore generico non è il massimo.
poi la creazione del db e la crazione delle tabelle devono avvenire in due momenti separati da un commit
per la creazione del db sul codice di definizione della connessione non mettere il nome (lo metterai se lo crei nel codice di creazione)
creato il db fai un commit o un close
poi definisci il nome del db con connessione.name=nome
e apri il db per la creazione delle tavole