Discussione:
FE - Sostituire separatore decimale, da virgola a punto
(troppo vecchio per rispondere)
Carlo POTS
2019-02-08 12:44:42 UTC
Permalink
Dovrei sostituire il separatore decimale in una query di accodamento, ma
non ci riesco.

Parto dal presupposto che la query fa il select da una tabella i cui
campi numerici sono di tipo Precisione_Doppia, in formato Standard
(quindi con il punto separatore delle migliaia e la virgola per i
decimali) e 2 decimali.

I campi di richiamo della query sono Quantit, Imp_UNIT, IMPONIBILE,
Un_Misura e ALIVA

I campi di destinazione, per evitare problemi di formattazione, li ho
settati tutti come campi di testo.


Io ho provato a selezionare e modificare i campi come di seguito:

INSERT INTO DettaglioLinee ( NumeroLinea, Descrizione, Quantita,
PrezzoUnitario, PrezzoTotale, AliquotaIVA, UnitaMisura )
SELECT CInt([NUMDETT]) AS NumLinea, VenditaMateriali.DESC_MAT,
Replace([QUANTIT],".",",") AS Quantita,
Format(CDbl(Replace([IMP_UNIT],",",".")),"#,#00") AS PrezzoUnitario,
Format(CDbl(Replace([IMPONIBILE],".",",")),"#,#00") AS IMPON,
Format(CDbl(Replace([ALIVA],".",",")),"#,#00") AS ALIQ,
VenditaMateriali.UN_MISURA
FROM VenditaMateriali
WHERE (((VenditaMateriali.IDREGCON)=[Maschere]![TGFE]![txtREGCON]));

pero' al massimo, gli importi inferiori a 1 (ad es. 0,56) me li porta in
numero intero (quindi da 0,56 me lo trasforma in 56).

E' da stamattina che cerco una soluzione, ma non ne vengo a capo.
Non c'è qualcuno che mi può far capire dove sbaglio?
Accidenti all'SDI e ai decimali con il punto invece della virgola!!!!!

---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
mantro
2019-02-08 13:42:54 UTC
Permalink
Post by Carlo POTS
Dovrei sostituire il separatore decimale in una query di accodamento, ma
non ci riesco.
Parto dal presupposto che la query fa il select da una tabella i cui
campi numerici sono di tipo Precisione_Doppia, in formato Standard
(quindi con il punto separatore delle migliaia e la virgola per i
decimali) e 2 decimali.
I campi di richiamo della query sono Quantit, Imp_UNIT, IMPONIBILE,
Un_Misura e ALIVA
I campi di destinazione, per evitare problemi di formattazione, li ho
settati tutti come campi di testo.
INSERT INTO DettaglioLinee ( NumeroLinea, Descrizione, Quantita,
PrezzoUnitario, PrezzoTotale, AliquotaIVA, UnitaMisura )
SELECT CInt([NUMDETT]) AS NumLinea, VenditaMateriali.DESC_MAT,
Replace([QUANTIT],".",",") AS Quantita,
Format(CDbl(Replace([IMP_UNIT],",",".")),"#,#00") AS PrezzoUnitario,
Format(CDbl(Replace([IMPONIBILE],".",",")),"#,#00") AS IMPON,
Format(CDbl(Replace([ALIVA],".",",")),"#,#00") AS ALIQ,
VenditaMateriali.UN_MISURA
FROM VenditaMateriali
WHERE (((VenditaMateriali.IDREGCON)=[Maschere]![TGFE]![txtREGCON]));
pero' al massimo, gli importi inferiori a 1 (ad es. 0,56) me li porta in
numero intero (quindi da 0,56 me lo trasforma in 56).
E' da stamattina che cerco una soluzione, ma non ne vengo a capo.
Non c'è qualcuno che mi può far capire dove sbaglio?
Accidenti all'SDI e ai decimali con il punto invece della virgola!!!!!
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
http://www.donkarl.com/it?FAQ6.21
Carlo POTS
2019-02-08 17:42:12 UTC
Permalink
Post by mantro
Post by Carlo POTS
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
http://www.donkarl.com/it?FAQ6.21
Forse sono io che non ho afferrato.

Ho scritto, in un campo della query, per un importo di 0,56, la stringa
Str([PrezzoUnitario])

Il prezzo lo accoda come .56; ovvero omette di inserirmi la parte intera.

Oltretutto, il campo, se contiene un valore intero, ad esempio 12,00,
deve inserirmi 12.00, mentre invece mi inserisce solo 12.

