Newsgroup: it.comp.lang.visual-basic
Titolo: Metodo Update con ADO

Ragazzi usando il metodo update con ADO 2.8 su un database MySQL mi 
viene dato un errore.
CODICE VB:
Dim Conn As New ADODB.Connection
Dim RS As New ADODB.Recordset
Sub form_load()
     With Conn
         .Mode = adModeShareDenyNone
         .CursorLocation = adUseClient
         .Open "Driver={MySQL ODBC 3.51 Driver}; Server=localhost; 
Usr=root; pwd=; DataBase=Anagrafe"
     End With
     RS.Open "SELECT * FROM Anagrafe WHERE ID=100", Conn, adOpenDynamic, 
adLockOptimistic
         RS!cognome = "PIPPO"
         RS.Update
     RS.Close
     Conn.Close
End Sub
------------------
Fine del codice
------------------
Se lancio l'applicazione, mi viene dato questo errore:
Errore du run-time '-
2147217864
 (80040e38)'
Impossibile individuare la riga specificata per l'aggiornamento. E' 
possibile che alcuni valori siano stati modificati dopo l'ultima 
operazione di lettura.
Non riesco a capire come fare a usare il metodo update.
Ho provato sia con adOpenDynamic che adOpenStatic, ma niente da fare.
Anche usando una connessione del tipo adUseServer non cambia nulla.
Nella tabella ho un campo chiave primario (ID) di tipo auto_increment. 
Quindi anche la chiave primaria c'č.
Sapete niente?
Ho cercato questo numero di errore su google ma non ho trovato soluzioni.
Attendo fiducioso una risposta.
-- 
Quando noi ignoranti eravamo di piů,
tutto era piů bello...
(A. Celentano)

 Non riesco a capire come fare a usare il metodo update.
a parte il fatto che non verifichi se il record con l'id 100 è stato
effettivamente trovato, e che io indicherei il campo con la sintassi
RS.fields.("cognome") = "PIPPO"
non trovo nulla di strano.
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 non trovo nulla di strano.
Niente suggerimenti? :(


Niente suggerimenti? :(
Mi sorge un dubbio ... che sia l'autoincrement?
Ciao!

 
Ma l'auto_increment sotto MySQL non dovrebbe essere l'equivalente del 
contatore per Access?
Se tento quella mia operazione su un archivio access va tutto ok.
Tant'č che sto proprio convertendo una mia applicazione da Access a MySQL.


 Tant'č che sto proprio convertendo una mia applicazione da Access a MySQL.
Comunque in ogni caso se tento qualcosa tipo:
Connessione.Execute "UPDATE MiaTabella SET Cognome='PIPPO' Where ID=100"
funziona tutto a meraviglia.


Tant'è che sto proprio convertendo una mia applicazione da Access a MySQL.
Premesso che sto facendo delle supposizioni ...
Da una parte passi attraverso Jet, dall'altra MyODBC se non erro; se
non è un problema del driver forse è qualche proprietà che non è stata
settata in modo opportuno.
Ciao!

 settata in modo opportuno.
Ho scoperto una cosa: il problema si verifica con i campi che ho
dichiarato di tipo VARCHAR.
Se devo inserire un nuovo record, posso fare quel che mi pare e piace.
Se invece devo modificare un campo e questo è di tipo VARCHAR, allora
non posso farlo se il testo che sto per assegnargli è di lunghezza
superiore a quello già presente.
Ad esempio ho:
ID BIGINT(20) Auto_Increment (Primary Key)
Cognome [VARCHAR(30)] = "Pippo"
Se faccio
RS!Cognome="Caio"
RS.Update
è tutto ok.
Se invece di assegnare "Caio" tento con "Allodola", l'update mi dà
errore.
In pratica non riesco ad assegnare ad un campo varchar, un testo che sia
di lunghezza maggiore o uguale a quella del testo già presente.
Con il resto dei tipi è tutto ok. Date, Numeri (interi e non), tutto ok.
Coi VARCHAR c'è questo problema.
Sarebbe un tantino fastidioso doversi fare una serie di Execute "INSERT
INTO..." o "UPDATE ... SET ... " quando i campi testo da
aggiungere/modificare sono molti...
Aiuti?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Aiuti?
credo sia un comportamento molto specifico del driver per mysql.
devi verificare se è un comportamento by design (emmica ci sarà solo la MS
che fa cazzate by design), o se è un bug corretto da qualche nuova release.


 che fa cazzate by design), o se è un bug corretto da qualche nuova release.
Allora... sono andato sul sito di MySQL per prendere una nuova versione
degli ODBC 3.51, li ho installati (disinstallando prima quelli vecchi)
ma il problema sussisteva.
Allora dando un'occhiata a degli esempi di connessioni via ADO/DAO/etc.
ho notato che la connessione loro la fanno con:
Driver={MySQL ODBC 3.51 Driver};
USR=...;
PWD=...;
Server=...;
DataBase=...";
OPTION=3
Aggiungendo anche io quell'OPTION=3 riesco a fare quello che voglio.
Quindi il problema è risolto.
Ora mi (e VI) chiedo... cos'è quel parametro? Dove trovo un elenco di
possibili valori?
Non posso certo andare a naso o usare sempre quel 3...
Thx tantissimo per gli aiuti!
P.S.: Almeno ora so che quelli di MySQL non hanno fatto cazzate by
design. Soddisfazione :) :) :)


Ho risolto :)
Sul sito di MySQL (ovviamente) sono riuscito a trovare i possibili
valori.
Un grazie a tutti quelli che mi hanno aiutato!!!


 valori.
hai fatto trenta, fai trentuno: o posti qui l'elenco dei valori, o metti il
link alla pagina.
grazie.


 grazie.
Si scusate :)
E' una parola ritrovare quel link... ma ci provo...
Qualche minuto di pazienza...
Eccolo qui :D
http://dev.mysql.com/doc/connector/odbc/en/faq_3.html#Connection
Salut!!!
