Leggere il tuo post non è stato facile, oltre a mancare di chiarezza nell'esposizione, non hai nemmeno formattato il codice, per cui la difficoltà nel leggere è aumentata.
Da quello che ho capito io (se ho capito),
quando elimini un documento vuoi aggiornare il campo esistenza di ogni articolo, ricaricando il valore precedentemente scaricato dal documento.
per prima cosa mi chiedo il perchè di questa istruzione:
Do While X < cn.Execute(rps).RecordCount
che esegue la query ad ogni iterazione (non ha alcun senso!).
Piuttosto dovresti fare così:
Ma secondo me invece il loop dovrebbe essere impostato così...codice:Dim nRec as long nRec = rps.RecordCount Do While X < nRec '... Loop
(non conoscendo le tue tabelle, te lo scrivo in pseudo-codice):
Usare Do While Not rps.EOF è importante soprattutto perchè la proprietà RecordCount restituisce un valore corretto solo se la connessione è impostata sul cursore lato client. Lato server, invece, restituisce sempre -1.codice:Do While Not rps.EOF cn.Execute("UPDATE articoli SET esistenza = esistenza + qta-da-recuperare.... WHERE ....") rps.movenext Loop Rem Ora posso eliminare il documento cn.Execute("DELETE * FROM tabella where IDDocumento = " & idDocumento)
Ora, quando si eseguono operazioni di INSERT ed UPDATE è indispensabile inglobarle in una transazione (cn.BeginTrans/cn.CommitTrans), ma questo è reso possibile SOLO se si imposta il cursore della connessione su adUseServer .
Le transazioni sono fondamentali, altrimenti si rischia molto (dati inconsistenti, perdita di dati, ecc.). Metti che ti si spenga il pc proprio in quel momento...![]()
Per concludere...
Il fatto che ti aggiorni UN solo articolo è ovvio, questa istruzione legge sempre gli stessi dati
Ciaocodice:sqe = " update articoli set esistenza ='" & Val(txtscarico.Text) + Val(txtesistenza.Text) & _ "' WHERE descrizione='" & txtdescrizione.text & "'"![]()

Rispondi quotando