Dove sbaglio?
--
Lamps a tutti from Naples's kingdom Carlo POTS on VFR VTEC '02
& Bmw F650GS '00 "insomma, e' un VFR, mica una zoccola che cede appena ci
provi..." (cit. PMF)

---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
@Alex
2019-02-08 17:53:07 UTC
Permalink
Post by Carlo POTS
Post by mantro
Post by Carlo POTS
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
http://www.donkarl.com/it?FAQ6.21
Forse sono io che non ho afferrato.
Ho scritto, in un campo della query, per un importo di 0,56, la stringa
Str([PrezzoUnitario])
Il prezzo lo accoda come .56; ovvero omette di inserirmi la parte intera.
Oltretutto, il campo, se contiene un valore intero, ad esempio 12,00,
deve inserirmi 12.00, mentre invece mi inserisce solo 12.
Dove sbaglio?
--
Lamps a tutti from Naples's kingdom Carlo POTS on VFR VTEC '02
& Bmw F650GS '00 "insomma, e' un VFR, mica una zoccola che cede appena ci
provi..." (cit. PMF)
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
Funziona solo per i NUMERI POSITIVI e > 1 perchè convertendo in Stringa sopprime lo ZERO, ma introduce anche uno spazio per il Segno... se verifichi infatti non è ".56" ma " .56"

Quindi il Replace credo sia meglio...

@Alex
Carlo POTS
2019-02-08 17:56:33 UTC
Permalink
Post by @Alex
Funziona solo per i NUMERI POSITIVI e > 1 perchè convertendo in Stringa sopprime lo ZERO, ma introduce anche uno spazio per il Segno... se verifichi infatti non è ".56" ma " .56"
Quindi il Replace credo sia meglio...
@Alex
Giustissimo, infatti ho risolto.

- Replace(Format([Campo];"00,00");",";".")

Ho preferito inserire solo due zeri prima della virgola, cosi' se non ho
un numero espresso in centinaia, non mi mette zeri superflui

Grazie
--
Lamps a tutti from Naples's kingdom Carlo POTS on VFR VTEC '02
& Bmw F650GS '00 "insomma, e' un VFR, mica una zoccola che cede appena ci
provi..." (cit. PMF)

---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
Carlo POTS
2019-02-08 21:49:03 UTC
Permalink
Post by Carlo POTS
Post by @Alex
Funziona solo per i NUMERI POSITIVI e > 1 perchè convertendo in
Stringa  sopprime lo ZERO, ma introduce anche uno spazio per il
Segno... se verifichi infatti non è ".56" ma " .56"
Quindi il Replace credo sia meglio...
@Alex
Giustissimo, infatti ho risolto.
- Replace(Format([Campo];"00,00");",";".")
Ho preferito inserire solo due zeri prima della virgola, cosi' se non ho
un numero espresso in centinaia, non mi mette zeri superflui
Grazie
... risolto a meta'...!

La query, volendola eseguire in SQL, funziona con questo codice qui:

---------------------------------------------------------------------------------
INSERT INTO DettaglioLinee ( NumeroLinea, Descrizione, Quantita,
PrezzoUnitario, PrezzoTotale, AliquotaIVA, UnitaMisura )
SELECT CInt([NUMDETT]) AS NumeroLinea, VenditaMateriali.DESC_MAT,
Replace(Format([QUANTIT],"Fixed"),",",".") AS Quantita,
Replace(Format([IMP_UNIT],"Fixed"),",",".") AS PrezzoUnitario,
Replace(Format([IMPONIBILE],"Fixed"),",",".") AS PrezzoTotale,
Replace(Format([ALIVA],"Fixed"),",",".") AS AliquotaIVA,
VenditaMateriali.UN_MISURA
FROM VenditaMateriali
WHERE (((VenditaMateriali.IDREGCON)=[Maschere]![TGFE]![txtREGCON]));
----------------------------------------------------------------------------------

Il problema e' quando devo convertirla in VBA; ho digitato il codice in
questo modo; la correzione non mi da errori, ma in esecuzioni mi da'
errore di operatore mancante vicino al Replace.
Sto smadonando da 2 ore ma non ne vengo a capo.
Questo e' il codice che ho digitato:

-----------------------------------------------------------------------------------
Dim Q_add as string

Q_add = "INSERT INTO DettaglioLinee ( NumeroLinea, Descrizione,
Quantita, PrezzoUnitario, PrezzoTotale, AliquotaIVA, UnitaMisura )"

