Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Punto decimale in SQL Server - virgola decimale in ACCESS

834 views
Skip to first unread message

francosk

unread,
Mar 31, 2010, 3:59:03 PM3/31/10
to
Scusatemi se torno sull'argomento (ho visto varie discussioni a riguardo), ma
vorrei arrivare alla soluzione definitiva del problema, che non credo
riguardi solo me.

Contesto:
Applicazione ACCESS che usa tabelle e viste SQL Server
Maschere che usano viste SQL Server

Le viste, in SQL Server, mostrano i valori decimali con ",".
La stessa vista, collegata in ACCESS, mostra alcuni numeri con "," ed altri
con "."

La soluzione "classica" (più volte espressa nelle discussioni) prevede l'uso
di Replace(numero-decimale, ".", ',') quando si verifica il problema.
Purtroppo, questo significa trasformare il numero in stringa; quindi (p.es.):
- non è possibile formattare il numero nel campo (p.es. 1 cifra decimale)
- per effettuare una banale somma dei valori visualizzati, bisogna usare il
"trucco" di trasformare (a ritroso) i valori in numeri, p.es. Origine
controllo =Somma(CSng([nome campo]))

Se poi è necessario permettere all'utente di filtrare i dati inserendo un
valore numerico? Per es. "<0"?
Magari si può creare un filtro del tipo "where CSng([campo]) < 0". Forse
funziona, ma il tutto mi sembra mmmmmoooooolto farraginoso (e inefficiente?).

Insomma, come si può fare in modo che la vista trasferisca numeri?

E pensare che se non ci fosse SQL Server di mezzo non ci sarebbe nessun
problema! Tralascio i casi in cui si opera con le date ...

Qualcuno conosce la "soluzione definitiva"?

Grazie

giorgio rancati

unread,
Apr 1, 2010, 2:20:49 PM4/1/10
to

"francosk" <fran...@discussioni.microsoft.com> ha scritto nel messaggio
news:FC787247-8484-42FB...@microsoft.com...

> Scusatemi se torno sull'argomento (ho visto varie discussioni a riguardo),
> ma
> vorrei arrivare alla soluzione definitiva del problema, che non credo
> riguardi solo me.
>
> Contesto:
> Applicazione ACCESS che usa tabelle e viste SQL Server
> Maschere che usano viste SQL Server
>
> Le viste, in SQL Server, mostrano i valori decimali con ",".
> La stessa vista, collegata in ACCESS, mostra alcuni numeri con "," ed
> altri
> con "."
[CUT]

> Insomma, come si può fare in modo che la vista trasferisca numeri?
[CUT]

> Qualcuno conosce la "soluzione definitiva"?

Ciao francosk,

la rappresentazione dei valori numerici di una vista di Sql server in access
è soggetta alla tabelle presente nel seguente articolo.
----
INFO: Improved ODBC DataType Mappings with Jet 4.0
http://support.microsoft.com/kb/214854/en-us
----

in particolare nota la riga con:
----
SQL_DECIMAL >28 N/A Text Text
----
significa che se hai un campo numerico di tipo Decimal o Numeric e la sua
scala è maggiore di 28, in Access verrà visto come campo testo, quindi ti
ritrovi il separatore decimale . (punto)

La stessa cosa vale per i campi Numeric o Decimal presenti nella vista e
sottoposti alla funzione SUM.
Come ad esempio
----
SELECT Sum(Importo) AS Totale
FROM Tabella
----
dove Importo è un campo Numeric o Decimal con, ad esempio, Scala 18 e
Precisione 2 quindi al di sotto della scala 28.
Perchè allora viene visto come testo ?
Perchè Sql Server quando esegue una sommatoria di un campo Numeric o Decimal
rende un campo avente la scala massima, ovvero 32, quindi al di sopra dei
28.
Vedi:
----
SUM (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms187810.aspx
----

Per risolvere:
Non utilizzare campi di tipo Decimal o Numeric con precisione maggiore di 28
Nelle viste che eseguono calcoli su campi di tipo Numeic o Decimal, eseguire
la conversione con una scala che Access possa interpretare come campo
numerico.
----
SELECT Convert(Numeric(28,2),Sum(Importo)) AS Totale
FROM Tabella
----

Ciao
--
Giorgio Rancati
[Office Access MVP]


giorgio rancati

unread,
Apr 1, 2010, 2:26:46 PM4/1/10
to

"giorgio rancati" <giorgio_No_Sp...@tiscali.it> ha scritto nel
messaggio news:hp2o66$fcg$1...@speranza.aioe.org...

ops.. correzione :


> rende un campo avente la scala massima, ovvero 32

rende un campo avente la scala massima, ovvero 38

0 new messages