Collegare viste sql in access

lunedì 22 agosto 2011 - 10.30
Tag Elenco Tags  Windows Server 2008 R2  |  SQL Server 2008  |  Access (.mdb)  |  Office 2007

kico Profilo | Newbie

Ciao, dopo anni di "sciacallaggio" di informazioni su tutti i forum del mondo alla ricerca di risposte stando nell'ombra, ho deciso di iscrivermi per la prima volta in un forum.
la mia "competenza" è fondata sull'uso di access da 25 anni ormai (ne ho 40), ma la formazione è data appunto o dallo "sciacallaggio" di cui sopra, help di access (mio dio...) e prove prove prove......
In ogni caso sono riuscito a creare molte "applicazioni" che in azienda uso parecchio... distinta base a 5 livelli, lancio della produzione, mansionario, gestione schede haccp...... tutto però a query e macro....
windows server 2008, in cui lavoro in terminal da tutti i pc/mac, tutto collegato in rete compreso etichettatrice, office 2007 e sql server 2008 express.
Da poche settimane mi sono lanciato ad aprire sql server management 2008 perché oltre al gestionale esa adesso anche i dati delle etichettatrici aut. bizerba arrivano in tabelle sql; in pratica uso il gestionale come fonte dei dati unica, ci arrivo con gli odbc con sql e le pesate "online" di ogni prodotto mi arrivano nello stesso database con una vista.
Questo già lo facevo quando la etichettatrice creava un file mdb, ma adesso il "dialogo" è chiaramente molto più semplice e diretto; ho un pc a fianco della etichettatrice che ad ogni pesata aggiorna una maschera in access in cui compaiono la somma delle pesate divise per articolo, cliente. In ogni momento so che cosa è stato prodotto e a chi sta finendo...

Prima di raccontarVi tutto il resto della mia vita giungo al problema che non riesco a risolvere.

collego le tabelle di sql in access, ma alcuni campi numerici mi "arrivano" in formato testo

se in sql faccio design e lancio la query vedo la virgola... se lancio la query delle prime mille righe vedo il puntino... ( e la cosa mi fa inc..) ma ho visto che alcuni campi con il punto poi finiscono numerici... altri no
ho provato con replace (per il puntino) con cast...

grazie della pazienza in anticipo...

nman Profilo | Newbie

Non ho capito molto, Partiamo dall'inizio.

Nel DB SQLServer i campi possono essere:
___ int Numeri interi
___ money numeri con decimali
___ nchar testo
___ eccetera

Se ho capito bene tu sulle query ( o viste ) controlli se viene
il punto o la virgola per capire il tipo di dato.

Questa puo essere una indicazione
Un'altra indicazione arriva dall'allineamento a Dx o Sx

Ma se puoi andare nella tabella in " modifica "
puoi leggere direttamente e con assoluta certezza
il formato del campo inserito
______________________________________________________________

Se vuoi usare il cast la sintassi è:
___ CAST(campo AS nchar) ___ ( As int AS money )

ma io non lo userei bensi preferisco privilegiare
il formato dei campi in tabella

usando il cast in effetti la visualizzazione
dei numeri e un po strana

14,0000 diventa 14.00
1789,2845 diventa 1789.28

ma si tratta solo della visualizzazione

______________________________________________________________

Un problema reale potrebbe essere il collegamento ODBC

Quando modifichi qualunque cosa nella struttura delle tabella di
origine sul DB SQLServer devi sempre ricordarti di andare
nella applicazione di Access per aggiornare le tabelle collegate

diversamente la modifica non viene recepita dalla applicazione
che tuttavia continua a funzionare malamente ( oppure si blocca )

Quindi sulla applicazione
___ClicDx su una qualunque tabella
_____Gestione tabelle collegate

__________________________________________________________________


Il formato dei numeri solitamente si puo
vantggiosanente definire mella aplicazione

Io solitamente uso
Formato " Standard "
Posizioni decimali " automatiche "
Vengono numeri tipo 258.724,12
_______________________________________________________________

Anche se fuori argomento se usi il collegamento ODBC
ti consiglio di riprendere tutti i campi bit (sì/no)
del DB SQLServer e impostarli a:
Ammette Null No
valore predefinito 0



Saluti

kico Profilo | Newbie

Grazie mille per l'aiuto.