Q_add = Q_add & " SELECT CInt(NUMDETT) AS NumeroLinea,
VenditaMateriali.DESC_MAT, "
Q_add = Q_add & "'Replace(format(QUANTIT,'00,00'), ',', '.')' AS
Quantita, "
Q_add = Q_add & "'Replace(format(IMP_UNIT,'00,00'), ',', '.')' AS
PrezzoUnitario, "
Q_add = Q_add & "'Replace(format(IMPONIBILE, '00,00'), ',', '.')'
AS PrezzoTotale, "
Q_add = Q_add & "'Replace(format(ALIVA,'00,00'), ',', '.')' AS
AliquotaIVA, VenditaMateriali.UN_MISURA"
Q_add = Q_add & " FROM VenditaMateriali"
Q_add = Q_add & " WHERE (VenditaMateriali.IDREGCON)='" &
Me.txtREGCON & "'"
MsgBox (Q_add)
CurrentDb.Execute Q_add, dbfailonerror
------------------------------------------------------------------------------------

Dove sbaglio?
--
Lamps a tutti from Naples's kingdom Carlo POTS on VFR VTEC '02
& Bmw F650GS '00 "insomma, e' un VFR, mica una zoccola che cede appena ci
provi..." (cit. PMF)

---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
Carlo POTS
2019-02-08 21:50:48 UTC
Permalink
Post by Carlo POTS
Post by Carlo POTS
Post by @Alex
Funziona solo per i NUMERI POSITIVI e > 1 perchè convertendo in
Stringa  sopprime lo ZERO, ma introduce anche uno spazio per il
Segno... se verifichi infatti non è ".56" ma " .56"
Quindi il Replace credo sia meglio...
@Alex
Giustissimo, infatti ho risolto.
- Replace(Format([Campo];"00,00");",";".")
Ho preferito inserire solo due zeri prima della virgola, cosi' se non
ho un numero espresso in centinaia, non mi mette zeri superflui
Grazie
... risolto a meta'...!
---------------------------------------------------------------------------------
INSERT INTO DettaglioLinee ( NumeroLinea, Descrizione, Quantita,
PrezzoUnitario, PrezzoTotale, AliquotaIVA, UnitaMisura )
SELECT CInt([NUMDETT]) AS NumeroLinea, VenditaMateriali.DESC_MAT,
Replace(Format([QUANTIT],"Fixed"),",",".") AS Quantita,
Replace(Format([IMP_UNIT],"Fixed"),",",".") AS PrezzoUnitario,
Replace(Format([IMPONIBILE],"Fixed"),",",".") AS PrezzoTotale,
Replace(Format([ALIVA],"Fixed"),",",".") AS AliquotaIVA,
VenditaMateriali.UN_MISURA
FROM VenditaMateriali
WHERE (((VenditaMateriali.IDREGCON)=[Maschere]![TGFE]![txtREGCON]));
----------------------------------------------------------------------------------
    Il problema e' quando devo convertirla in VBA; ho digitato il
codice in questo modo; la correzione non mi da errori, ma in esecuzioni
mi da' errore di operatore mancante vicino al Replace.
    Sto smadonando da 2 ore ma non ne vengo a capo.
-----------------------------------------------------------------------------------
    Dim Q_add as string
    Q_add = "INSERT INTO DettaglioLinee ( NumeroLinea, Descrizione,
Quantita, PrezzoUnitario, PrezzoTotale, AliquotaIVA, UnitaMisura )"
    Q_add = Q_add & " SELECT CInt(NUMDETT) AS NumeroLinea,
VenditaMateriali.DESC_MAT, "
    Q_add = Q_add & "'Replace(format(QUANTIT,'00,00'), ',', '.')' AS
Quantita, "
    Q_add = Q_add & "'Replace(format(IMP_UNIT,'00,00'), ',', '.')' AS
PrezzoUnitario, "
    Q_add = Q_add & "'Replace(format(IMPONIBILE, '00,00'), ',', '.')'
AS PrezzoTotale, "
    Q_add = Q_add & "'Replace(format(ALIVA,'00,00'), ',', '.')' AS
AliquotaIVA, VenditaMateriali.UN_MISURA"
    Q_add = Q_add & " FROM VenditaMateriali"
    Q_add = Q_add & " WHERE (VenditaMateriali.IDREGCON)='" &
Me.txtREGCON & "'"
    MsgBox (Q_add)
    CurrentDb.Execute Q_add, dbfailonerror
------------------------------------------------------------------------------------
Dove sbaglio?
P.s.: quella riga "MsgBox(Q_Add)" la uso come "spia" alla fine della
query per controllare che tutti dati siano instradati bene, per cui non
ne tenete conto... :-)
--
Lamps a tutti from Naples's kingdom Carlo POTS on VFR VTEC '02
& Bmw F650GS '00 "insomma, e' un VFR, mica una zoccola che cede appena ci
provi..." (cit. PMF)

