Newsgroup: it.comp.lang.visual-basic
Titolo: Campo Valuta in Recorset disconnesso

Salve a tutti
Ho creato un recordset disconesso:
Dim rs as ADODB.Recordset
Set rs = New ADODB.Recordset
...
rs.Fields.Append "Prezzo",
e a questo punto non so come dichiarare questo tipo di campo. Io gli devo 
scrivere sopra un dato tipo valuta (es: 10,00 o 11,45) ho provato sia con:
rs.Fields.Append "Prezzo", adDouble
che con
rs.Fields.Append "Prezzo", adDecimal
ma quando ad esempio scrivo10,00 mi trovo sempre 1000
Come posso fare?

 ha scritto nel messaggio 
news:BwUih.3176$AA....@tornado.fastwebnet.it...

Ciao,
hai provato con adCurrency?

 hai provato con adCurrency?
Sempre uguale... La causa potrebbe essere il fatto che uso come separatore 
decimale la virgola e non il punto?
Se è cosi come posso risolvere il problema visto che poi questi dati 
andranno salvati in una tabella Access con campo valuta e li devo usare la 
virgola come separatore. 

 ha scritto nel messaggio 
news:WC6jh.3761$AA....@tornado.fastwebnet.it...

Ciao,
l'unica cosa che mi viene in mente (dando x scontato che tu abbia 
provato...) è un controllo di immissione sui dati (solo numerici ovviamente) 
ed una loro formattazione tramite la funzione format (ti potrebbe essere 
d'aiuto il seguente link 
http://www.maurorossi.net/pagine/tips/tips020.htm
 ) 
dopodichè ti auguro buone feste :-) 

>> ma quando ad esempio scrivo10,00 mi trovo sempre 1000m


Io prendo il dato da una textbox e lo metto in questo recordset disconesso 
che poi visualizzo in un DataGrid.
Ho provato anche a formattarlo:
rs!Prezzo=Format(BoxPrezzo.text, "#,##0.00")
ma niente. 

 rs!Prezzo=Format(BoxPrezzo.text, "#,##0.00")
Minchia che porcheria (scusa il francesismo natalizio).
Giusto per farti capire cosa avviene nella riga qui sopra, ti scrivo il 
codice esplicitato (brutta cosa l'abitudine alle conversioni 
implicite...):
Rs.Fields.Item("Prezzo").Value = CCur(Format(CDbl(BoxPrezzo.Text), 
"#,##0.00"))
Questo è il codice che esegue realmente. Normalmente, sarebbe bene 
scrivere il codice in modo che rispecchi ciò che avviene, anzichè 
risparmiare i pochi byte di sorgente a discapito della leggibilità.
Il problema che hai dipende, presumo, da una delle conversioni qui 
sopra. Tutte queste, dal CCur al CDbl al Format, avvengono sulla base 
delle impostazioni internazionali del tuo utente, quindi le 
combinazioni possibili sono diverse e non riesco a individuare il punto 
in cui 10,00 diventa 1000.
Comunque sia, ti consiglierei di utilizzare una delle due soluzioni:
Rs.Fields.Item("Prezzo").Value = CCur(BoxPrezzo.Text)
Rs.Fields.Item("Prezzo").Value = Val(BoxPrezzo.Text)
Il comportamento delle due righe qui sopra è diverso. La prima 
considera i separatori secondo le impostazioni locali, la seconda usa 
sempre e comunque il punto come separatore.
Nessuna delle due soluzioni, così stringate, è per me una buona 
soluzione. Ma potrebbe essere un primo passo rispetto a quanto fai 
adesso.
Per l'inserimento in Access, dovrai utilizzare o una stringa SQL (e 
quindi dovrai formattare il valore col punto come separatore, anche se 
nel client di Access te li visualizza con la virgola), o assegnare il 
valore ad un field di un recordset (e in questo caso non devi 
formattare niente, passi tutto per valore).
Ciao
Alberto
-- 
Friedrich Nietzsche: Un po' di salute ogni tanto è il miglior rimedio 
per l'ammalato.

 ha scritto nel messaggio 
news:mn.bb957d6c7...@hotmail.com...

Hai ragione ma io sono agli inizzi e non conosco bene tutti i tipi di 
formati cmq
Rs.Fields.Item("Prezzo").Value = CCur(BoxPrezzo.Text)
funziona, l'unico difetto che a me servirebbero 2 cifre decimali sempre 
anche quando sono 0 questo piu che altro per una visualizzazione piu 
corretta essendo una cifra in euro e questa funzione non lo fa. è per questo 
che in tutti gli altri casi io usavo il format. 

 ha scritto nel messaggio 
news:gobjh.4130$AA....@tornado.fastwebnet.it...

Ciao,
pensi che così possa andare -> Format(CCur(BoxPrezzo), "Currency") ?
Occhio a controllare l'immissione di testo etc...
buona serata :-) 

 essendo una cifra in euro e questa funzione non lo fa.
Sei completamente fuori strada.
Col .Value di un field di un recordset tu gestisci un valore, non una 
rappresentazione.
Sarà solo in fase di visualizzazione (in una textbox, in una label, in 
un datagrid, in un report...) che deciderai quante cifre decimali 
visualizzare.
Se tu scrivi 123, il valore è 123. Non ha senso dire che "il valore 
deve essere 123,00". Potrai dire che la visualizzazione deve essere 
"123,00" anzichè "123", ma non il valore. E sia nel recordset sia nel 
database, tu memorizzi il valore. Proprio per questo, la funzione che 
ti ho postato estrae un valore.
La formattazione è in fase di output, non di input...
Alberto
-- 
Il tuo stesso identico umore,
ma la divisa di un altro colore

 ha scritto nel messaggio 
news:mn.bcfc7d6c8...@hotmail.com...

Ciao,
giacchè ci teneva tanto non ho saputo dire di no... e poi siamo quasi a 
Natale ;-)
Buone feste :-) 

 adesso.
Scusate l'intromissione.
Volendo usare Recordset in quel modo (senza istruzioni SQL e command),
quele sarebbe l'alternativa migliore a :
Rs.Fields.Item("Prezzo").Value = Val(BoxPrezzo.Text)
Intendi una funzione intermedia che ti controlla il contenuto della
textbox, magari in fase di input?
Tnx
-- 
DBMS Firebird
VB6 + Ado