Problemi aggiornamento dati su una tabella con Query aggiornamento

lunedì 29 settembre 2014 - 11.47

GQ68 Profilo | Newbie

Ho una tabella di dati che mi servono per determinare un totale.

es.
campo1=id
campo2=valore
campo3=valore percentuale di maggiorazione ( alcuni hanno 2%, altri hanno 5%)
campo4=princ/sec/vari

Il prodotto totale mi dà 100

Vorrei simulare, cambiando il CAMPO3 quanto mi diventa il totale.

Ho provato con una query di aggiornamento ma mi aggiorna tutti i valori, mentre io vorrei cambiarne solo alcuni.
Ad esempio:

Se il CAMPO4 è PRINC da 2% vorrei mettere il 3%

Quindi vorrei aggiornare solo una parte dei valori per determinate condizioni.
Qualcuno mi puo' dare una mano?

alx_81 Profilo | Guru

>Ho una tabella di dati che mi servono per determinare un totale.
>Vorrei simulare, cambiando il CAMPO3 quanto mi diventa il totale.
>Ho provato con una query di aggiornamento ma mi aggiorna tutti
>i valori, mentre io vorrei cambiarne solo alcuni.
>Quindi vorrei aggiornare solo una parte dei valori per determinate
>condizioni. Qualcuno mi puo' dare una mano?
Ma vuoi simulare (e quindi fare a runtime il calcolo, "al volo" diciamo) o vuoi proprio aggiornare la tabella col nuovo risultato in base alla condizione?
Ad ogni modo, cerca di postarci:
- create table con tutti i campi che ti servono
- dati di esempio (insert into)
- dati che vorresti come risultati e condizioni per averli


Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

GQ68 Profilo | Newbie

Come vedi è abbastanza semplice.
Nella realtà la tabella è molto piu' complessa perchè i dati che andrei a variare sarebbero molti altri, ma il principio è lo stesso.
La tabella principale è in excel e collegata in access.
Ho una prima Query di creazione tabella che mi genera una tabella nuova(estrazione1) coi soli campi che mi interessano ed i prodotti.
Ho una seconda Query che aggancia estrazione1 a sua volta genera una tabella(estrazione2) alla quale poi cambio i valori.
Ed infine una terza Query che mi aggancia la tabella(estrazione2) con i valori modificati e mi rifà i prodotti.

...non mi sembra una soluzione ottimale ma nn sono riuscito a afre di meglio.

Che mi consigli?

ps: quale funzione posso usare per convertire i valori negativo mettendoli a "0"

alx_81 Profilo | Guru

>Che mi consigli?
Mi dispiace ma quello che tu mi hai passato non mi aiuta tanto.
Ho capito quello che ti serve, credo, ovvero:
- vuoi impostare un valore di percentuale parametrizzato
- vuoi che al cambiare del valore cambi la formula che usa quel parametro
- vuoi cambiarlo in base a certi casi ("princ")

Quello che non capisco è dove lo fai? come lo fai? cosa cambi? Parliamo di access, perchè non mi passi un database di esempio in access?
Così non so proprio cosa scriverti.. ti serve un SQL?
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi

GQ68 Profilo | Newbie

Questo è il file.

Quello che vorrei, usando Access, è poter cambiare le variabili non in maniera massiva ma selettiva in funzione di un parametro.
Con la query di aggiornamento riesco a farlo solo massivamente, quindi non è la strada giusta.

In funzione del valore del campo Info, vorrei applicare una variabile3 , le variabili 2 e 1 le posso cambiare anche in maniera massiva su tutti .
Alla fine, al risultato che ottengo applico uno sconto.
In linea di massima è questo.

Il lavoro l'ho finito ottenedo una tabella sulla quale ho fatto le variazioni a mano filtrando i campi che mi interessano, e poi applicando le formule in cascata... ma volevo capire se potevo arrivare alla stessa soluzione con una forma piu' "elegante"...

alx_81 Profilo | Guru

>Questo è il file.
Quello che vedo, in effetti, sono tabelle.
Quello che vorrei capire meglio è se ti serve una form in cui inserire, oppure se vuoi un comando SQL che fa l'update di n record in base al valore di un campo.
Nel primo caso, serve fare una finestra e collegare i parametri, nel secondo caso serve una query di aggiornamento (UPDATE) condizionata.

