PDA

Visualizza la versione completa : [VB] Problemi con inserimento in db Access


tyreen
14-10-2002, 09:40
Ciao,
ho notato che quando apro una connessione con un componente adodc verso un db, e quindi una tabella, di access l'insert tramite sql non funziona finch non inserisco a mano da access la prima riga nella tabella. E' un errore mio oppure c' qualcosa che devo settare nella connection string o in qualche altra cosa?

Grazie.
Ty
=^_^=

riky78
14-10-2002, 11:56
prova a postare il codice

tyreen
14-10-2002, 13:00
ecco tutto il codice:

Dim n1, n2 As String

Public cn As ADODB.Connection
Public rs As ADODB.Recordset

Private Sub Command2_Click()
Adodc1.Refresh
End Sub

Private Sub Command1_Click()

n1 = CStr(tnome.Text)
n2 = CStr(tnote.Text)
c = 0

sql1 = "select * from nomi"
Set rs = New ADODB.Recordset
rs.Open sql1, cn

Do While Not rs.EOF
c = c + 1
rs.MoveNext
Loop

c = c + 1

sql = "INSERT INTO nomi VALUES (" & c & ",' " & n1 & " ', ' " & n2 & " ')"
cn.Execute sql
cn.Close

End Sub

Private Sub Command3_Click()
Dim chiave As String
chiave = InputBox("inserisci il nome da rivercare", "trova")

End Sub

Private Sub Command4_Click()
Unload Me
End Sub

Private Sub Form_Load()
Set cn = New ADODB.Connection
strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb"
cn.Open strcon
End Sub

riky78
14-10-2002, 17:36
allora..

c' qualche inesattezza
nella funzione Command1_click
1. la variabile c la usi come contatore? se si non devi inserire tu il valore, ma impostarla come Autonumber (forse in access si chiama diversamente), comunque un tipo numerico che si incrementa da sola
2. In generale se vuoi sapere il numero di record in una tabella non devi contarli in un ciclo, puoi usare la propriete RecordCount del recordset. (quando lo apri: rs.open SQL,Conn,3,3)
3. Se metti il campo chiave come autonumber lo devi togliere dalla stringa SQL: "INSERT INTO nomi (Nome,Note)VALUES (" & n1 & " ', ' " & n2 & " ')"
4. dopo il ciclo meglio chiudere il recordset rs.close
5. Dopo conn.execute chiudi la connessione e non la riapri mai, quindi se riclicchi su command1 la connessione chiusa e non funziona
6. occhio: Dim n1, n2 As String in questa riga n2 di tipo stringa e n1 di tipo variant

In generale il codice un po disordinato.... se fossi in te metterei almeno Option Explicit all'inizio

Loading