In effetti non sono stato chiarissimo.
Ho una tabella in sql creata da una macchina etichettatrice, per cui non posso fare modifiche, dove i campi data sono varchar(10) e i campi peso sono numerici.
Prima di collegare in access passo da due viste, la prima in cui uso la funzione CASE per creare dei campi dividendo le qta per ogni cliente (non sono tanti, solo i distributori) (che diventa la colonna di una specie di query a campi incrociati) e poi la seconda in cui faccio le somme.
In tutti i passaggi vedo la virgola in "design" e il puntino in "query" e tutto allineato a sinistra però deduco che per sql siano numerici

Poi ho scoperto, non il perchè, che alcune cose tipo CAST(SUM(QTA) AS DECIMAL(18,3)) AS QTA le puoi scrivere solo nella parte di "testo" sql e non nel pannello sopra altrimenti gli "girano" in una maniera pazzesca... (venendo da access mi veniva più facile)
Ho sfruttato il tuo suggerimento di aggiornare ogni volta che facevo modifiche il collegamento in odbc; mi sa che qualche tentativo mi era sfuggito


In access benché sql faccia le somme regolarmente anche dopo il case (quindi dovrebbero essere numerici) i campi della tabella collegata sono TESTO!
Un'altra soluzione è stata quella di fare una query in access e formattare il campo, ma avrei voluto i dati già "puliti" in sql che altrimenti propone robe terribili tipo .5000000 invece di 0,500 tutto allienato a sx

Dopo una giornata di lavoro (in ferie e con un sole pazzesco) sono riuscito ad ottenere il risultato facendo un abuso spropositato di CAST per i numeri e di CONVERT per le date.

Risultato ottenuto per una prima parte di lavoro, mi capiterà spesso di portare dati in access che devono essere numerici, quindi vorrei capire se così deve essere o ci sono procedure più "intelligenti" o se questa a lungo andare potrebbe avere problemi..

Grazie ancora.
Ciao

nman Profilo | Newbie

A parer mio il DB SQLServer ( anche quelli dei concorrenti ) serve
solamente a contenere delle tabelle relazionate fra di loro.

A questo DB ti ci puoi connettere con applicazioni di Access, ASP, PHP, ecc
e nelle applicazioni devi fare le query e
ti devi preoccupare della corretta visualizzazione dei dati

SQLServer se noti NON ha nulla per la formattazione dei campi
gg/mm/aaaa numeri di decimali puntino separatore delle migliaia ecc
non ha nulla neanche per la stampa dei dati
Tutte queste funzioni sono tradizionalmente della applicazione
di Access
__________________________________________________________________________

Anche le query che tu cerchi di fare con SQLServer
le potresti fare piu comodamente nella applicazione,

e li sulle proprieta dei campi puoi definire il formato.

Pero questo è soggettivo, c'è chi preferisce tenere
le query nel DB SQLServer

Io personalmente faccio le query " Piu importanti "
nel DB SQLServer e quelle meno importanti
nela Applicazione.
________________________________________________________________________

Noto pero che il DB su cui fai delle query non è tuo
bensi della "macchina etichettatrice"

In questi casi io non vado mai a modificare il DB
bensi creo un 2° DB sullo stesso Server e stessa Sessione

dove faccio delle viste che si collegano al 1° DB

_____________

Per esempio puoi fare un DB2 senza tabelle
ma con viste che si collegano al DB1

Il testo della query e molto semplice
SELECT AAaa, AAbb, AAcc, AAdd, AAId
FROM DB1.dbo.AA
Dove
DB1 è il nome del DB sullo stesso server e sessione
AA è la tabella
AAaa AAbb AAcc AAdd AAId Sono i campi
____________

La stessa query fatta nel suo DB sarebbe
SELECT AAaa, AAbb, AAcc, AAdd, AAId
FROM dbo.AA

Usare questo accorgimenti ti consente di sbagliare e incasinare
solo il tuo DB senza coinvolgere la etichettatrice
________________________________________________________________

Un'ultima osservazione relativamente a quella tua frase:

CAST(SUM(QTA) AS DECIMAL(18,3)) AS QTA
le puoi scrivere solo nella parte di "testo" sql
e non nel pannello sopra altrimenti gli "girano" in una maniera pazzesca...

Premesso che vedo un peccatino di omonimia
( Prendi la somma di QTA e chiamala ancora QTA )
ma il problema non è li

Penso che il problema sia nel fatto che con la parte testuale
puoi scrivere query piu complesse di quanto si possa poi
rappresentare graficamente nel disegno superiore

Ma questo succede anche in Access
se per esempio un Join non deve essere = bensi >
puoi impostare la query graficamente e poi modificare
nela parte testuale il = in >




Saluti

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 !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5