>Quello che vorrei, usando Access, è poter cambiare le variabili
>non in maniera massiva ma selettiva in funzione di un parametro.
>Con la query di aggiornamento riesco a farlo solo massivamente,
>quindi non è la strada giusta.
In SQL, usando il CASE (o switch in access se non ricordo male, https://support.office.com/en-US/Article/Switch-Function-d750c10d-0c8e-444c-9e63-f47504f9e379) puoi dire una cosa tipo:

- Aggiorna la tabella
- metti nel campo X il valore Y1 se si verifica la condizione C1
- metti nel campo X il valore Y2 se si verifica la condizione C2
- metti nel campo X il valore Yn se si verifica la condizione Cn
- altrimenti metti nel campo X il valore Y

e questo lo puoi fare con un solo comando SQL.
Quindi è sempre massiva, ma condizionata.
Ora, siccome mi hai passato tre tabelle di cui non ho documentazione ed una quarta che sembra essere una di raccordo (più la query che hai creato), ti chiedo di verificare se la funzione Switch fa al caso tuo. Oppure, anche la IIF usata più volte (http://office.microsoft.com/it-it/access-help/funzione-iif-HA001228853.aspx).

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

GQ68 Profilo | Newbie

..ma se lo volessi fare con un form?

alx_81 Profilo | Guru

>..ma se lo volessi fare con un form?
devi creare una maschera che accetta un campo (che poi è la tua variabile) e al click del pulsante "salva" (o qualcosa di simile) esegue un programma scritto in Visual Basic che fa quello che serve (lanciare una query).
Solo che, e ti chiedo scusa, non riesco a capire quello che vuoi fare tu
Forse la tua domanda "ma se lo volessi fare con un form?" indica che stai facendo una scelta per prendere una strada
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

GQ68 Profilo | Newbie

beh si...devo decidere
Io il risultato l'ho ottenuto...a modo mio.

Vorrei pero' preparare qualcosa di semplice ed intuitivo che possa essere usato da un altro operatore digiuno di qualunque conoscenza di programmazione.

Vorrei che potesse , al variare di alcune variabili, come detto, poter arrivare ad un valore totale.

Gli predispongo una tabella collegata che lui periodicamente aggiornerà, e poi da una maschera imputerà determinate variabili che in un report gli darà dei valori sulla base dei quali farà delle scelte.

Se mi potessi aiutare in tale senso ti sarei grato.

alx_81 Profilo | Guru

>Vorrei pero' preparare qualcosa di semplice ed intuitivo che
>possa essere usato da un altro operatore digiuno di qualunque
>conoscenza di programmazione.
>Vorrei che potesse , al variare di alcune variabili, come detto,
>poter arrivare ad un valore totale.
>Gli predispongo una tabella collegata che lui periodicamente
>aggiornerà, e poi da una maschera imputerà determinate variabili
>che in un report gli darà dei valori sulla base dei quali farà
>delle scelte.
ok, se modifica la tabella che gli esponi e se la chiave di quella tabella di consente di accedere alla tabella definitva è sufficiente fare una sola query di aggiornamento (UPDATE) che sfrutta la JOIN per andare ad aggiornare i dati per cui è stato immesso il valore di "sconto". L'UPDATE dovrà considerare, con una funzione Switch come ti dicevo o una serie di Iif, i casi del campo che identifica il comportamento. O forse puoi anche evitare l'update, se ti basta mostrare il valore. In quel caso basta la select.

Ti faccio un semplice esempio a parole:
- tabella collegata TC con ID, TIPO e VALORE_SCONTO
- tabella di destinazione DEST con chiave sua, IMPORTO_INIZIALE e ID
- ipotizza di cambiare a runtime e non di persistere il valore dell'importo scontato, fai una select simile a questa:
SELECT
DEST.ID
, DEST.IMPORTO_INIZIALE
, DEST.IMPORTO_INIZIALE - (DEST.IMPORTO_INIZIALE * TC.VALORE_SCONTO) as IMPORTO_SCONTATO
FROM
DEST
INNER JOIN TC ON TC.ID = DEST.ID

In questo modo, quando le due tabelle si legano per la chiave che scegli, vai a fare l'espressione al volo e dovresti essere a posto. Alla fine è la query che interpreta tutto..
può andare?
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5