Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Valori decimali e salvataggio nel database
venerdì 13 marzo 2009 - 15.34
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
motogpdesmo16
Profilo
| Senior Member
201
messaggi | Data Invio:
ven 13 mar 2009 - 15:34
Buongiorno a tutti,
avrei la necessità di effettuare il salvataggio di un valore decimale nella tabella del mio database (Sql Server 2005). Il tipo di dato del campo della tabella numeric(6,3).
Nell'metodo KeyPress della mia textbox ho inserito sia il codice per omologare il separatore dei decimali a "." (indipendentemente, quindi, da quelle che sono le impostazioni internazionali del sistema operativo) sia quello per ammettere solo numeri decimali. Nonostante questi controlli scattino in maniera assolutamente corretta (posso inserire solo una volta il ".", non posso inserire lettere ecc), alla pressione del tasto TAB il separatore dei decimali sparisce.
Tuttavia in una textbox non bindata al campo del db, questo codice funziona perfettamente.
Sapreste aiutarmi cortesemente??
Grazie anticipatamente.
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
ven 13 mar 2009 - 16:00
Ciao Ducati!!!
Il mio consiglio è quello di crearti una controllo personalizzato, un NumericBox
qui trovi uno spunto interessante
http://www.dreamincode.net/forums/showtopic48794.htm
In questo modo puoi andare a bindare il campo della tabella sul tuo controllo.
Se invece vuoi capire dove sbagli (se sbagli) allora forse è il caso che ci fai vedere un pò di codice.
Prova comunque a mettere nell'evento LostFocus della TextBox questo codice:
Me.TextBox1.Text = String.Format("{0:N2}", Me.TextBox1.Text) 'dove il 2 di N2 rappresenta il numero dei decimali che vuoi far vedere
Ciao
alexmed
motogpdesmo16
Profilo
| Senior Member
201
messaggi | Data Invio:
ven 13 mar 2009 - 22:08
Ciao Alexmed,
grazie per l'interessamento al problema innanzitutto.
L'ipotesi del controllo personalizzato, una sorta di NumericText, la valuterò nello step immediatamente successivo. In questa fase sto solo mettendo a punto le varie procedure e, volta per volta, mi realizzo controlli e/o sub/function che assolvono a quelle che sono le mie necessità. Grazie del link comunque
Torniamo al mio problema: non ho problemi nel bindare il controllo al database e, anche inserendo il format al lost focus, comunque non riesco ad ottenere il valore formattato secondo le mie necessità. Ti dirò di più: debuggando, se mi fermassi al lost focus, arriva già il valore 56900 quando in realtà io avevo scritto 56.900
Quindi:
- o il binding viene effettuato in maniera errata (ma ne dubito, perchè ho tutto automatizzato e gli altri controlli funzionano perfettamente)
- o il codice è errato (ma ne dubito, perchè, come scritto nel precedente post, in un campo non associato alla fonte dati funziona perfettamente)
- il "tipo di dati" che imposto in sql server (numeric(6,3)) è errato. Lo stesso problema lo ottengo con real, decimal ecc ecc.
Un controllo analogo l'ho realizzato per un'altra textbox, che può accettare però solo numeri interi. Impostando come tipo di dati "integer" funziona tutto perfettamente. Temo veramente che il problema sia più "lato server"...
motogpdesmo16
Profilo
| Senior Member
201
messaggi | Data Invio:
sab 14 mar 2009 - 01:15
Aggiornamenti...mi son costruito il controllo personalizzato e, stando al debug, nell'oggetto c'è un valore di tipo double:
TxtPeso.xValue 134.44 Double (copiato e incollato dalla finestra delle espressioni di controllo
)
Il punto è che quando vado a comporre la mia querystring per l'inserimento, il valore è sempre di 134,44 che, ovviamente, causa problemi in fase di insert.
Come posso risolvere??
Grazie
alexmed
Profilo
| Guru
1.186
messaggi | Data Invio:
sab 14 mar 2009 - 15:12
Ciao
>Nell'metodo KeyPress della mia textbox ho inserito sia il codice per omologare il separatore dei decimali a "." (indipendentemente, quindi, da quelle >che sono le impostazioni internazionali del sistema operativo) sia quello per ammettere solo numeri decimali
Mi stò chiedendo se il database possa accettare come decimal un valore passato come 1234.45 visto che il tipo decimal prevede il punto come separatore di migliaia e la virgola per i decimali.
A questo io non sò rispondere però (chiedi magari nella stanza SQL) potresti ovviare in due modi:
1. mettendo il campo del database di tipo STRING;
2. facendo una doppia trasformazione, ovvero: il campo del db è decimal (quindi 1.234,56) e sia in fase di inserimento che in fase di lettura trasformi il tuo dato dapprima togliendo l'eventuale separatore delle migliaia e sucessivamente sostituendo la virgola con il punto in modo da visualizzarlo solo come 1234.56.
Veniamo ora alle mie personalissime considerazioni.
Perchè fai questa trasformazione? Hai la necessità di farlo?
D'altra parte in quasi tutti i sistemi il punto e la virgola hanno il loro perchè
Andare a stravolgere questo sistema potrebbe voler dire che un domani il tuo db sia inutilizzabile.
Se il problema è l'uso del tastierino numerico per inserire i dati (che in effetti prevede il punto e non la virgola) potresti semplicemente fare in modo che alla pressione del punto il programma lo trasforma in virgola.
Benchè tu abbia fatto tutte le omologazioni se io copio quel dato (che essendo numerico deve darmi la possibilita di farci delle operazioni) e lo incollo in un altro applicativo (es la calcolatrice di windows) quello mi restituirà dei valori errati.
CIao
alexmed
Torna su
Stanze Forum
Elenco Threads
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 !