Newsgroup: it.comp.lang.visual-basic
Titolo: Inserimento con ADO + OLEDB

Ciao a tutti.
Sto lavorando con le Ado su un db mysql attraverso le oledb.
Premetto che questo programma č stato iniziato  con access e poi
modificato opportunamente per girare con mysql.
Ho cambiato solo la gestione dell'apertura dei recordset e come
navigazione attraverso i record non c'č problema.
Quando devo inserire un record nuovo effetto le classiche istruzioni:
Rec.AddNew
Rec!campo = "pippo"
Rec.Update
In alcuni casi viene generato un errore del tipo:
Row handle is invalid
oppure
bookmark is invalid.
In entrambi i casi il recordset lo apro con un'istruzione sql del tipo:
Select * from miatabella
In Access funzionava, qui no.
Qualcuno mi sa dire perchč??
Grazie a tutti!!
Max
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Beh le implementazioni dei db sono diverse, quindi...
ti conviene di usare l'SQL e non i comandi di ado:
rstArchivio.Execute("INSERT INTO TABELLA VALUES(...)")
--------------------------------
Inviato via 
http://usenet.libero.it

> rstArchivio.Execute("INSERT INTO TABELLA VALUES(...)")
Scusa intendevo l'oggetto Connection e non Recordset.


 rstArchivio.Execute("INSERT INTO TABELLA VALUES(...)")
Scusa, che tu sappia questa è una cosa che capita spesso per cui non c'è
rimedio oppure c'è un modo per utilizzare i recordset.? Per me sarebbe la
cosa migliore perchè mi eviterebbe di toccare moltissimo codice...
Grazie!

*Max Bertoli* ha scritto:

Il rimedio c'è, tranquillo. ;-)
Facci vedere come ti connetti e come componi il recordset.
La tabella ha almeno un indice con chiave univoca?

 La tabella ha almeno un indice con chiave univoca?
Allora, dopo avere aperto una connessione al database MYSQL in questo
modo:
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=mydb1;uid=root;pwd=;port=3306"
conn.Open
Set comm = New ADODB.Command
Set comm.ActiveConnection = conn
Utilizzo una procedura (residente in un modulo) che apre i recordset:
Public Sub ApriRecordset(ByRef r As ADODB.Recordset, ByVal S As String)
On Error GoTo abc
    Set r = New ADODB.Recordset
    r.Open S, conn
Exit Sub
abc:
    MsgBox Err.Description
End Sub
Una tipica chiamata a questa procedura è:
Dim rec as ADODB.RecordSet
...
ApriRecordset rec, "nazioni"
...
Le tabelle su cui ho fatto le prove hanno un indice.


 Le tabelle su cui ho fatto le prove hanno un indice.
Bene, ma almeno un indice (per ogni tabella) deve avere una chiave _univoca_

 Bene, ma almeno un indice (per ogni tabella) deve avere una chiave _univoca_
Il problema degli errori citati in precedenza è stato risolto con
l'aggiunta di un indice per ogni tabella.
In effetti non tutte le tabelle avevano un indice. Nel front-end che uso
per manipolare il db mysql ho una maschera dove si può inserire un
PRIMARY (suppongo chiave) e un bottone
per l'inserimnto di nuovi indici. La cosa funziona quando dichiaro
almeno un nuovo indice. Poi aggiungo
anche un PRIMARY con il campo con cui avevo in precedenza creato
l'indice.
Ho giocato un po' con proprietà CursorLocation e con i parametri
CursorType e LockType e sembra che l'unica che non mi
generi errore sia quella che mi hai indicato tu con CursorLocation =
adUseClient.
Rimane solo un problema: quando inserisco con le solite tre istruzioni,
i dati non vengono inseriti seppur non mi venga
generato l'errore.
    rec.AddNew
    rec!desmag = txtMAG.Text
    rec.Update


     rec.Update
No, questo lo escludo!
O MySQL č bacato o un errore lo devi avere oppure, come sarebbe piů logico
aspettarsi, l'aggiunta deve avvenire regolarmente.
Vedi se hai qualche On error Resume Next o On error Goto ... che ti porta
via...
Mettici (giusto per provare) appena prima del AddNew un On Error Goto 0

 Mettici (giusto per provare) appena prima del AddNew un On Error Goto 0
Veramente ho provato ad eseguire l'app. passo passo ed esegue quelle 3
istruzioni
senza andare in errore ed anche con l'ON ERROR č lo stesso... Proprio
non inserisce i dati nella tabella...
Mi sarei aspettato piuttosto un errore che un comportamento del
genere...


*Max Bertoli* ha scritto:

Infatti, č assolutamente strano (e, francamente, inaccettabile)
A questo punto, se il dato non viene effettivamente inserito e non hai
errori, credo proprio che sia necessario sentire su qualche NG o Forum per
MySQL... Mi spiace.

 MySQL... Mi spiace.
Ok. Grazie mille per l'aiuto. Sentirò qualcuno che lo usa se ha
riscontrato questo tipo di problema.
Grazie di nuovo!!!!
Max
