Gestire DecimalSeparator

di danielito il
17 risposte

Salve a tutti.
Ho una applicazione dove utilizzo il decimalseparator = ‘.’

Utilizzando il campo dbEdit non ho problemi, ma quando voglio modificare il campo importo dalla griglia dbgrid, mi da errore
"is not a valid bcd value", vorrei fare in modo che anche nella griglia posso utilizzare il puntino.

17 Risposte

  • Dove hai specificato il campo currency?

  • Nella dbgrid

  • Anzi scusa non una lib dove imposto il campo cosi.
      FormatMask_View_EUR = '€ #,##0.00;€ -#,##0.00;€ #,##0.00';

    nella griglia cosi vedo il campo importo con il simbolo €.
    quando provo a modificarlo da errore.
    cmq anche se non inserisco questa formattazione da errore comunque

  • Ma deve essere valuta o numero decimale generico?

    Nell'elenco dei campi dovrebbe esserci la voce relativa al separatore decimale.

    Adesso sono fuori e non ricordo dove si trova la proprietà.

    Puoi anche intercettare dbgrid.column[numero] per trattarlo come con il dbedit.

  • 25/03/2024 - danielito ha scritto:


    Anzi scusa non una lib dove imposto il campo cosi.
      FormatMask_View_EUR = '€ #,##0.00;€ -#,##0.00;€ #,##0.00';

    nella griglia cosi vedo il campo importo con il simbolo €.
    quando provo a modificarlo da errore.
    cmq anche se non inserisco questa formattazione da errore comunque

    Se valuta basta specificare (spuntare) la proprietà currency.

  • Posso anche non far vedere la valuta..
    basta che non mi da errore. 

    currency non ho trovato proprietà.
    questà è la griglia.
    il mio cliente vuole utilizzare il “.” quindi ho impostato il decimal separator. ma qui da errore.

  • 25/03/2024 - danielito ha scritto:


    Posso anche non far vedere la valuta..
    basta che non mi da errore. 

    currency non ho trovato proprietà.
    questà è la griglia.
    il mio cliente vuole utilizzare il “.” quindi ho impostato il decimal separator. ma qui da errore.

    Vai sul dataset (quello dove specifichi la tabella da mostrare), fai doppio click, nella finestrella col tasto dx fai aggiungi tutti.

    Selezioni il campo valuta e nella finestra delle proprietà spunti currency.

    In questo modo non devi inserire ne simbolo valuta ne distinguere punto o virgola quando inserisci un importo.

    Togli la maschera che hai creato per non creare conflitti.

    Vado di memoria dallo smartphone…

  • Non vedo l'errore…

  • Non so se ho fatto bene,
    stesso errore.

    nella griglia inoltre non posso utilizzare il puntino.

  • Mumble… mumble…

    ho un vecchio progetto dove utilizzavo la stessa logica di inserimento diretto in tabella… ero alla prima barba…

    devo cercarlo, ma a spanne, devi agire su keypress 

    if key='.' then key:=',';

    il problema (che non ricordo come) è che devi intercettare la colonna.

    dbgrid.column[x] qualcosa del genere. l'approccio l'ho abbandonato per evitare digitazioni accidentali dell'utente,  optando per un menu popup con ‘modifica’ ‘Inserisci’ ed ‘elimina’ ed utilizzando un form dedicato all'inserimento e alla modifica con i relativi pulsanti ‘conferma’ e ‘annulla’.

    Quello che vuoi fare è fattibile, anche se sconsigliato, solo il tempo di spolverare quel progetto e ti mando la traccia.

    considera che il metodo OnKeyPress vale per tutta la tabella, con un case dbgrid.column of  e devi intercettare se sei nella/e colonna/e giusta così puoi sostituire i caratteri digitati (virtual key) autorizzando solo i numeri e solo una volta il separatore decimale.

    Non ricordo come intercettavo la colonna (l'utente poteva scrivere la quantità e spostarsi al prezzo di un altro record  o al campo sconto, mentre i calcoli si aggiornavano in automatico).

    il primo problema è sapere in quale record clikka l'utente e per questo puoi intervenire sul dataset all'evento OnDataChange per trovare il record se diverso da quello in  cui si stava modificando il record.

    il secondo problema è quello di capire in quale campo sta andando in modifica (prezzo, quantità, altro…) che può essere sempre dello stesso record.

    25/03/2024 - danielito ha scritto:


    Utilizzando il campo dbEdit non ho problemi,

    perchè la tabella devi vederla come un insieme di caselle DBEdit. bisogna intercettare la colonna ed agire su quella.

  • Ma il fatto che non posso digitare il “.” è normale ?

    riesco a individuare la colonna, ma ho sempre errore bcd value.

  • 26/03/2024 - danielito ha scritto:


    Ma il fatto che non posso digitare il “.” è normale ?

    riesco a individuare la colonna, ma ho sempre errore bcd value.

    Una domanda per chiarire: da un controllo DBEdit associato al campo riesci a usare la virgola, ma all'interno della DBGrid no?

  • SE Inserisco un dbedit e associo il campo, riesco a mettere la “,”

  • Allorin questo momento ho tolto il decimal separator dal progetto e nella griglia funziona tutto.
    sia nei campi dbedit che nella colonna della griglia ho usato il “if key='.' then key:=',';”

    sembra ok

Devi accedere o registrarti per scrivere nel forum
17 risposte