PDA

View Full Version : Inserimento record VISUAL BASIC + mysql


shaolinLOHAN
27-03-2003, 11:28
Ciao a tutti.
Non riesco ad inserire i record nelle tabelle mysql.
Mi interfaccio con le OLEDB tramite le ADO, eseguo le tre istuzioni per inserire il record, ma questo non si inserisce nonostante non mi venga generato nessun errore. Qualcuno sa dirmi il perchè? Premetto che la lettura dei record avviene in modo normale, senza problemi.
Allego qua sotto alcuni pezzi di codice che utilizzo.
Grazie a tutti per le risposte.

CONNESSIONE AL DB:

Public conn As ADODB.Connection
Public comm As Command
Set conn = New ADODB.Connection
conn.Provider = "MySQLProv"
conn.Properties("Data Source") = "DSN=max;SERVER=localhost;DB=Elegest;uid=root;pwd=;port=3306"
conn.Open
Set comm = New ADODB.Command
Set comm.ActiveConnection = conn

APERTURA DEL RECORDSET:

Public Sub ApriRecordset(ByRef r As ADODB.Recordset, ByVal S As String)

On Error GoTo abc
Set r = New ADODB.Recordset
r.CursorLocation = adUseClient
r.Open S, conn, adOpenStatic, adLockBatchOptimistic
Exit Sub

abc:
MsgBox Err.Description
End Sub


INSERIMENTO RECORD:

Dim rec As ADODB.Recordset
ApriRecordset rec, "select * from anmagazzini"

rec.AddNew
rec!desmag = txtMAG.Text
rec.Update

' Nessun errore, ma nessun record inserito :(

cisky
27-03-2003, 12:42
tu apri il record usando il lock di tipo Batch 'adLockBatchOptimistic'.

Utilizzando questa modalità l'update del recordset viene eseguito solo quando richiami il metodo .UpdateBatch

Un recordset con aggiornamento Batch ha il vantaggio che tutte le modifiche apportate con il metodo .update vengono memorizzate ed eseguite in blocco quando si chiama appunto il metodo .UpdateBatch.

Se per esempio esegui un ciclo in cui inserisci tanti record via Recordset ti conviene usare questo metodo, altrimenti apri il recordset con l'opzione adLockOptimistic.

CONSIGLIO: Se puoi utilizza sempre il linguaggio SQL per ottenere il tuo set di dati (ES: "INSER INTO ...", "UPDATE tblXXX ... ", Ecc ...) perchè le operazioni sui recordset sono MOLTO + lente (Circa 30 volte di +).

Spero di esserti stato di aiuto ...

x ogni chiarimento chiedi pure.

Ciao ;)