ciao ragazzi. non riesco a capire dove sbaglio in questa query![]()
rs.open "Update analisi set spese in(Select sum(prezzo) from prezzario group by voci)", db, adOpenStatic
è una semplice query di aggiornamento. ma non capisco dove sbaglio.
ciao ragazzi. non riesco a capire dove sbaglio in questa query![]()
rs.open "Update analisi set spese in(Select sum(prezzo) from prezzario group by voci)", db, adOpenStatic
è una semplice query di aggiornamento. ma non capisco dove sbaglio.
- DenvEr -
:master:Originariamente inviato da DenvEr87
...
rs.open "Update analisi set spese in(Select sum(prezzo) from prezzario group by voci)", db, adOpenStatic
...
scusa. ma nell'impazzire ho dimenticato qualcosa.
mi spiego meglio
sto lavorando su un .mdb access
ho due tabelle
voglio che un campo della tabella 1 venga aggiornato con la somma di 2 determinati campi della tabella due.
quindi provo cosi'
rs.open "update listino set prezzo in (select sum (totale) from prezziario group by voci) where tariffa='" & Text1.Text &"' ", db, adOpenStatic
non capisco dove sbaglio. l'utilizzo di "IN" che io sappia serve a far annidare due query ed è proprio quello che sto cercando di fare. solo che non capisco perchè non funziona se la query è di tipo update!
- DenvEr -
E' sbagliata in varie parti, e comunque una query di aggiornamento non restituisce un recordset.
Spiega cosa vorresti fare e indica anche a quale tipo di database è rivolta.
sto creando un applicazione in vb6 che carica i dati in un mshflexgrid da un file .mdb di microsoft access 2007. tutto funziona o almeno sembra![]()
provo a renderlo piu facile.
ora son arrivato al punto che mi serve modificare un campo della tabella 1 che chiamerò listino. il campo è "prezzo". voglio che "prezzo" prenda come valore, la somma di due determinati valori di un campo che si chiama totale, della tabella2 che si chiama prezziario.
come posso fare?
- DenvEr -
Come ti ha già detto Grumpy, sbagli in varie parti.Originariamente inviato da DenvEr87
rs.open "update listino set prezzo in (select sum (totale) from prezziario group by voci) where tariffa='" & Text1.Text &"' ", db, adOpenStatic
non capisco dove sbaglio. l'utilizzo di "IN" che io sappia serve a far annidare due query ed è proprio quello che sto cercando di fare. solo che non capisco perchè non funziona se la query è di tipo update!
1. set prezzo = ... (e NON set prezzo IN ...)
2. la query (select sum .... cosa restituisce se eseguita da sola?
3. di norma per fare un'aggiornamento non serve un recordset, basta il metodo Execute della connessione, o meglio, si dovrebbe usare un Command, quindi Command.Execute
4. il tuo recordset è ReadOnly, come fa ad aggiornarsi?
(sempre ammesso che l'enunciato SQL sia corretto, il che non è)
E comunque non funziona l'update in quel modo.
Perchè quasi sicuramente restituisce un'errore "E' necessaria una query aggiornabile'.
Soluzione diretta:
Prendi il valore dalla tabella prezziario, poi usalo nella query di aggiornamento della tabella listino.
![]()
come faccio a prendere quel valore e ad annidare il tutto?
- DenvEr -
Non capisco la domanda.Originariamente inviato da DenvEr87
come faccio a prendere quel valore e ad annidare il tutto?![]()
Hai già l'enunciato SELECT che prende il valore dal prezziario, perchè ora lo chiedi a noi?
Spiega anche cosa intendi per 'annidare il tutto' ...
La parola chiave "IN" serve ad indicare che la tabella fa parte di un altro database.
Sum(totale) non ti darebbe la somma di due campi ma la somma di tutti i valori del campo totale della tabella prezziario.
(Oltre alle osservazioni di gibra)
allora.mi spiego meglio
tabella1 ha 3 record e 2 campi che sono nomevoce e prezzo
voce1 che vale 5
voce2 che vale 10
voce3 che vale 15
tabella2 ha 2 record e 2 campi che sono nomevoce e somma
voce1 che vale 2
voce1 che vale 3
ora se modifico il primo valore di tabella 2 ( che è 2) e metto per esempio 4 voglio che in tabella 1 al posto di 5 mi dia 7. una cosa del genere.
ora non so se ho incasinato il discorso.
- DenvEr -