Newsgroup: it.comp.appl.access
Titolo: selezione di un record secondo parametri

Ciao a tutti. Come posso fare per ricercare un dato record di una
tabella in una maschera mediante il parametro di una data? Mi spiego
meglio. Ho
usato "DoCmd.FindRecord [CasellaCombinataCliente]" e mi trova il
cliente, ma io voglio che si posizioni sul record di QUEL CLIENTE la cui
data è X.
So che si devono inserire altre istruzioni, ma non ho trovato da nessuna
parte le spiegazioni eccetto che quelle in inglese nell'informazione
parametri, ma non le so applicare. Toni.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 parametri, ma non le so applicare. Toni.
Ipotizziamo...
1) Nella tuo maschera c'č una casella di testo (txtDta) in cui c'č la data
da utilizzare come parametro di ricerca ed un'altra casella di testo
(txtId) - anche nascosta - in cui c'č il codice del cliente.
2) Nell'origine dati della maschera (tabella o query) c'č un campo data
(dtmData) e un campo codice (IdCliente)
dovrai
a fronte dell'evento che giudichi piů opportuno inserire queste istruzioni
    Me.RecordsetClone.FindFirst "[dtmData] = #" _
        & Format$(Me.txtData, "m-d-yy") & _
        "# And [IdCliente] = " & Me.txtId
    Me.Bookmark = Me.RecordsetClone.Bookmark
Prima di uscire dall'editor di visual basic accertati di aver impostato il
riferimento al DAO e che questo si trovi prima dell'eventuale riferimento
all'ADO.
Ciao
--
Alberto

 all'ADO.
Non sono riuscito ad applicare le tue istruzioni. Ho una maschera con i
campi [IDCliente], [DataIn], [DataFi]. Vorrei selezionare un record da
una tabella che contiene i dati [CL] e [SCAD]. I campi DataIn e DataFi
sono i limiti di date utili per essere accettate. E' possibile, secondo
te, immettere all'evento su click il tuo codice? Tutti gli spazi, gli "a
capo" e il trattino basso, servono?
Come sostituisco il between di date della maschera?
Devo prima cercare il cliente e poi l'intervallo date.
E in ultimo, dove mi accerto di aver impostato il riferimento al DAO?
Ciao. Grazie. Toni.


 Ciao. Grazie. Toni.
Allora prova con questo codice (a fronte dell'evento su click di un pulsante
di comando )
Private Sub TuoPulsanteDiComando_Click()
    Me.RecordsetClone.FindFirst "[CL] = " _
        & Me.IDCliente & "And [SCAD] Between #" _
        & Format$(Me.DataIn, "m-d-yy") & "# And #" & _
        Format$(Me.DataFin, "m-d-yy") & "#"
    Me.Bookmark = Me.RecordsetClone.Bookmark
End Sub
Gli 'a capo' e i trattini servono per una migliore leggibilità del codice:
potresti teoricamente fare due sole righe... così invece puoi addirittura
fare un copia/incolla del mio codice (sempre che non abbia fatto degli
errori).
Il DAO lo imposti dall'editor di visual basic (Strumenti -> Riferimenti). Se
tra i riferimenti è presente anche l'ADO (Microsoft ActiveX Data Objects)
usando le frecce 'priorità' fai in modo che DAO sia precedente ad ADO.
Fammi sapere se sei riuscito.
Ciao,
--
Alberto

 Alberto
Ho trasformato le tue istruzioni per il mio caso. Mi da errore per
operatore mancante.
Ho fatto eseguire l'istruzione after update della
CasellaCombinataCliente.
Me.RecordsetClone.FindFirst "[CL] = " _
        & Me.CasellaCombinataCliente & "And [SCAD] Between #" _
        & Format$(Me.DataIn, "m-d-yy") & "# And #" & _
        Format$(Me.DataFi, "m-d-yy") & "#"
    Me.Bookmark = Me.RecordsetClone.Bookmark
Mi spieghi tutti quei simboli? Intuisco che sono per specificare il
formato data. Non basta solo il between come faccio in una query con
sql?
Ciao.Toni.



L'errore dovrebbe essere causato dalla mancanza di uno dei tre parametri. Tu
prova - prima di tutte le altre istruzioni - a testare il contenuto dei
controlli da cui prelevi i valori
Per esempio:
    MsgBox Me.CasellaCombinataCliente
    MsgBox Me.DataIn
    MsgBox Me.DataFi
così vedi quali sono i parametri che vengono effettivamente passati a
FinfFirst. (è anche possibile che la casella combinata non 'ritorni' il
codice cliente ma qualcos'altro)
Altre due cose, che non dovrebbero però aver connessione con l'errore:
1) Io ho previsto che CL sia numerico. Se non lo fosse la riga n° 2 andrebbe
modificata cosi:
    & Chr$(34) & Me.CasellaCombinataCliente & Chr$(34) & "And [SCAD] Between
#" _
2) Chiaramente se nell'arco di tempo da te determinato il cliente è presente
più di una volta non potrai avere il controllo su quale dei record ti verrà
trovato.
Per 'simboli' credo tu voglia dire i vari 'Format$'. VBA gestisce le date
nel formato 'inglese' (mese-giorno-anno): tramite il Format$ tu gliele passi
come vuole lui così eviti spiacevoli situazioni (tipo 12 gennaio 2002
interpretato come 1° dicembre 2002).
Ciao
--
Alberto