PDA

View Full Version : [VB] inserire dati in un database


enrico999
29-03-2005, 14:09
per inserire dati in un database ho pensato di fare una form, e mettere diverse textbox che corrispondono ai campi del database, poi ho messo un command button che ho chiamato inserisci.

Ad esempio: c'è il campo nome e quando clicco inserisci il nome che ho inserito deve essere memorizzato nel database.

Qualcuno sa come posso fare???

enrico999
30-03-2005, 09:03
nessun programmatore professional di visual basic mi può dare una mano???

~Blissard~
30-03-2005, 10:31
Devi usare ado o dao

enrico999
30-03-2005, 12:54
si, ma purtroppo non essendo molto ferrati col VB non capisco come devo fare per far si che ad esempio quello che inserisco nel textbox1 sia inserito nel campo nome della mia tabella, quello del textbox2 nel cognome e così via.

se qualcuno sa come posso fare...

Brigante
30-03-2005, 13:58
Mi aspettavo questa tua richiesta :D
E' legata sempre allo stesso programma?

Per scrivere dati in una tabella del database devi usare l'istruzione SQL: INSERT INTO... dandola in pasto alla funzione Execute della connessione. Quindi...

sSQL="INSERT INTO NOME_TABELLA VALUES(' " & Nome_TextBox1.Text & " ',' " & Nome_TextBox2.Text & " ')"
dbConn.Execute sSQL


L'istruzione SQL scritta sopra serve per inserire tutti i campi nella tabella, se devi inserire soltanto alcuni campi va leggermente modificata.
Lo spazio tra l'apice singolo e il doppio va eliminato, ce l'ho messo soltanto per farti capire come stanno messi.
Riproducendo la struttura sopra puoi inserire tante TextBox quanti sono i campi. Se in qualcuna delle TextBox invece di una stringa c'è un valore numerico devi togliere gli apici singoli dall'estremità della TextBox interessata.

enrico999
30-03-2005, 15:40
be si, è tutto legato allo stesso programma, ma devo dire che grazie al vostro aiuto sto imparando moltissimo.


Ora ho un problema con il codice (ho tolto gli apici singoli dove devo inserire solo numeri)

Ecco il mio codice:

sSQL = "INSERT INTO Tabella1 VALUES(" & Text1.Text & "," & Text2.Text & ",'" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "'," & Text6.Text & ",'" & Text7.Text & "')"
dbConn.Execute sSQL


e mi da il seguente errore:

Errore di compilazione: non valido all'esterno di una routine

e mi evidenzia questo pezzo:
"INSERT INTO Tabella1 VALUES("

Brigante
30-03-2005, 15:52
Originariamente inviato da enrico999
...
e mi da il seguente errore:

Errore di compilazione: non valido all'esterno di una routine

e mi evidenzia questo pezzo:
"INSERT INTO Tabella1 VALUES("

Per forza, quel codice devi inserirlo dentro una subroutine (Sub) o una funzione (Function), per esempio potresti fare così:

Private Sub ScriviRecord()
sSQL = "INSERT INTO Tabella1 VALUES(" & Text1.Text & "," & Text2.Text & ",'" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "'," & Text6.Text & ",'" & Text7.Text & "')"
dbConn.Execute sSQL
End Sub


Scrivendola così però è una soluzione mooolto semplice, manca un'oppurtuna gestione degli errori. Comunque, per eseguire il codice al suo interno devi "chiamarla" scrivendo il suo nome dopo l'istruzione Call, cioè: Call ScriviRecord.
;)

enrico999
30-03-2005, 16:04
non è che magari devo mettere quel codice dentro questo???

Private Sub Command1_Click()

End Sub


perchè nella form ho messo due pulsanti, uno deve annullare e l'altro deve inserire quello che ho scritto nel database...

... forse sto sbagliando tutto????

Brigante
30-03-2005, 17:39
Originariamente inviato da enrico999
non è che magari devo mettere quel codice dentro questo???

Private Sub Command1_Click()

End Sub


perchè nella form ho messo due pulsanti, uno deve annullare e l'altro deve inserire quello che ho scritto nel database...

... forse sto sbagliando tutto????

Si, il codice della INSERT... puoi metterlo nel Command1_Click.

enrico999
30-03-2005, 18:03
ed invece

Call ScriviRecord

dove lo devo mettere???

davidino80
30-03-2005, 19:51
nel form

Public Sub ScriviRecord()

metti tutto il codice

End sub

poi sul tasto interessato:

form1.ScriviRecord


Altrimenti metti pure la sql nel pulsante :)

enrico999
31-03-2005, 14:03
allora ho fatto:

Private Sub ScriviRecord()

sSQL = "INSERT INTO Tabella1 VALUES(" & Text1.Text & "," & Text2.Text & ",'" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "'," & Text6.Text & ",'" & Text7.Text & "')"
dbConn.Execute sSQL

End Sub


Private Sub Command1_Click()

Call ScriviRecord

End Sub


Però mi da errore
Errore di run-time '424': necessario oggetto

Brigante
31-03-2005, 14:45
Originariamente inviato da enrico999
allora ho fatto:

