PDA

Visualizza la versione completa : vb6 problemi con ado


marcello90
22-07-2010, 11:58
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
stringa = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
stringa = stringa & "gissi.mdb"

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

cn.Open stringa
rs.Open "SELECT * FROM login", cn, 1

While rs.EOF = False
'Controllo se i dati immessi sono quelli giusti
If rs("User") = utentemodifica Then
rs("Password") = txtpassword1.Text
rs.Update
End If

rs.MoveNext
Wend


Set cn = Nothing
Set rs = Nothing


Praticamente è il codice che permette di modificare le password
in "utentemodifica" c'e' l'user che ho selezionato


l'errore che mi da vb6 e' questo:

>Errore di run-time 3251
Il set di record corrente non supporta l'aggiornamento.
Potrebbe trattarsi di una limitazione del provider o del blocco selezionato
<

Quale potrebbe essere il problema...e come poterlo risolvere?

grazie

garzone
22-07-2010, 12:13
forse sbaglio maio vedo un

rs.Update

senza prima un rs.edit o .addnew

potrebbe essere li l'errore?

marcello90
22-07-2010, 13:18
rs.edit dove lo devo mettere?

quando scrive rs. tra le varie opzioni selezionabili non c'e' edit....come e' possibile?

garzone
22-07-2010, 15:54
allora in ADO

edit nn esiste hai ragione

sto leggendo la guida e mi pare di capire

che se scrivi rs.adnew senza poi specificare parametri, lo interpreta come edit

quind metti addnew e prova!

va messo nell'if che hai fatto prima del cambio di testo

rs.addnew
if then
text = ......
rs.update

ti riporto il frammento di guida (speriamo che non ti ho incasinato)

Sintassi

recordset.AddNew elencoCampo, Valori

Parametri

ElencoCampo Nome singolo o matrice di nomi o di posizioni ordinali per i campi nel nuovo record (opzionale).

Valori Valore singolo o matrice di valori per i campi nel nuovo record (opzionale). Se Campi è una matrice, anche Valori dovrà essere una matrice con lo stesso numero di membri, altrimenti si verificherà un errore. L'ordine dei nomi dei campi deve corrispondere all'ordine dei valori dei campi in ciascuna matrice.

Osservazioni

Utilizzare il metodo AddNew per creare e inizializzare un nuovo record. Utilizzare il metodo Supports con adAddNew per verificare se è possibile aggiungere record all'oggetto Recordset corrente.

Dopo che è stato chiamato il metodo AddNew, il nuovo record diventa il record corrente e rimane tale finché non viene chiamato il metodo Update. Se l'oggetto Recordset non supporta segnalibri, potrebbe non essere possibile accedere al nuovo record dopo essersi spostati su un altro record. A seconda del tipo di cursore, potrebbe essere necessario chiamare il metodo Requery per rendere accessibile il nuovo record.

Se si chiama AddNew durante la modifica del record corrente o durante l'aggiunta di un nuovo record, ADO chiamerà il metodo Update in modo che le modifiche vengano salvate, quindi creerà il nuovo record.

Il comportamento del metodo AddNew dipende dalla modalità di aggiornamento dell'oggetto Recordset e dal fatto che vengano o meno passati gli argomenti Campi e Valori.

Nella modalità di aggiornamento immediato, ovvero nella modalità in cui il provider apporta le modifiche nella fonte dati corrispondente dopo che è stato chiamato il metodo Update, se si chiama il metodo AddNew senza argomenti la proprietà EditMode verrà impostata su adEditAdd. Il provider memorizza nella cache qualsiasi modifica dei valori dei campi apportata localmente. Se si chiama il metodo Update, il nuovo record verrà inserito nel database e la proprietà EditMode verrà reimpostata su adEditNone. Se si passano gli argomenti Campi e Valori, il nuovo record verrà inserito immediatamente nel database, senza che sia necessario chiamare il metodo Update. Il valore della proprietà EditMode non verrà tuttavia modificato (adEditNone).

Nella modalità di aggiornamento batch, ovvero nella modalità in cui il provider memorizza nella cache più modifiche e le apporta nella fonte dati corrispondente solo quando viene chiamato il metodo UpdateBatch, se si chiama il metodo AddNew senza argomenti la proprietà EditMode verrà impostata su adEditAdd. Il provider memorizza nella cache qualsiasi modifica dei valori dei campi apportata localmente. Se si chiama il metodo Update, il nuovo record verrà aggiunto al recordset corrente e la proprietà EditMode verrà reimpostata su adEditNone, ma il provider non inserirà le modifiche nel database corrispondente finché non verrà chiamato il metodo UpdateBatch. Se si passano gli argomenti Campi e Valori, ADO invierà il nuovo record al provider perché lo memorizzi nella cache. Per inoltrare il nuovo record al database corrispondente, è necessario chiamare il metodo UpdateBatch.

marcello90
22-07-2010, 16:13
messo cosi' ma niente non va

While rs.EOF = False
Set Listaprodotti.DataSource = rs
txtpassword1.DataField = "Password"


'Controllo se i dati immessi sono quelli giusti
If rs("User") = utentemodifica Then
rs.AddNew
rs("Password") = txtpassword1.Text
rs.Update
End If

rs.MoveNext
Wend

garzone
22-07-2010, 16:25
http://forum.html.it/forum/showthread.php?s=&threadid=1062032&highlight=ado+edit


un altro utente aveva il tuo problema vedi se ci tifi fuori qualche cosa

marcello90
22-07-2010, 16:32
Non c'ho capito una gran che :(

oregon
22-07-2010, 16:36
Prova con

rs.Open "SELECT * FROM login", cn, 3, 3

marcello90
22-07-2010, 17:49
Originariamente inviato da oregon
Prova con

rs.Open "SELECT * FROM login", cn, 3, 3

grazie...funzione

solo che l'ho usato senza capire a cosa serve

potresti spiegarmi cosa indicano i due 3?

oregon
22-07-2010, 19:57
Originariamente inviato da marcello90
solo che l'ho usato senza capire a cosa serve


Basta studiare la documentazione della Open del Recordset che trovi in

http://msdn.microsoft.com/en-us/library/ms675544(VS.85).aspx

Al posto dei due 3 potrai usare le costanti elencate per le varie modalità ma, soprattutto, potrai cambiare tali valori in base al tipo di lavoro che vuoi fare con il recordset.

Ma bisogna che tu abbia anche chiari i concetti di base (recordset, tipo di cursore, tipo di lock ...)

Loading