Newsgroup: it.comp.appl.access
Titolo: Tipo di dati non corrispondenti nell'espressione criterio

Ricevo una tabella "ElencoOperatori" in cui il campo ID, benché
composto di sole cifre, è in formato Testo.
Devo metterlo in relazione con il corrispondente dato, in formato
Double, di una query di selezione "qEntiSedi".
Faccio una query "Query1" di creazione tabella che riporta, così come
sono, tutti i campi di "ElencoOperatori", tranne l'ID che tratto così:
CDbl([Id Operatore]) AS idope. A questo punto metto in relazione la
tabella "q1" così creata con la mia query "qEntiSedi". Tutto funziona.
Questa la query finale:
SELECT q1.GeFo, ...
FROM q1 LEFT JOIN qEntiSedi ON q1.idope = qEntiSedi.Idope
WHERE (((qEntiSedi.Idope) Is Null))
ORDER BY q1.GeFo;
Allora ho modificato "Query1" facendone una query di selezione e poi
la inglobo nella precedente, così:
SELECT q1.GeFo, ...
FROM (SELECT ElencoOperatori.GeFo, CDbl([Id Operatore]) AS idope, ...
FROM ElencoOperatori) AS q1 LEFT JOIN qEntiSedi ON q1.idope =
qEntiSedi.Idope
WHERE (((qEntiSedi.Idope) Is Null))
ORDER BY q1.GeFo;
al che ottengo l'errore "Tipo di dati non corrispondenti
nell'espressione criterio".
Io speravo in questo modo di evitare una tabella, ma non mi so
spiegare la ragione dell'errore.
Qualcuno può illuminarmi?
Grazie a tutti.
 Riccardo Baldinotti


Ciao!
La mia fonte di esperienza personale (un ing. mecc. per nulla incline
a tipi di dato & normalizzazione) mi suggerisce di verificare se il
campo di partenza contiene sempre e solo cifre e non anche spazi o
altri ammenicoli ...
Es: proprio 2 ore fa è bastata una Val(Nz([Campo1];"0")) per far
andare una query su cui aveva perso un'ora.
HTH
Popi


Perdincibacco! Un campo vuoto! ('zzarola) Un'altra piacevolezza nel
lavorare con dati altrui... poi nelle query successive i conti
tornavano e quindi non avevo spulciato più di tanto.
Sostituendo con CDbl(val(nz([Id Operatore],"0"))) AS idope, la prima
query finale funziona.
Grazie.
Ora mi turba la seconda query. Se faccio
SELECT qEntiSedi.Idope, ...
FROM qEntiSedi LEFT JOIN q1 ON qEntiSedi.Idope=q1.idope
WHERE (((q1.idope) Is Null))
ORDER BY qEntiSedi.Idope;
ottengo 14 record con un idope in qEntiSedi non presenti nella tabella
q1; se invece faccio
SELECT qEntiSedi.Idope, ...
FROM qEntiSedi LEFT JOIN (SELECT CDbl(val(nz([Id Operatore],"0"))) AS
idope
FROM ElencoOperatori)  AS q1 ON qEntiSedi.Idope = q1.idope
WHERE (((q1.idope) Is Null))
ORDER BY qEntiSedi.Idope;
non ottengo alcun record.
...bò...
Riccardo Baldinotti


Mumble ... naturalmente hai verificato che gli idope dei 14 record non
esistono ne' nella tabella ne' nella query, giusto?
La tua mail e' valida?
Popi


I 14 esistono nella query qEntiSedi e non in q1, questo che sia la
sottoquery o la tabella.
La mia mail è valida.
Grazie
Riccardo Baldinotti


Ok, dagli un'occhiata.
Popi


Modificando la query sopra per visualizzare anche il campo q1.idope e
togliendo la clausola WHERE insieme a tutti gli altri cicciano fuori
anche i tuoi 14 record ... con q1.idope=0.
Non mi era mai capitata una cosa di 'sto genere ... tra l'altro ho
modificato le varie query perche' restituiscano -1 e non 0 in caso di
null e se faccio mostrare il q1.idope come sopra detto mi viene
visualizzato un ottimo -1 per i record non abbinati.
Per uno scrupolo, poi, ho anche esportato il tutto in un mdb e l'ho
aperto sia con AXP che con A07 e non ho notato differenze.
In pratica, quindi, la clausola WHERE va modificata come
(qEntiSedi.Idope<>q1.idope), ma se devo essere sincero la cosa mi fa
un tantino paura ...
Speriamo che prima o poi si scopra il vero perche' :(
Popi


Io ho scritto: WHERE (((q1.idope)=0)) e finalmente filtra i 14.
Ciò che mi stupisce è l'asimmetria rispetto all'altra query. Sarà
qualche comportamento dell'SQL di Access, o altro arzigogolo da soloni
della materia. Se un Solone sta leggendo...
Grazie un'altra volta (quando ti stufi a farti ringraziare, avvisami).
Riccardo Baldinotti


Di Guru che potrebbero illuminarci da queste parti ne abbiamo IMHO
piu' d'uno ;)
Per i ringraziamenti ... s'io fossi un filosofo direi che sono lo
specchio delle persone corrette, ma sono solo uno dotato di un ego
smisuratamente affamato :D
A buon rileggerti alla prossima occasione ;)
Popi


Ecco che oggi ho avuto l'illuminazione. Riporto la query
SELECT qEntiSedi.Idope, ...
FROM qEntiSedi LEFT JOIN (SELECT CDbl(val(nz([Id Operatore],"0"))) AS
idope
FROM ElencoOperatori)  AS q1 ON qEntiSedi.Idope = q1.idope
WHERE (((q1.idope)=0))
ORDER BY qEntiSedi.Idope;
il fatto è che uso nz([Id Operatore],"0")! Cioè, se ho valore nullo,
metto zero! E poi mi stupisco di dovere scrivere WHERE
(((q1.idope)=0))? E che altro potrei avere, se glielo dico io di
metterlo?
Vabbe'...
Riccardo Baldinotti

 Ecco che oggi ho avuto l'illuminazione.
<CIT>
Fratelli! Lui ... ha visto la LUCE!!!
</CIT>
Complimenti, e grazie di avercelo fatto sapere, caro Osram :O)))))
Popi