Newsgroup: it.comp.appl.access
Titolo: FindFirst....di nuovo

Salve,
innanzitutto saluto, in particolar modo tutti quelli che hanno pazientemente
risolto alcuni miei problemi, e poi a tutti gli utenti di questo
meraviglioso n.g.
Dunque, ancora una volta "claudico" con FindFirst......
Dopo il validissimo suggerimento vorrei poter effettuare questo tipo di
ricerca:
sapere se esiste un nominativo già inserito e darmi l'avviso che esiste e di
che sesso è.
Premetto che, per esempio, ho una tabella "ELENCO" con i campi Cognome, Nome
e Sesso:
Private Sub nome_AfterUpdate()
'Mi dice se un nominativo è maschile o femminile
Dim nominativo As String
nominativo = "[cognome]= '" & Me.cognome & "' And [nome]='" & Me.nome &
"'and [sesso]= Me.RecordsetClone.FindFirst nominativo
If Me.RecordsetClone.NoMatch Then ecc. ecc.
Come va terminata la stringa che deve contenere il criterio F alla stringa
relativa al nominativo?
Ho provato in tutti i modi che conosco ma, niente!
Grazie, Marco.

 wrote in message
news:DMf68.2839$dd4....@twister1.libero.it...

Premesso che io utilizzerei la Funzione Dlookup per fare quello
che dici, ma è opinione personale condizionabile dalla quantità
di RECORDS, devi inserire "F" così:
nominativo = "[cognome]= '" & Me.cognome & "' And [nome]='" & Me.nome &
"'and [sesso]= 'F'"
Me.RecordsetClone.FindFirst nominativo
Usando Dlookup invece
dim Esiste as Variant,Dim nominativo As String
nominativo = "[cognome]= '" & Me.cognome & _
"' AND [nome]='" & Me.nome & "' AND [sesso]= 'F'"
Esiste=Dlookup("[IdChiave]";"TuaTabella";nominativo)
If not isNull(Esiste) then ec...
Eviti un RECORDSET....
Alessandro.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:77c0c9dee8c4f4ed13...@mygate.mailgate.org...

Come al solito.........sei gentilissimo! Il codice funziona e non avrei
immaginato che andasse racchiuso semplicemente così: 'F' e non da " oppure
&. Grazie.
Per quanto riguarda la scelta di usare FindFirst nasce dal fatto che devo
fare questo tipo di controllo:
se quello che inserisco è, per esempio, un nominavito esistente femminile
deve fare una cosa se invece è maschile ne deve fare un'altro. Approfitto
dell'occasione per porti questa domanda: nel caso dovessi inserire un altro
FindFirst come sopra ma questa volta con il criterio 'M', possono
"coesistere" le due condizioni nella stessa routine??? Mi spiego meglio:
esegue FindFirst e mi dice che è maschile e lo mando ad eseguire, per
esempio, me.prova.value=1; posso inserire un altro FindFirst dove mi trova
'F' in modo da eseguire, per esempio, me.prova.value=2 ????
Grazie, Marco.
P.S. - La funzione Dlookup mi ricordo di averla usata in un caso ove io
selezionavo una determinata città e, dopo l'aggiornamento, negli altri
controlli della maschera mi inseriva la provincia, la targa, ecc. tra
l'altro usato in una macro e, da tempo, non uso più e nemmeno query perchè
le costruisco tramite codice.

 ha scritto nel messaggio
news:Fwh68.3712$dd4....@twister1.libero.it...

Ciao Alessandro,
tanto che ho provato e sono riuscito ad ottenere quello che volevo. Guarda
se ti piace anche se, forse, un pò maccheronico ma funziona:
Private Sub nome_AfterUpdate()
'Mi dice se un nominativo è maschile o femminile
Dim nominativo As String
Dim nominativo2 As String
nominativo = "[cognome]= '" & Me.cognome & "' And [nome]='" & Me.nome &
"'and [sesso]='F'"
nominativo2 = "[cognome]= '" & Me.cognome & "' And [nome]='" & Me.nome &
"'and [sesso]='M'"
Me.RecordsetClone.FindFirst nominativo
If Me.RecordsetClone.NoMatch Then
GoTo condizione2
Else
MsgBox "Nominativo femminile", vbCritical
DoCmd.CancelEvent
SendKeys "{esc}"
DoCmd.GoToControl "cognome"
GoTo fine
condizione2:
Me.RecordsetClone.FindFirst nominativo2
If Me.RecordsetClone.NoMatch Then
MsgBox "Nessun nominativo presente", vbCritical
GoTo fine
Else
MsgBox "Nominativo maschile", vbCritical
DoCmd.CancelEvent
SendKeys "{esc}"
DoCmd.GoToControl "cognome"
fine:
End If
End If
End Sub
Ciao, grazie!
Marco.

 wrote in message