---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
Carlo POTS
2019-02-08 22:05:46 UTC
Permalink
Post by Carlo POTS
-----------------------------------------------------------------------------------
     Dim Q_add as string
     Q_add = "INSERT INTO DettaglioLinee ( NumeroLinea, Descrizione,
Quantita, PrezzoUnitario, PrezzoTotale, AliquotaIVA, UnitaMisura )"
     Q_add = Q_add & " SELECT CInt(NUMDETT) AS NumeroLinea,
VenditaMateriali.DESC_MAT, "
     Q_add = Q_add & "'Replace(format(QUANTIT,'00,00'), ',', '.')' AS
Quantita, "
     Q_add = Q_add & "'Replace(format(IMP_UNIT,'00,00'), ',', '.')' AS
PrezzoUnitario, "
     Q_add = Q_add & "'Replace(format(IMPONIBILE, '00,00'), ',', '.')'
AS PrezzoTotale, "
     Q_add = Q_add & "'Replace(format(ALIVA,'00,00'), ',', '.')' AS
AliquotaIVA, VenditaMateriali.UN_MISURA"
     Q_add = Q_add & " FROM VenditaMateriali"
     Q_add = Q_add & " WHERE (VenditaMateriali.IDREGCON)='" &
Me.txtREGCON & "'"
     MsgBox (Q_add)
     CurrentDb.Execute Q_add, dbfailonerror
Come non detto.... Chi l'ha duro la vince:

Il codice giusto e':
--------------------------------------------------------------------
Dim Q_Add as string

Q_add = "INSERT INTO DettaglioLinee ( NumeroLinea, Descrizione,
Quantita, PrezzoUnitario, PrezzoTotale, AliquotaIVA, UnitaMisura )"

Q_add = Q_add & " SELECT CInt(NUMDETT) AS NumeroLinea,
VenditaMateriali.DESC_MAT, "

Q_add = Q_add & "Replace(format(QUANTIT,'0.00'), ',', '.') AS Quantita, "

Q_add = Q_add & "Replace(format(IMP_UNIT,'0.00'), ',', '.') AS
PrezzoUnitario, "

Q_add = Q_add & "Replace(format(IMPONIBILE,'0.00'), ',', '.') AS
PrezzoTotale, "

Q_add = Q_add & "Replace(format(ALIVA,'0.00'), ',', '.') AS AliquotaIVA,
VenditaMateriali.UN_MISURA"

Q_add = Q_add & " FROM VenditaMateriali"

Q_add = Q_add & " WHERE (VenditaMateriali.IDREGCON)='" & Me.txtREGCON & "'"

CurrentDb.Execute Q_add, dbfailonerror

--------------------------------------------------------------------------

Chiedo venia per lo "scomodo"
--
Carlo POTS

---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
mantro
2019-02-08 18:16:51 UTC
Permalink
Post by @Alex
Post by Carlo POTS
Post by mantro
Post by Carlo POTS
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
http://www.donkarl.com/it?FAQ6.21
Forse sono io che non ho afferrato.
Ho scritto, in un campo della query, per un importo di 0,56, la stringa
Str([PrezzoUnitario])
Il prezzo lo accoda come .56; ovvero omette di inserirmi la parte intera.
Oltretutto, il campo, se contiene un valore intero, ad esempio 12,00,
deve inserirmi 12.00, mentre invece mi inserisce solo 12.
Dove sbaglio?
--
Lamps a tutti from Naples's kingdom Carlo POTS on VFR VTEC '02
& Bmw F650GS '00 "insomma, e' un VFR, mica una zoccola che cede appena ci
provi..." (cit. PMF)
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
Funziona solo per i NUMERI POSITIVI e > 1 perchè convertendo in Stringa sopprime lo ZERO, ma introduce anche uno spazio per il Segno... se verifichi infatti non è ".56" ma " .56"
Quindi il Replace credo sia meglio...
@Alex
Vero!
Io, erroneamente, non avevo specificato che bisognava usare CStr() e non
Str(). Infatti Cstr(0.56)="0,56" mentre Str(0.56)=" .56".
Io, proprio seguendo il suggerimento iniziale di Karl, negli enunciati
Sql ho sempre usato Cstr e non ho mai dovuto tribolare.
Mi è sempre andata bene perché non sono mai incappato in numeri
negativi?... Ne farò tesoro!

mantro
Loading...