per collegarti al database come fai?
per collegarti al database come fai?
Allora prima esegui la query che ti recupera il valore (in questo caso ti serve un recordset per incamerarlo):
Supponiamo che CN è la tua connessione al database:
Ora rs("totale") contiene la sommacodice:Dim sSQL As String Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset sSQL = " SELECT voce1+voce2 As Totale FROM Tabella 2 " sSQL = sSQL & " WHERE <condizione_che_identifica_il_record_modificato>" Set rs = CN.Execute(sSQL)
Adesso puoi fare l'aggiornamento
Comunque non andrebbe fatto così come te l'ho mostrato io.codice:sSQL = "" sSQL = " UPDATE Tabella1 SET voce1 = " & rs("totale") sSQL = sSQL & " WHERE <condizione_che_identifica_il_record_da_modificare>" CN.Execute sSQL rs.Close Set rs = Nothing
Ma d'altra parte questi sono i campi che hai indicato e non sapevo cosa mettere.
Nella realtà, le due clausole WHERE vanno impostate correttamente sulla PK della tabella.
Perchè c'è una PK in entrambe le tabelle, vero?
![]()
in realtà NO!
la pk l ho impostata solamente nella prima tabella. ora metto un cattura schermata e vi mostro quello che voglio fare. cosi si capisce molto. comunque grazie all ultimo esempio di gibra e all'aiuto di tutti ho piu o meno risolto (penso). solo che manca ancora qualcosa perchè non fa l aggiornamento.
ora da come si vede nell immagine vorrei che in tabella "analisi" si faccia una somma
di "TOTAL" e che vengano raggruppate tutte le stringhe per "VOCEC"
in tabella2, "LISTINO" ovviamente voce1 non dovrebbe piu valere 49,34 ma 220,11. quindi lo sovrascrive.
io ho pensato di far cosi' ma non mi sovrascrive nulla in listino.![]()
Dim sSQL As String
sSQL = " SELECT vocec, sum(total) as totale from analisi group by vocec"
Set rs = db.Execute(sSQL)
sSQL = " UPDATE listino SET prezzo = " & rs("totale") & " where tariffa= " & rs("vocec") & ""
rs.close
- DenvEr -
AHI!!! Devi SEMPRE avere una chiave primaria univoca che ti consenta di identificare inequivocabilmente una riga della tabella, altrimenti prima o poi avrai problemi di aggiornamento.Originariamente inviato da DenvEr87
in realtà NO!
In linea di massima io uso sempre un campo extra di nome <ID + nometabella>, esempio IDListino, IDAnalisi, ...
Prima di tutto, non può fare l'aggiornamento semplicemente perchè la condizione è sbagliata.Originariamente inviato da DenvEr87
ora da come si vede nell immagine vorrei che in tabella "analisi" si faccia una somma
di "TOTAL" e che vengano raggruppate tutte le stringhe per "VOCEC"
in tabella2, "LISTINO" ovviamente voce1 non dovrebbe piu valere 49,34 ma 220,11. quindi lo sovrascrive.
io ho pensato di far cosi' ma non mi sovrascrive nulla in listino.![]()
Dim sSQL As String
sSQL = " SELECT vocec, sum(total) as totale from analisi group by vocec"
Set rs = db.Execute(sSQL)
sSQL = " UPDATE listino SET prezzo = " & rs("totale") & " where tariffa= " & rs("vocec") & ""
rs.close
Infatti tu stai dicendo al motore database (mi esprimo in pseudo-codice):codice:where tariffa= " & rs("vocec") & ""
Adesso guarda la tua tabella listino : non esiste un campo tariffa con valore 'vocec'!codice:Aggiornami il campo prezzo della tabella listino ma solo per i record in cui il campo tariffa è = 'vocec '
Ma anche la SELECT vocec, sum(total) as totale non è propriamente corretta.
il campo vocec non va messo, infatti ti costringe ad aggiungere un 'GROUP BY vocec' inutile e dannoso e che, in realtà, ti 'divide' le righe (restituisce 3 record) invece quando tu ne vuoi UNA sola con la somma totale, quindi la SELECT corretta è:
Ora veniamo all'UPDATE. A parte quanto ho già scritto sopra, tu scrivi questo enunciato SQLcodice:sSQL = " SELECT sum(total) as totale FROM analisi"
Ora guarda bene il tuo enunciato SQL e rispondimi:codice:sSQL = " UPDATE listino SET prezzo = " & rs("totale") & " where tariffa= " & rs("vocec") & ""
dove hai indicato che il valore rs("totale") dovrà sostituire quello esistente (49,34) del campo 'voce1' della tabella Listino ?![]()
Devi indicare espressamente la condizione che identifica la riga da modificare, in pratica:
WHERE campo=valore_corrente
ovvero:
codice:sSQL = " UPDATE listino SET prezzo = " & rs("totale") & " WHERE voce1 = 49,34
![]()
grazie gibra!!!
in effetti mi sono spiegato abbastanza male. in effetti non ho detto in maniera esplicita di modificare " WHERE voce1 = 49,34" perchè a me interessava far si che le somme di "ANALISI" dove vocec = X, venissero aggiornate in "LISTINO" dove tariffa è = X.
anche quelle somme che comunque rimangono invariate
- DenvEr -
penso che sia una cosa del genere alla fine. ma non aggiorna.
Dim sSQL As String
sSQL = " SELECT sum(total) as totale FROM analisi"
Set rs = db.Execute(sSQL)
sSQL = " UPDATE listino SET prezzo = " & rs("totale") & " WHERE listino.tariffa= analisi.vocec"
- DenvEr -
Mi pare ovvio che non aggiorna.![]()
Rileggi i messaggi precedenti. Ne abbiamo già parlato, e continui a fare lo stesso errore.
![]()