news:IPi68.3972$kv.1...@twister2.libero.it...
[CUT]
Scusa se ho eliminato tutto, ma come sai da Mailgate ci sono
limitazioni...!
Direi che è ottimo e funzionale...!
Si potrebbe semplificare considerando che la prima parte di stringa
del Nominativo è sempre la Stessa e cambia solo "'M'" o "'F'"
quindi puoi utilizzare una variabile sola al quale sommi la diff..:
Caso Maschio
Nominaivo=Nominativo & "'M'"
Caso Femmina
Nominativo=Nominativo & "'F'"
Poi in questo modo riduci il FindFirst ad un unico passaggio....!
In ogni caso sono solo demagogia della Programmazione.
Personalmente preferisco scrivere meno righe possibile, sono pigro..!
Ciao.


 ha scritto nel messaggio
news:116da3fff9328ec9c1...@mygate.mailgate.org...

No no, è giusto. Anzi, se mi dai queste "dritte" sono contento. Infatti
anch'io avevo pensato ad un solo passaggio di findfirst ma, purtroppo,
ancora non "mastico" bene VBA e, quindi, sto "crescendo" soprattutto grazie
a Voi e sbircio nel codice di alcuni programmi già fatti da Microsoft.
Non riesco a togliere dalla mente il GWBASIC e, per il momento, quello che
mi "rafforza" per inoltrarmi in un linguaggio strutturato è il fatto che mi
piace creare routine con la prima istruzione condizionale IF...THEN...ELSE!
per il resto ho speso un sacco di soldi per libri vari; l'ultimo Visual
Basci 6 dell'Apogeo: bello ma dà per scontato che se ne capisca un pò e,
soprattutto, è poverissimo di semplici esempi!
Comunque, grazie ancora.
Marco.

 Marco.
Spiacente dirtelo ma purtroppo anch'io ho comprato quel LIBRO 1,5 anni
fa visto che fondamentalmente lavoravo con VB, ma mi sono pentito
pochi gg dopo ed oggi ancora di più.
E' inconcludente, non capisco a che pubblico sia rivolto, per i
Principianti è una SUOLA, per chi ha dimestichezza non c'è nulla
di interessante.SOLDI BUTTATI VIA. 
Libri che passione.
Io sono legato ad ACCESS97 e ti posso consigliare:
ACCESS97 Programmazione di Scott F.Barker
Jackson Libri
Cosice ISBN 88-256-1278-8
Non so se lo trovi ancora ha qualche anno ma è FANTASTICO.
Un'ottima alternativa se conosci l'Inglese è quello di Ken Getz
sempre su A97, ma non ricordo il Nome....!
Alessandro


 ha scritto nel messaggio
news:b473b63f838ed91990...@mygate.mailgate.org...

Questo testo lo terrò in forte considerazione. Scusami se oso chiederti
un'altra cosa:
ritornando al codice precedente ho la necessità di "dichiarare" che i
controlli per esempio cognome, nome ed altri
da una maschera diversa da quella di lavoro. Faccio un esempio:
criterio= "[cognome] = " ecc. ecc.
findfirst ecc. ecc.
quindi [cognome] è il controllo della maschera "attiva" e, cioè, dove sto
lavorando, ma...
volendo lavorare su un'altra maschera diversa da quella che contiene il
controllo cognome, ad esempio, della tabella Nominativi e, quindi, sulla sua
relativa maschera Nominativi, ho provato in questa maniera:
criterio="form_nominativi.cognome=" ecc. ecc.
ed anche in diverse sintassi mi dà sempre lo stesso errore che
form_nominativi.cognome è errato.
Come devo fare, se si può?
Grazie.
Marco.

 Marco.
Scusa Marco ma hai fatto proprio un gran CASINO tra CAMPI e CONTROLLI.
Nel CRITERIO inserisci una stringa di Testo che deve fare riferimento
al NOME del Campo sul quale effettuare la Ricerca, come può in una
stringa andare il CONTROLLO di una Form nel modo che hai fatto tu....!
Sinceramente quindi non riesco a capire cosa devi fare visto il
GARBUGLIO.
Alessandro.


 ha scritto nel messaggio
news:0831581b0feca92959...@mygate.mailgate.org...

ok presto detto:
il codice va benissimo però, se creo una maschera non associata a nessuna
tabella e neanche nessuna query, in una casella di testo inserisco, ad
esempio, il cognome; la funzione (spero sia giusto) FindFirst vuole un campo
per la dovuta comparazione quindi il criterio dichiarato potrebbe essere
criterio="[cognome]=" ecc. significando che il campo [cognome] è presente in
questa maschera o quantomeno la stessa associata ad una tabella, giusto? e
se questo campo non è presente in maschera e la stessa mashera non è
associata a nessuna tabella? devo indicare questo campo a quale maschera e/o
tabella appartiene, giusto? quindi:
criterio="forms_nominativi.cognome=" ecc.
non capisco la giusta sintassi perchè mi dà sempre errore.
Spero di essere stato chiaro.
A proposito, visto che ci siamo, ma possibile che specificare un campo di
una tabella si deve far riferimento sempre e solo ad una maschera e, quindi,
crearla appositamente? IN soldoni: form_ ecc. CHE FA RIFERIMENTO A MASCHERE
MA UNA CHE FA RIFERIMENTO A TABELLE? senza passare o creare una
maschera?ILLUMINAMI.
Grazie.
Marco.

 ha scritto nel messaggio