Private Sub ScriviRecord()

sSQL = "INSERT INTO Tabella1 VALUES(" & Text1.Text & "," & Text2.Text & ",'" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "'," & Text6.Text & ",'" & Text7.Text & "')"
dbConn.Execute sSQL

End Sub


Private Sub Command1_Click()

Call ScriviRecord

End Sub


Però mi da errore
Errore di run-time '424': necessario oggetto

La connessione come l'hai chiamata? Nell'altro post mi sembra che si chiamava db, quindi devi sostituire dbConn con db.

enrico999
31-03-2005, 14:55
anche se sostituisco mi da lo stesso errore di prima

Brigante
01-04-2005, 14:23
Originariamente inviato da enrico999
anche se sostituisco mi da lo stesso errore di prima

Ricontrolla attentamente che tutto quello che usi (scrivi nel codice) sia dichiarato correttamente.

davidino80
02-04-2005, 10:41
al posto di Call ScriviRecord prova a scrivere solo ScriviRecord ... non vorrei che la chiamata volesse un oggetto per forza.
:)

enrico999
02-04-2005, 15:10
anche se scrivo solo ScriviRecord al posto di Call ScriviRecord mi da sempre lo stesso errore:

necessario oggetto

davidino80
03-04-2005, 11:22
Originariamente inviato da enrico999
anche se scrivo solo ScriviRecord al posto di Call ScriviRecord mi da sempre lo stesso errore:

necessario oggetto
esattamente, su che riga si ferma il debug?

enrico999
03-04-2005, 12:49
nel mio pezzo di codice:

Private Sub ScriviRecord()

sSQL = "INSERT INTO Tabella1 VALUES(" & Text1.Text & "," & Text2.Text & ",'" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "'," & Text6.Text & ",'" & Text7.Text & "')"
db.Execute sSQL

End Sub


il debug si ferma qui:

db.Execute sSQL

RaouL_BennetH
03-04-2005, 18:22
Originariamente inviato da enrico999
nel mio pezzo di codice:

Private Sub ScriviRecord()

sSQL = "INSERT INTO Tabella1 VALUES(" & Text1.Text & "," & Text2.Text & ",'" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "'," & Text6.Text & ",'" & Text7.Text & "')"
db.Execute sSQL

End Sub


il debug si ferma qui:

db.Execute sSQL


>EDIT<

Brigante
04-04-2005, 08:21
Originariamente inviato da enrico999
nel mio pezzo di codice:

Private Sub ScriviRecord()

sSQL = "INSERT INTO Tabella1 VALUES(" & Text1.Text & "," & Text2.Text & ",'" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "'," & Text6.Text & ",'" & Text7.Text & "')"
db.Execute sSQL

End Sub


il debug si ferma qui:

db.Execute sSQL

La variabile db dove l'hai dichiarata? Per essere visibile in tutto il form la devi dichiarare su in alto (fuori da tutte le sub e function) sotto ad Option Explicit; manca anche la dichiarazione della variabile sSQL nella Sub in questione, che deve essere Dim sSQL as String.

enrico999
04-04-2005, 10:53
vi posto tutto il mio codice, perchè ho fatto un po' troppo casino e non ci capisco più niente





Private Sub ScriviRecord()

sSQL = "INSERT INTO Tabella1 VALUES(" & Text1.Text & "," & Text2.Text & ",'" & Text2.Text & "','" & Text3.Text & "','" & Text4.Text & "','" & Text5.Text & "'," & Text6.Text & ",'" & Text7.Text & "')"
db.Execute sSQL

End Sub

Private Sub Command1_Click()

ScriviRecord

End Sub

Private Sub Form_Load() 'cioè, ogni volta che aprirò il form

Set db = New ADODB.Connection
Set rs = New ADODB.Recordset

'instauro la connessione con il database

db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" & App.Path & "\db97.mdb"

db.Open 'apro il database


End Sub ' Fine Funzione Form_Load()



potete per caso dirmi dove devo dichiarare db e come mettere a posto tutto il codice???

Brigante
04-04-2005, 11:35
...Infatti manca la dichiarazione della variabile db, l'hai soltanto istanziata tramite il Set..., quindi fuori dalla Form_Load, su su in alto nel codice della form, scrivi:Private db as ADODB.Connection

enrico999
04-04-2005, 16:49
ho fatto, ma mi da questo errore:

Il numero di valori nella query non corrisponde a quello dei campi di destinazione.


Cosa c'è ancora di sbagliato???

Brigante
05-04-2005, 08:02
Originariamente inviato da enrico999
ho fatto, ma mi da questo errore:

Il numero di valori nella query non corrisponde a quello dei campi di destinazione.


Cosa c'è ancora di sbagliato???

Significa che hai passato alla query un numero minore o maggiore del totale dei campi esistenti nella tabella a cui fai riferimento. Tu devi scrivere tutti i campi, o solo alcuni? Se li devi scrivere tutti, la sintassi della INSERT... è corretta, però ricontrolla che tutte le TextBox valorizzino correttamente il proprio campo corrispondente.