Newsgroup: it.comp.lang.visual-basic
Titolo: ?Inserimento record

Come fate per inserire in un recorset dei valori numerici di tipo Double da
un textbox.
Usate questo codice:
Recorset!Prezzo = CDbl(txtPREZZO)
Recorset!Importo = CDbl(txtIMPORTO)
Ma se il textbox è vuoto, da errore, quindi si deve forzare l'utente ad
inserire un valore.
Oppure usate un altro sistema?
Carmelo

 Recorset!Importo = CDbl(txtIMPORTO)
Controlla prima:
if txtPREZZO.text <> "" and isNumeric(txtPrezzo.text) then
    Recorset!Prezzo = CDbl(txtPREZZO)
End if
ecc....
Se però nel tuo database i campi Prezzo e Importo sono obbligatori, devi
forzare l'utente a immettere un valore (magari alla pressione di un tasto OK
fai il check delle textbox e non validi l'aggiornamento se non è tutto a
posto...)
                                Ciao
                                                Zephiross


Argomento molto più complesso di quanto sembri.
Se il valore è un Int o Long, puoi tranquillamente usare il Val. Se il
textbox non è numerico, restituisce zero, e può anche andare bene (dipende
dalla logica applicativa, ovviamente).
Se invece il valore contiene dei decimali, devi decidere cosa vuoi.
Se vuoi che il formato sia rigidamente un formato locale, puoi usare il CDbl
come già fai (magari aggiungendo .Text per correttezza), dopo aver testato
con IsNumeric. Purtroppo isnumeric è un po' sfigato, nel senso che lascia
passare della roba che poi dà errore nel CDbl, per cui un parsing ben fatto
sarebbe meglio.
Se vuoi consentire sia il punto che la virgola, a scelta, come separatore,
puoi effettuare un replace$ della virgola in punto, e poi darlo in pasto al
Val. Sei protetto quasi al 100%, nel senso che in realtà un utente potrebbe
anche impostare un separatore locale diverso dalla virgola e dal punto, il
Replace$ non toccherebbe niente, e il Val ti 'taglierebbe' via la parte
decimale (ma è un caso limite...).
Io personalmente uso una function che, data una stringa (ad esempio il .Text
di un TextBox), effettua un parsing considerando il punto, la virgola o il
carattere locale come separatore, elimina eventuali separatori delle
migliaia in base ad una mia logica applicativa, e restituisce una stringa
contenente il valore separato dal punto. Se la stringa non è convertibile
restituisce una stringa di default indicabile come parametro (in mancanza,
restituisce "0").
La comodità di questa cosa è che posso passare dal textbox direttamente alla
stringa sql senza convertire in numero e poi nuovamente in stringa.
Se mi serve il valore, ho una ulteriore function che sfrutta la precedente,
ed effettua il Val della stringa restituita.
Ciao
Alberto

 wrote in message
news:pkqmc.40644$
Qc.15...@twister1.libero.it

Recorset!Prezzo = iif(txtPREZZO.text = "",0,CDbl(txtPREZZO))
Recorset!Importo = iif(txtIMPORTO.text = "",0,CDbl(txtIMPORTO))
OPPURE
Recorset!Prezzo = iif(ISNUMERIC(txtPREZZO.text),CDbl(txtPREZZO),0)
Recorset!Importo = iif(ISNUMERIC(txtIMPORTO.text),CDbl(txtIMPORTO),0)
Ciao ciao!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:5edabb8e3b90037fc43...@mygate.mailgate.org...

Senza dubbio .. ma sempre un occhio vigile sul iif .. esempio
a=iif(1=0, (1\0),2)
l' iif valuta sempre entrambe le condizioni ma emette un solo risultato
Saluti

 ha scritto nel messaggio
news:2futqjF...@uni-berlin.de...

Mi sembra che nel caso di IIF che io avevo già verificato,  quando entra in
routine e verifica un CDbl(txtPREZZO) con txtPREZZO senza un valore da già
errore.
Carmelo

 valore da già errore.
Appunto. E comunque non è risolutivo.
Fai una form vuota. Mettici un textbox, due label e un commandbutton
inserisci questo nel codice:
-----------------------------
Private Sub Command1_Click()
    On Error GoTo errore
    If IsNumeric(Text1.Text) Then
        Label1.Caption = CStr(CDbl(Text1.Text))
    Else
        Label1.Caption = "Non Numerico"
    End If
    Label2.Caption = "OK"
    Exit Sub
errore:
    Label1.Caption = Err.Description
End Sub
-----------------------------
Adesso nel textbox digita "1.5" e premi il button
digita "1,5" e premi il button
digita "1e4" e premi il button
E' questo che vuoi?
Alberto

 Oppure usate un altro sistema?
"Oppure che... oppure che..." come diceva QUELO :)
Prova a fare:
Recordset!Prezzo = CDbl("0" & txtPrezzo.Text)
Recordset!Importo = CDbl("0" & txtImporto.Text)
Fammi sapere CIAUZZZ :)
-- 
Rivolterò il mondo per trovarlo, e anche se andasse in Indocina uno dei 
nostri starà nascosto in una ciotola di riso pronto a sparargli nel culo.
(Pulp Fiction)

 Recordset!Importo = CDbl("0" & txtImporto.Text)
