03/07/2023 - @Alex ha scritto:
03/07/2023 - By65Franco ha scritto:
Però a parte questo che non è l'oggetto del Thread, il quesito è se per un confronto numerico dove l'operatore e la quantità di confronto sono posti in una stringa, la function Eval è consona allo scopo oppure esistono approcci e/o tecniche diverse e/o migliori?
Scusa Franco, non entro nel merito del mondo reale, saprai tu quali casistiche devi prendere in considerazione e come…!
Cerco tuttavia di capire perchè usi EVAL… dagli esempi che hai portato non ne trovo il motivo…!
Che 6>1 VERO mi pare banale…
Che 4=1 FALSO altrettanto
Quindi puoi farmi chiarezza sul motivo che ti spinge ad usare un VALUTATORE di espressioni…?
Se riesci a portare esempi più concreti con la parte di codice valorizzata da un Debug.Print… io non comprendo i contenuti dell'espressione passata ad EVAL ad esempio…
Ciao @Alex,
si certo, vediamo se mi spiego meglio e con meno parole…. ;-)
- Per ogni prodotto si ha un Unità di Misura e la Quantità di Imballo
- Il test da effettuare deve validare se i valori Unità di Misura e Quantità Imballo sono coerenti tra di loro
- Le regole per validare la coerenza sono memorizzate in un campo Stringa nella tabella Unità di Misura e si chiama UmReg (regola per l'unità di misura)
Questa è la Tabella dove a destra c'è la colonna Regole di validità
Esempio | | Immisione Corretta |
Quantità Ordine | Um | Imballo | Esito | | Quantità Ordine | Um | Imballo |
1 | Nr | 1 | Corretto | | 1 | Nr | 1 |
6 | Nr | 6 | Errato | | 6 | Ct | 6 |
3 | Ct | 12 | Corretto | | 3 | Ct | 12 |
3 | Ct | 1 | Errato | | 3 | Nr | 1 |
1 | Ct | 1 | Errato | | 1 | Nr | 1 |
Etc etc… | | | | | Etc etc… | | |
Ho pensato di utilizzare Eval per non creare delle Costanti o Variabili a Codice Vba e una funzione apposita per effettuare il test di validità nell'uso corretto tra Um e Qtà Imballo
Con Eval controllo quanto segue:
IF Eval( Imballo & RegolaValidità) che restituisce Vero o Falso
Sulla base dell' UM prendo da tabella la regola di validità corrispondente e la confronto con l'imballo immesso nel documento
Le informazioni che provengono dalla Tabella Unità di Misura sono sempre disponibili nel recordset della Form in quanto è presente la Join nella Select del recordset. Quindi quando vado a testare se Um immessa è corretta, per essa ho già nella Form anche il campo UmReg (Regole di Validità) (Ovviamente l'imballo viene automaticamente proposto nella riga di Immissione ed è possibile modificarlo a proprio piacimento)
Esempio:
Nella prima riga di esempio sopra riportata abbiamo Um = Nr e Imballo = 1 La regola di Validità per l'unità di misura Nr è “=1”
L'espressione in Eval sarà:
IF Eval( Imballo & RegolaValidità ) che diventa : IF Eval( 1=1 ) ….. quindi restituisce True (immissione Corretta)
Nella seconda riga di esempio sopra riportata abbiamo Um = Nr e Imballo = 6 La regola di Validità per l'unità di misura Nr è “=1”
L'espressione in Eval sarà:
IF Eval( Imballo & RegolaValidità ) che diventa : IF Eval( 6=1 ) ….. quindi restituisce False (immissione Errata non coerente)
Nella terza riga di esempio sopra riportata abbiamo Um = Ct e Imballo = 12 La regola di Validità per l'unità di misura Nr è “>1”
L'espressione in Eval sarà:
IF Eval( Imballo & RegolaValidità ) che diventa : IF Eval( 6>1 ) ….. quindi restituisce True (immissione Corretta)
Nella quarta riga di esempio sopra riportata abbiamo Um = Ct e Imballo = 1La regola di Validità per l'unità di misura Nr è “>1”
L'espressione in Eval sarà:
IF Eval( Imballo & RegolaValidità ) che diventa : IF Eval( 1>1 ) ….. quindi restituisce False (immissione Errata non Coerente)
Con questo metodo, là dove occorre, scrivo solo una riga di codice per validare l'uso corretto tra Um e Qtà Imballo
In più modificando la regola di validità nella tabella Unità di Misura, non devo più toccare o modificare il codice Vba, anche quando si aggiungono nuove Unità di misura in Tabella o se si vogliono modificare le regole di Validità già esistenti.
Pertanto tutto il codice che serve è solo una If e la valutazione con Eval.
Secondo te è valido come approccio, che ne pensi ?
P.S. per rispondere anche agli altri intervenuti…. Così facendo si ha la possibilità di configurare nella Tabella Unità di Misura qualsiasi tipo di regola che meglio soddisfa le varie e variopinte necessità… Nulla di scritto fisso a programma, massima flessibilità se si vuole o meno controllare la coerenza nell'uso di una Unità di Misura per la sua Quantità di Imballo.
Pertanto ognuno le regole se la farà e le userà a sua immagine e somiglianza, in quanto sarà sufficiente modificare l'espressione di convalida nella Tabella Um.