Newsgroup: it.comp.lang.delphi
Titolo: Aiuto x Delphi3

Premetto sempre che non sono un programmatore, ma ho imparato a scrivere 
qualche applicativo basato su Db Paradox con Delphi 3 Pro.
La richiesta di aiuto è questa:
in questa applicazione, avendo un importo A (che inserisco sempre io), 
devo abbinare altri due importi - B e C, che cambiano quando A è diverso 
e che quindi devono essere visualizzate in 2 dbedit automaticamente.
Ad esempio: se A è compreso fra 1 e 100, B deve essere 10 e C deve 
essere 20.
Se A è compreso fra 101 e 200, B deve essere 30 e C deve essere 40.
Siccome ho un lungo elenco di questi importi A da abbinare a B e C 
(sempre diversi, ovviamente), vorrei sapere - con esempio pratico - 
quale approccio usare, cioè come fare.
Ripeto: sono solo un amante della programmazione, ma ne so molto poco.
Quindi mando benedizioni fin da ora a chi mi potrà aiutare.
-- 
Cordiali saluti da
Mazinga
--------------------
"Imago animi est sermo"

 quale approccio usare, cioè come fare.
partiamo dalla struttura dei dati: ti devi creare una tabella che 
contenga per ogni record il valore di A, B e C
una cosa simile:
ID autoincrementante
A float
B float
C float
ogni volta che scrivi un nuovo record, inserisci A, e calcoli B e C di 
conseguenza.
Questa è la struttura minima per gestire tanti prezzi A diversi.
Mancherebbe tutto il contesto, vale a dire la data dei prezzi, gli 
articoli associati, insomma tutto il dominio del tuo applicativo.
Spiega meglio a cosa servono A, B, e C. Non generalizzare, dacci tutte 
le informazioni che possiedi.
Ciao
-- 
morde
D5,D6,D7
QT 4.7.0 - MingW- QT Creator 2.1

 quale approccio usare, cioè come fare.
Un po' di domande per te:
- se A è un importo ed e' compreso fra 100 e 101 (estremi inclusi)?
- perchè B e C devono andare in due dbedit?
- devono essere registrate su una tabella o basta siano visualizzate?
- esiste una funzione per ottenere B e C da A o l'unica possibilità è
una sorta di indice?
- l'eventuale tabella di corrispondenza è fissa o potrebbe cambiare?
- in caso di variazione della tabella di corrispondenza anche tutti i
B e C già calcolati cambiano o devono rimanere quelli vecchi?
A seconda delle risposte ovviamente cambierebbe "l'esempio pratico
dell'approccio da usare".
Saluti
Paolo Arosio

 Paolo Arosio
Sono cancelliere di tribunale e ho scritto un applicativo per poter 
permettere ai magistrati di redigere i decreti ingiuntivi col pc.
E fin qui tutto ok.
Il mio problema ï¿½ proprio questo: quando inseriscono l'importo A, nelle 
due caselle B (diritti) e C (onorari) devono apparire gli importi presi 
da un elenco-indice fatto cosï¿½:
da 100 a 200 diritti 10, onorari 20;
da 201 a 300 diritti 30, onorari 40;
da 301 a 400 diritti 50, onorari 60, e cosï¿½ via.
se l'importo ï¿½ 150 (digitato in A) - nelle caselle B (diritti) e C 
(onorari) devono apparire 10 e 20 rispettivamente perchï¿½ sono collegati 
all'importo A.
Se A va da 201 a 300, B e C cambiano in 30 e 40 e cosï¿½ via.
Siccome l'elenco ï¿½ composto da circa 30 importi, vorrei "dire" 
all'applicativo che quando l'importo ï¿½ 150 - esempio, mi deve mettere in 
automatico 10 (diritti) e 20 (onorario); se ï¿½ 250 mi deve mettere 30 e 40.
Spero di essermi spiegato.
Grazie per l'interessamento e per l'aiuto che mi darai.


 le informazioni che possiedi.
Ho risposto a Paolo Arosio.
Grazie comunque per l'interessamento.


 da 301 a 400 diritti 50, onorari 60, e così via.
Queste regole vanno messe in una tabella così composta
(ID) IMPORTO_DA IMPORTO_A DIRITTI ONORARI
ho messo l'ID tra parentesi perchè non è strettamente necessario anche 
se utile.
Poi crei una procedura alla quale passi la cifra inserita e lui tramite 
semplice sql con predicato BETWEEN recupera i dati
select DIRITTI, ONORARI from tabella where :parametro BETWEEN IMPORTO_DA 
AND IMPORTO_A
Questa procedura la chiami quando esci dall'edit/dbedit dell'importo.
Spero di non essere stato troppo tecnico.
ciao


 Spero di essermi spiegato.
Ottimo. La tabella di corrispondenza proposta da Morde è decisamente
la soluzione più flessibile.
Se lasci i valori solo su quella tabella, ottieni anche
l'aggiornamento in automatico, se inserisci nel dataset che viene
visualizzato i campi relativi a diritti ed onorari come "calcolati".
Altrimenti, quando dovessero cambiare le corrispondenze fra importi e
spese accessorie, dovresti ricomputare i valori aggiornati per tutti i
record (se non ho capito male).
saluti
Paolo Arosio


Ehmmmm,BTW grazie moltissime.


Potresti cortesemente rispondere alle mie domande? Cioè quale sarebbe il 
parametro e se mi puoi fare un esempio pratico della procedura da 
chiamare all'uscita dall'edit/dbedit. Grazie ancora.

 automatico 10 (diritti) e 20 (onorario); se 250 mi deve mettere 30 e 40.
Un minimo di infrastruttura:
tabella che contiene i dati del decreto ingiuntivo (fra cui importo,
diritti, onorari).
Tabella contenente range dell'importo, diritti ed onorari per quel
range:
tblAccessori:
id (pk), fromImporto, toImporto (currency), diritti, onorario
(currency)
1; 0.00;100.00; x.xx; y.yy
2; 100.00;200.00;10.00;20.00
...
Diritti ed onorari sono calcolati in base all'importo e possono essere
campi non presenti sulla tabella del decreto ingiuntivo, ma calcolati
ogni volta che serve, ovvero nell'handler dell'evento OnCalcFields.
Per impostare la proprietà Calculated devi definire i campi a design
time.
Per il calcolo di diritti ed onorari all'interno dell'OnCalcFields
handler crei la query suggerita da Morde:
select diritti, onorario from tblAccessori where :importo between
fromImporto and toImporto;
il parametro è quello preceduto da ":", e lo valorizzi (con il valore
dell'importo) prima di aprire la query; assegni diritti ed onorario
recuperati dalla query ai corrispondenti campi del dataset contenente
i dati della procedura.
In questo modo hai *sempre* i valori correnti di diritti ed onorario.
Vedi l'help per TField.Calculated, TDataSet.OnCalcFields
Saluti
Paolo Arosio

 range:
Grazie, sei stato, come gli altri, molto gentile. Grazie ancora.