Va beh, ma risolve una minima parte del problema.
Prova a eseguire l'esempio che ho postato ieri. Anche inserendo "0" &
davanti al textbox.text, ci sono alcune cose che sono discutibili.
Ciao
Alberto

 davanti al textbox.text, ci sono alcune cose che sono discutibili.
Si è vero, io rispondevo al problema del primo post, e cioè che il CDbl 
andava a farsi benedire se l'utonto non digitava nulla, non si chiedeva 
soluzione ad eventuali caratteri non numerici inseriti nella textbox.
Se per quello, io ho risolto in tutt'altro modo: ho creato un mio 
controllo simile alla textbox in cui si possono digitare solo cifre e 
",", di cui una sola virgola e solo due cifre dopo la virgola (che 
presto modificherò, in modo da poter scegliere quante cifre dopo la 
virgola, con un massimo di 10).
Utilizzo quello nei miei progetti :)


 soluzione ad eventuali caratteri non numerici inseriti nella textbox.
in casi simili io preferisco prevenire, anzichè curare:
nell'evento KeyPress del Text inserisco
KeyAscii = gnCtrlNum(KeyAscii)
dove
<codice>
Public Function gnCtrlNum(KeyAscii) as integer
Dim sVal As String
Dim nCar As Integer
Dim stringa As String
stringa = "1234567890,-+" & Chr$(8) ' è per la BackSpace
sVal = Chr$(KeyAscii)
nCar = InStr(1, stringa, sVal)
If nCar = 0 Then KeyAscii = 0
gnCtrlNum=KeyAscii
Exit Function
</codice>
In questo modo i miei clienti NON POSSONO scrivere cavolate se gli chiedo un
numero.
A questo punto, O c'è un numero O non c'è nulla.
Certo, il mio codice completo è un po' più pesante (controlla che ci sia una
sola virgola e un solo segno al massimo, nei punti regolari....)
Io ho una mia filosofia: se una cosa il cliente non la deve fare, io lo devo
mettere in condizione di non riuscire a farla neanche se vuole.
E, finora, mi è sembrata una buona filosofia.
Mordo

 A questo punto, O c'è un numero O non c'è nulla.
Non ti seguo.
Con la tua function, tu consenti di digitare una virgola.
Per cui sei iper-esposto al problema della localizzazione.
Potrei capire se tu chiedessi un punto, che è il separatore internazionale
(oltre che locale in molti casi), ma la virgola proprio non la capisco.
Ciao
Alberto

 (oltre che locale in molti casi), ma la virgola proprio non la capisco.
Ah, ora capisco! Beh, non so quale sia la tua esperienza ma, se ai miei
clienti dessi un programma con il separatore decimale ".", quelli mi
telefonerebbero chiedendomi "Perchč il programma non prende i numeri con la
virgola?"
Coi miei programmi la gente ci lavora, non ci gioca: nessuno di loro ha
voglia di mettersi a fare "l'internazionale", te lo posso assicurare ;-)
Perchč, tu hai programmi tuoi installati anche all'estero? Complimenti!
Io comunque ho bypassato il problema del programma multi-etnico: hai notato
che la funzione inizia per g? Nei miei programmi significa che č una
funzione generalizzata e quelle funzioni si trovano TUTTE sullo stesso
modulo. Qualora dovessi fare programmi per l'estero, tutte le funzioni, i
messaggi di errore e le segnalazioni andrebbero comunque tradotti, quindi
farei un modulo AD HOC!
Mordo

 tradotti, quindi farei un modulo AD HOC!
Leggo solo ora la risposta, essendo stato all'estero.
In realtà il problema della tua function è che tu consenti di digitare la
virgola, che viene correttamente interpretata solamente se il sistema
operativo è in Italiano o se il separatore personalizzato è appunto la
virgola.
In Italia ci sono moltissime persone che hanno sistemi operativi in inglese.
Ma, a parte questo che tu potresti anche trascurare, è un problema
concettuale. Siccome esistono metodiche di programmazione che consentono di
interpretare correttamente le cose, qualunque siano le impostazioni, non
trovo corretto utilizzare metodiche che, invece, funzionano in un modo o in
un altro a seconda del sistema operativo.
Il tuo codice potrebbe essere tollerato in un giochino, ma in un sistema con
cui la gente lavora, generalmente, meglio fare le cose fatte bene.
Ciao
Alberto

 Alberto
Mordo

 Ma qui stiamo parlando di immissione dati da parte dell'utente!
No.
Si stava parlando del CDbl.
*Tu* hai detto che č meglio prevenire, forzando l'uso della virgola.
Ma se fai un CDbl di una stringa con la virgola, il risultato dipende dalle
impostazioni locali del sistema.
Sostanzialmente, hai proposto una soluzione ad un problema diverso da quello
del thread, per cui la tua proposta non era una vera soluzione.
Semplicemente, ti stavo facendo notare questo.
Se rileggi il thread capirai l'equivoco.
Ciao
Alberto

 Utilizzo quello nei miei progetti :)
Io solo detto che, anzichč un controllo ad hoc, bastava una funzioncina nel
KeyPress
Evidentemente abbiamo capito la domanda in due modi diversi e questo ha
fatto si che tu travisassi le mie risposte.
Mordo