Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

ricerca in tabella access

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

ricerca in tabella access

Postdi barbagianni62 » 05/08/14 22:13

Ciao a tutti.
Ho un problema che non riesco a risolvere. In VBA con DLookup in una tabella Access, cerco un Campo in base al valore che mi interessa. Ad esempio ricerco il valore "10040" in una tabella con campi denominati "10000" - "10020" - "10040" - "10060" --ecc. (passano di 20 in 20). Fin qua tutto OK.
Ma se io dovessi cercare ad esempio il valore "10018", la funzione non trova niente in quanto tale campo non esiste. Ho quindi la necessità di trovare il campo con il valore più vicino ( nell'esempio "10020" ). Con Excel usavo la formula CERCA.ORIZZ e mettendo la condizione "TRUE" mi restituiva il valore ricercato più vicino.
Come posso fare per ottenere lo stesso risultato in Access? Devo, in VBA arrotondare in qualche maniera il numero da ricercare al valore pari più vicino, oppure c'è qualche condizione nelle formule che non conosco che mi consente di eseguire la stessa operazione?
Per favore suggeritemi qualche cosa. Grazie per il vostro tempo.
barbagianni62
Utente Junior
 
Post: 22
Iscritto il: 10/09/12 11:12

Sponsor
 

Postdi archimede » 06/08/14 17:59

Temo di non aver capito nulla.

Posta la struttura della tabella (nomi REALI dei campi), 4 o 5 records di esempio, il codice della DLookup che usi attualmente e il risultato che vorresti ottenere.

Ti anticipo che sono scettico, perché in SQL non esiste il concetto di "vicino" o "simile", ma se spieghi meglio qual è il problema che devi risolvere magari un modo si trova.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: ricerca in tabella access

Postdi barbagianni62 » 07/08/14 19:57

Ciao Alessandro
Per prima cosa scusami del ritardo.
Comunque, era proprio di questo che avevo paura:
1° - non riuscire a spiegarmi dovutamente
2° - che in SQL non esiste il concetto di "vicino" o "simile". Quindi la cosa non fosse fattibile.
I nomi dei campi sono tutti reali, in quanto sono dei coefficienti (quindi numeri) per il calcolo della variazione di volumi di alcune sostanze in base al variare della temperatura. Ho una tabella [coefVol] con i seguenti campi:
- ID
- Degrees ( campo del valore della temperatura)
- Una cinquantina di campi denominati con numeri 9800 , 9820 ,9840 ( di 20 unità che si sommano al precedente) fino a 10780.
Ho una maschera con le seguenti caselle di testo:
- valRicercato dove va immesso il valore del campo da ricercare nella tabella
- valTemperatura dove va immesso il valore della temperatura associato all’ ID
- ed una casella di testo che mi restituisce il risultato
Applicando la funzione valVariab = DLookup("[valRicercato]", "[coefVol]", "[ID] = [Degrees]") Questo valVariab oltre ad essere riportato nella maschera mi servirà per eseguire dei calcoli.
Ora se io nelle caselle di testo della maschera metto ad esempio il valore “9820” e la temperatura di riferimento, mi viene restituito il valore che io ricercavo estrapolato dalla tabella, perche la funzione “trova” il campo 9820. Ma se il valore numeri non è esattamente corrispondente ( e questa situazione capita frequentemente) ad uno dei campi della tabella il codice non funziona.
Ad esempio, se io dovessi ricercare un valore “9818” , vorrei che il codice VBA funzionasse così:
- mi dovrebbe trovare per prima cosa il campo della tabella dal valore immediatamente inferiore (cioè 9800)
- fare la differenza tra il valore ricercato e il campo immediatamente inferiore 9818-9800=18
- se la differenza ha queste condizioni 18<=10 mi deve restituire il campo 9800, mentre se la differenza 18=>11 mi deve restituire il valore 9820.
A questo punto la ricerca nel DLookUp al “[valoreRicercato]” sarebbe limitata a uno di questi due campi.
Ciao, buona serata e grazie per l'aiuto.
barbagianni62
Utente Junior
 
Post: 22
Iscritto il: 10/09/12 11:12

Re: ricerca in tabella access

Postdi wallace&gromit » 08/08/14 14:53

archimede avrà forse una soluzione migliore, comunque per arrotondare i valori di 20 in 20 puoi usare una formula così:
Codice: Seleziona tutto
Int(([valore]+10)/20)*20
l'ho testata in una query ma non in VBA, dove ci capisco poco
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1421
Iscritto il: 16/01/12 14:21

Re: ricerca in tabella access

Postdi barbagianni62 » 08/08/14 15:14

1000 grazie wallace. Ottimo suggerimento.
Quando torno a casa dal lavoro provo la funzione su Access in VBA.
Per ora l'ho fatta girare su Excel e funziona tranne una piccola correzione che ho dovuto fare:
Codice: Seleziona tutto
Int(([valore]+9)/20)*20
perché quando la differenza tra il valore cercato e il valore immediatamente inferiore trovato in tabella è <=10 mi deve ancora restituire il valore inferiore. Nell' esempio per 9810 mi deve restituire ancora 9800 mentre per un valore ricercato 9811 mi deve restituire 9820.
Grazie tante per la tua disponibilità e il tuo tempo.
barbagianni62
Utente Junior
 
Post: 22
Iscritto il: 10/09/12 11:12

Postdi archimede » 08/08/14 17:10

Quindi basta che rimpiazzi il valore di valRicercato col risultato della formula prima di usarlo nella DLookup che hai riportato sopra (e che già funziona per i valori 9800, 9820, 9840, ecc.), giusto?

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: ricerca in tabella access

Postdi barbagianni62 » 08/08/14 21:45

Giusto...giusto! Alessandro.
Però purtroppo, adesso che il [valRicercato] è il risultato della formula che mi ha suggerito "wallace" la funzione DLookUp non mi gira più e mi restituisce solo ed esclusivamente come [valVariabile] il valore ricercato. Per esempio, se il risultato della funzione di arrotondamento e 9820 il valore della variabile è 9820 invece di restituirmi il valore estratto dalla tabella [coefVol] dal campo 9820 e dal record della temperatura [Degrees]. Devo aver "rovinato" qualcosa.
Ci sentiamo. Ciao e grazie a tutti
barbagianni62
Utente Junior
 
Post: 22
Iscritto il: 10/09/12 11:12

Re: ricerca in tabella access

Postdi barbagianni62 » 12/08/14 17:10

http://s3.postimg.org/95k80xcv7/Cattura.png

ciao a tutti..... penso di aver confuso molte cose! Scusate
la formula di wallace funzionava per arrotondare il numero cercato, ma il mio problema fondamentale è quello di dover "tirare fuori" un dato dalla tabella allegata. In pratica devo costruire una query che funzioni su due valori di ricerca che imposterò su due caselle di testo in una maschera: [Testo2] = Degrees e [Testo4]= 9800 (oppure i valori successivi sommati di 20 unità). Per fare un esempio devo farmi restituire il valore 26 che risulta dall'intersezione tra il campo 9820 e i -7 gradi di temperatura. In Excel era abbastanza semplice con CERCA.VERT e CERCA.ORIZ ma in Access come faccio? Credetemi, ho cercato delle ore su Internet ma sono solo riuscito a confondermi le idee.
Approfitto ancora del vostro tempo...Grazie veramente
barbagianni62
Utente Junior
 
Post: 22
Iscritto il: 10/09/12 11:12

Postdi archimede » 13/08/14 07:41

barbagianni62 ha scritto:devo farmi restituire il valore 26 che risulta dall'intersezione tra il campo 9820 e i -7 gradi di temperatura.
Codice: Seleziona tutto
valVariab = DLookup("[" & numero_cercato_arrotondato & "]", "[coefVol]", "[Degree]=" & valore_del_campo_degree_che_cerchi)
HTH.

Alessandro
archimede
Moderatore
 
Post: 2755
Iscritto il: 07/11/02 12:41
Località: Genova

Re: ricerca in tabella access

Postdi barbagianni62 » 13/08/14 13:04

perfetto Alessandro.
funziona benissimo. Voi [tu e wallace] non vi rendete "minimamente" conto di quale automatismo e di quanto risparmio di tempo riesco ad ottenere con i vostri suggerimenti.
Grazie ancora........ GRANDI!
barbagianni62
Utente Junior
 
Post: 22
Iscritto il: 10/09/12 11:12


Torna a Applicazioni Office Windows


Topic correlati a "ricerca in tabella access":


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti