Hai ragione! Sto leggendo qui: http://gambasdoc.org/help/comp/gb.mysql?v3 (http://gambasdoc.org/help/comp/gb.mysql?v3)
Allora andiamo un passo per volta:
1)Creazione del database:
Dim $hConnection As New Connection
With $hConnection
.Type = "mysql"
.Port = "3306"
.Host = "localhost"
.User = "root"
.Password = "mypass"
.Name = "Gambas"
.Open()
End With
La nuova connessione serve per connettersi al database che creo? diciamo che io crei il database pippo, $hConnection diverrà pippo?
Nel ciclo With (che non capisco perché viene messo tutto nel ciclo) dice: .Port, ma a cosa dovrebbe servirmi se il database ed il programma devono girare sul mio pc?
.Host non so a cosa serva...
come vedi sono in alto mare...help!!!!
Ok, hai ragione, mi sono buttato troppo velocemente. colpa del mio carattere impulsivo :rolleyes:
Allora se ho ben capito mysql serve per gestire database tra pc. Quindi mi serve sqlite!
Allora il punto è questo, il database deve trovarsi sulla stessa macchina su cui funziona il programma.
Deve essere una cosa tipo questa:
nome cognome indirizzo
pippo ecc ecc
pluto ecc ecc
paperino ecc ecc
quasi come se fosse un database fatto su di un foglio di calcolo openoffice....
Perdonami se parlo cosi ma per me i database sono una cosa difficilissima :-[
Leggo ciò che ho trovato e faccio sapere.
tutto chiaro fin qui: sql = "CREATE TABLE 'biblio' ( 'id' INTEGER PRIMARY KEY, 'nome' VARCHAR(255)
DEFAULT NULL, 'cognome' VARCHAR(255) DEFAULT NULL, 'indirizzo' VARCHAR(255)
DEFAULT NULL);"
Quando inserisco questo (tutto su di una riga come scritto nella guida ricevo questo errore: Devo forse installare qualcosa oltre a gambas?
Ok, grazie a tutti, seguo il vostro consiglio e continuo con sqlite3.
Mi sono bloccato nuovamente nella fase di creazione della tabella che poi dovrà contenere gli elementi.
allora, ho scritto questo:
sql = "CREATE TABLE TextBox2.text('id' INTEGER PRIMARY KEY AUTOINCREMENTAL, 'nome' VARCHAR(255) Default Null, 'cognome' VARCHAR(255) DEFAULT NULL, 'indirizzo' VARCHAR(255) Default Null);"
hTable = $Con.Exec(sql)
tutto preso dal manuale di fsurfing...
Ora non mi sono chiare due cose:
1)l'uso di htable dichiarato come result
2)come poi visualizzare il tutto in una gridview, ammesso che non debba più aggiungere altro...
L'uso di htable in effetti non serve.
Ti basta sql = "CREATE TABLE TextBox2.text('id' INTEGER PRIMARY KEY AUTOINCREMENTAL, 'nome' VARCHAR(255) Default Null, 'cognome' VARCHAR(255) DEFAULT NULL, 'indirizzo' VARCHAR(255) Default Null);"
$Con.Exec(sql)
Se posso consigliarti, scrivi così la query
DIM sql AS String
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);"
$conn.EXEC(sql)
e per la tebella puoi mettere un nome semplice, non "TextBox2.tex" potrebbe crearti dei problemi. Inoltre anche i nomi dei campi cerca sempre di dargli un nome semplice senza caratteri speciali. Esempio ti conviene chiamare un campo "citta" e non "città"
effettivamente non serve per la creazione di un database indicare un result, è un vizio che mi è rimasto tra le dita da vecchie guide di quando utilizzavo gambas1 :)
tornando a noi, il consiglio di golia sulla formattazione della query è ottimo e ti permetterà di leggere bene ogni nuovo field che aggiungi nella tavola.
fai attenzione alla concatenazione delle stringhe , dal tuo codice mi sembra che tu volessi creare una tavola con il nome presente nella textbox , per cui non sarà come hai scritto tu:
sql = "CREATE TABLE TextBox2.text('id' INTEGER PRIMARY KEY......
bensi
sql = "CREATE TABLE " & TextBox2.text & "('id' INTEGER PRIMARY KEY......
prima di poter scrivere i dati nella gridvieW dovrai riempire il database. non mi ricordo se nella guida (è molto vecchia) è presente il codice per riempire una grid, ma sicurament eci sarà nell' esempio di golia , altrimenti faccelo sapere
Ho scritto in questo modo il mio codice in modo da poter inserire ciò che voglio nel database con dei textbox:
Dim sql As String
Dim hTable As Result
$Con.Name = $Name 'Mi connetto al database
$Con.Open 'Apro il database per creare una tabella
sql = "CREATE TABLE & TextBox2.text &("
sql &= " 'id' INTEGER PRIMARY KEY AUTOINCREMENTAL,"
sql &= " & TextBox3 varchar(255) DEFAULT NULL,"
sql &= " & TextBox4 varchar(255) DEFAULT NULL,"
sql &= " & TextBox5 varchar(255) DEFAULT NULL);"
$Con.Exec(sql)
Ora però non ho capito come aggiungere oggetti nel database...
domanda: varchar può essere 1024 come il c oppure non può superare i 255 caratteri? A cosa serve "Default null"?
direi che ti mancano ancora le basi sull' utilizzo delle stringhe concatenate, il codice è il seguente:
Dim sql As String
Dim hTable As Result
$Con.Name = $Name 'Mi connetto al database
$Con.Open 'Apro il database per creare una tabella
sql = "CREATE TABLE & TextBox2.text &("
sql &= " 'id' INTEGER PRIMARY KEY AUTOINCREMENTAL,"
sql &= " " & TextBox3 & " varchar(255) DEFAULT NULL,"
sql &= " " & TextBox4 & " varchar(255) DEFAULT NULL,"
sql &= " " & TextBox5 & " varchar(255) DEFAULT NULL);"
$Con.Exec(sql)
sono molti mesi che non rileggo la mia guida ma mi sembra che fosse spiegato come inserire i dati all' interno del db! leggila per benino e non avere fretta
DEFAULT NULL indica al db che quel campo avrà come valore di default NULL (vuoto) quindi se tu ad esempio crei un nuovo record impostando solo il primo field , gli altri avranno valore NULL, se avessi scritto DEFAULT 'pippo' avrebbero avutoi come valore "pippo" , con varchar puoi inserire "testi" con un numero massimo di caratteri indicato dal valore tra parentesi
Non mi ricordo se indispensabile, ma ci mancano anche gli appici
sql &= " '" & TextBox3 & "' varchar(255) DEFAULT NULL,"
Ho convertito l'sempio sqlite che avevo fatto 3 post prima in G3 senza problemi. Al momento per cose basilari non mi sembra che ci sia differenza tra G2 e G3
Ciao, scusate l'intromissione, ma perchè usate la sintassi sql complessa e non i metodi di gambas?
la struttura:
1. Dim sql As String
2. Dim hTable As Result
3.
4. $Con.Name = $Name 'Mi connetto al database
5. $Con.Open 'Apro il database per creare una tabella
6. sql = "CREATE TABLE & TextBox2.text &("
7. sql &= " 'id' INTEGER PRIMARY KEY AUTOINCREMENTAL,"
8. sql &= " " & TextBox3 & " varchar(255) DEFAULT NULL,"
9. sql &= " " & TextBox4 & " varchar(255) DEFAULT NULL,"
10. sql &= " " & TextBox5 & " varchar(255) DEFAULT NULL);"
11. $Con.Exec(sql)
non potrebbe essere?
dim myTable as Table
$Con.Name = $Name 'Mi connetto al database
$Con.Open 'Apro il database per creare una tabella
myTable = $Con.Tables.Add(TextBox2.Text)
with myTable
.fields.Add("id", db.integer)
.fields.add(TextBox3.text, db.string,255)
.fields.add(TextBox4.Text,db.string,255)
.fields.add(TextBox5.Text,db.string,255)
.Update()
.PrimaryKey=[id]
end with
$Con.Close()
si può essere che ci sia qualche millesimino in più di vantaggio con l' sql puro.
però m viene un dubbio ... con questo id fields.Add("id", db.integer)
hai un id autoincrementante? a me sembrerebbe di no