news:M8G68.4522$5M4.1...@twister2.libero.it...

Scusami di nuovo ma rileggendo ho sbadatamente confuso tra controlli e
campi! Diciamo così: i controlli si trovano nelle maschere associate a campi
che si trovano nelle tabelle. Questo l'ho capito e ti prego di non far caso,
se puoi, a questi, ahime', gravi errori.
Attendo tue notizie.
Grazie

 Marco.
Caro Marco mi ritrovo quì oggi per smentire nuovamente le tue
convinzioni.
Come ti dicevo con FindFirst non fai riferimento a nessun Controllo
e non importa nulla cosa tu abbia associato nella tua FORM o meno.
Con FindFirst fai riferimento al RECORDSET che non è altro che un
insieme
di Record.
Nel criterio="[Cognome]='Bianchi'" e lo ripeto per l'ultima volta non
c'è nessun riferimento a COntrolli(Es.:TextBox) quel [Cognome]
è il Relativo CAMPO della Base Dati del RECORDSET.
Il recordset può essere un CLONE dell'origine dati della Form
da cui Recordsetclone, ma sempre contiene CAMPI come le Tabelle.
E' ovvio che se hai una Form non associata per utilizzare FindFirst
devi costruirti un RECORDSET, ma a cosa ti serve non saprei....!
Se invece vuoi realizzare una sorta di Form per inserire criteri di
RICERCA, beh sei proprio fuori strada............................!
Ci sono 2 sistemi semplicissimi:
1)Query Parametrica in cui inserisci come CRITERIO il Riferimento
  al CONTROLLO della FORM non ASSOCIATA. Questa QRY sarà l'origine
  dati della FORM "RisultatoRicerca".
2)La Form "RisultatoRicerca" ha come origine dati la Tabella Completa.
  La tua Form "Criteri" costruirà il Criterio così come lo abbiamo
  visto precedentemente, e quando esegui il
  DOCMD.OPENFORM "RisultatoRicerca",,CRITERIO
  Apre la Form in questione FILTRATA in Base al Criterio che hai
  passato all'apertura.
Scusa se sono stato brusco, ma sinceramente ho la certezza che tu
abbia solo una gran confusione, quindi mi risulta molto difficile
spiegarti alcuni concetti, che vedo ti sfuggono.
Non voglio nè scoraggiarti nè offenderti, ci mancherebbe altro,
anzi mi fa piacere darti quando posso alcuni consigli, ma il mio
consiglio è quello di non buttare troppa carne al fuoco,
spezza i problemi e affrontali uno alla volta, hai troppe lacune
di concetti per buttarti a capofitto sugli oggetti DAO.
Ciao.


Esimio Alessandro,
Grazie della tua pazienza e non sono per niente offeso od altro perchè hai
ragione.
Dovrò subito mettermi alla ricerca del libro che hai gentilmente suggerito,
affinchè possa attingere le dovuti basi nonchè i concetti di programmazione
VB ma scusami se insisto in questo senso:
come devo fare nel caso dovessi creare una maschera non associata, con una
sola casella di testo ove posso inserire, ad esempio, "Bianchi" e
sull'evento AfterUpdate voglio eseguire la routine che contiene FindFirst
per trovarmi il record che contiene "Bianchi" nel campo cognome della
tabella "Nominativi", se questo esiste?
Capisco benissimo che non so ancora cos'è un recordset, come si apre e,
soprattutto, come si chiude;cos'è un DAO ecc. ABBI PIETA'
Spero tanto che in questo modo mi sia espresso nel modo più chiaro
possibile.
Se si può fare aspetto in concitata attesa.
Grazie e un affettuoso saluto.
Marco.

RISOLTO ALLA GRANDE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Esimio Alessandro,
ho risolto il caso semplicemente ragionandoci e ho potuto constatare con
grande felicità che il tutto funziona.
Finalmente ho scoperto che in una maschera non associata i dovuti
riferimenti sono:
Criterio="Nominativi.cognome= ecc. ecc.
quando devo fare il controllo se non esiste e quindi NoMatch allora:
If Form_nominativi.RecordSetClone.NoMatch ecc. ecc.
quindi nel criterio va direttamente specificato il nome della tabella con il
relativo campo ma quando deve verificare deve fare riferimento ad una Form,
in questo caso, la maschera Nominativi.
Ho provato anche a fare riferimento direttamente alla tabella:
Nominativi.RecordSetClone.NoMatch ecc. ecc. ma dà errore.
Comunque mi sta BENISSIMO così anche se, forse (quasi sicuramente), non è il
modo migliore ma mi accontento lo stesso considerato il mio stato ancora
"embrionale" in programmazione VB.
Grazie ancora.
Marco.

 Marco.
Non darmi dell'ESIMIO se non vuoi delle parolacce....! ;-)
Benissimo, quando le cose funzionano è un grosso passo avanti.
Per perfezionarle si fa sempre a tempo.
Ciao Buon Week-End
