PDA

View Full Version : [VISUAL BASIC + ACCES] dubbio


shang84
23-04-2007, 20:18
Ciao,
sto lavorando ad un programma Acces. Vorrei creare una funzione da richiamare quando da una maschera in Access clicco il bottone.

Vorrei che la funzione andasse a leggere tramite una query da una tabella e quindi restituire il valore letto come valore restituito dalla funzione.

E' possibile creare una tale funzione?

Mi servirebbe quindi poter chiamare questa funzione nella subroutine legata all'evento click del bottone..

Avete qualche suggerimento?

Grazie!! :-)

akyra
24-04-2007, 11:15
certo che si può...ma devi fare delle ipotesi molto forti sulla query in questione.
mi spiego meglio: siccome quello che ti interessa è ritornare un solo dato, la query DEVE ritornare un solo risultato, oppure ipotizzare che il campo in questione sia uguale per tutti i record ritornati dalla query. Quindi per ricavare il valore che stai cercando, devi implementare la query in modo che ritorni il solo record cercato, e a quel punto puoi usare la funzione Dlookup per leggere tale valore.

Ad esempio: se tu avessi una tabella clienti, con un campo chiave "CodiceCliente", allora creando una query che cerca un dato cliente partendo dal codice, riusciresti a ricavare un solo record (quello cercato) in quanto il campo "CodiceCliente" è univoco.

La funzione Dlookup ritorna il valore di un record a caso, di un campo specifico, all'interno di un dominio specificato. Un esempio può chiarire:


mioValore = DLookup("Campo", "QueryOTabella")


Dlookup ritorna, in modo del tutto casuale, uno dei valori del campo "Campo" all'interno di "QueryOTabella". Capirai che se i valori in "QueryOTabella" sono più di uno, la funzione potrebbe restituire valori inaspettati...per questo è importante sapere a priori che "QueryOTabella" contenga un solo record, oppure che il campo "Campo" contenga lo stesso valore per tutti i record di "QueryOTabella", in modo che si sia sicuri del valore che tale origine dati restituisce.

Riassumendo, per fare questo, basta creare un nuovo modulo (Modulo1) al cui interno inserire una funzione definita "Public"


Public Function dammiValore() as String
Dim ritVal as String
ritVal = DLookup("Campo", "QueryOTabella")
dammiValore = ritVal
end function


(ho supposto che il valore di ritorno della funzione sia di tipo "String", ma naturalmente tu poi decidere di fargli ritornare quello che vuoi)

che non fa altro che leggere da "QueryOTabella" e ritornare il valore di "Campo". Poi crei un pulsante e, sull'evento "Su click" di quest'ultimo richiami la funzione "dammiValore()", facendo attenzione che, dato che devi usare il valore di ritorno di tale funzione, la devi richiamare con le parentesi rotonde e utilizzare il valore come meglio credi.

se ci son problemi chiedi pure!

shang84
24-04-2007, 12:27
Ok ottimo ;-)! Grazie per la risposta completa e chiara, ora provo la soluzione..

posso chiederti un'ultima cosa??

Sempre al momento del click del bottone vorrei poter leggere in una funzione
TUTTI i valori contenuti nei CAMPI della MASCHERA sulla quale faccio click..
in modo da poterli inserire nel database SQL o aggiornare il database..

E' possibile?

E' possibile anche fare una cosa del tipo:

if (riga con codice cliente già presente)
then AGGIORNA riga con valori della maschera
else INSERISCI NUOVA rigra

??
Grazie mille e perdonate la banalità delle domande ma è la prima volta che programma in Visual Basic, thanks ;-)

akyra
24-04-2007, 17:13
certo che puoi, basta implementare un ciclo for (o while) e scorrere le righe e i campi che ti servono e poi eseguire l'if che ti serve....

ad esempio una cosa di questo tipo dovrebbe fare al caso tuo:

for i=1 to me.recordset.recordcount
'inserisci qui il codice che ti serve

if i < me.recordset.recordcount then
me.recordset.movenext
end if
next i


con queste semplici righe di codice scorri tutte le righe presenti nella query o tabella su cui è basata la maschera corrente...ora non ricordo se il sistema inizi a contare i record dallo zero o dall'uno, comunque questo non è un problema, basta provare...

shang84
24-04-2007, 17:43
Ma se io invece volessi modificare il valore nella maschera e quindi aggiornare-leggere il valore modificato?

akyra
24-04-2007, 23:09
dovresti spiegarti meglio perchè così non ho capito molto bene...

shang84
25-04-2007, 00:14
... no problem ;-) Grazie lo stesso, mi è servito TANTISSIMO quello che mi hai detto prima, davvero grazie. L'ultimo post è poco chiaro, me ne rendo conto.. ho risolto il problema..

Grazie ancora ;-)!!