Newsgroup: it.comp.lang.visual-basic
Titolo: Problemi con Query di Access

Ho creato una query in Access 97 che mi mostra le informazioni
contenute in diverse tabelle collegate da relazioni. Questa query
riporta anche una colonna che č il risultato di una operazione
effettuata su un campo di una delle tabelle collegate:
Diametro:
CDbl(Mid([tbCodiciProdotto]![DescrizioneProdotto];1;InStr([tbCodiciProdotto]![DescrizioneProdotto];"x")-1))
In pratica vengono convertiti in un double i caratteri del campo
'DescrizioneProdotto' (formato stringa) della tabella
'tbCodiciProdotto' che sono compresi tra il primo carattere e la prima
occorrenza del carattere "x" nel campo stesso. Cioč, se il mio campo
tbCodiciProdotto!DescrizioneProdotto contiene la stringa
"1234,56x345,5x34,5" io ottengo il numero in virgola mobile in doppia
precisione 124,56 nella colonna rinominata come 'Diametro'.
Fin qui tutto bene, la query funziona e mi riporta tutti i diametri
convertiti esattamente.
Il problema sorge se tento di fare operazioni di filtro sul campo
'Diametro': se creo una nuova query che mi ricerca tutti i record
della precedente query  aventi diametro pari, ad esempio, a 200, la
nuova query funziona e tutto va bene. Se creo una query che ricerca
tutti i record della precedente query _maggiori_ di 200 la query non
viene eseguita ed appare il messaggio di errore:
'Chiamata di routine non valida'
In pratica se la prima query, quella contente il campo 'Diametro', si
chiama 'Query1' , il comando SQL:
SELECT Query1.*
FROM Query1
WHERE Query1.Diametro=200
non da' problemi, mentre:
SELECT Query1.*
FROM Query1
WHERE Query1.Diametro>200
Genera un errore. 
Qualcuno sa spiegarmi il perchč di questa cosa?
(Ho provato anche in access2000 ed ottengo lo stesso errore!)
Grazie in anticipo per le eventuali risposte!

Molto probabilmente sono stati inseriti dei valori alfanumerici (ad es. la 
virgola invece del punto) prima del tuo carattere di controllo ('x').
Prova a modificare la formula della colonna incriminata.
Da: CDbl(Mid([....)
a:  CDbl(Val(Mid([...)
La funzione 'CDbl' se non trova un numero da convertire restituisce '#ERROR' 
e manda in errore la seconda query.
Con 'Val' gli eventuali valori alfanumerici sono trasformati in '0'.
Ciao.
________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at 
http://www.hotmail.com
--
Posted from [194.235.164.167] by way of 
f129.law10.hotmail.com
 [64.4.15.129] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Prova a modificare la formula della colonna incriminata.
No, purtroppo non è così. I dati forniti dalla prima query sono tutti
corretti, la coversione da stringa ad double funziona per tutti i
record. La cosa che mi lascia _basito_ è che se io filtro con
l'operatore '=' i record della prima query (tutti i record aventi ad
esempio il campo 'Diamtero' pari a 200) la cosa funziona, se io
utilizzo l'operatore '>' (tutti i record aventi il campo 'Diametro'
maggiore di 200) la query non viene neanche eseguita, e compare il
messaggio citato nel precedente msg!!!
Grazie comunque per la risposta!
Ciao, Alessio.

> Alessio Bernasconi:

Credo che il problema non sia in Query2 ma in Query1. Verifica
che questa non generi record che abbiano come valore del campo
Diametro "#Errore".
--
Ciao.
Maurizio
--------
?SPQR(C)
 X