Newsgroup: it.comp.appl.access
Titolo: comando trova lunatico

Ciao a tutti,
dunque, altro problema, direi singolare...
Ho le due tabelle TAB_FATTURE e TAB_CLIENTI che hanno un campo in
comune codCliente (in TAB_CLIENTI è chiave primaria mentre in
TAB_FATTURE si ripete).
Ho creato una query basata sulle due tabelle, nella query codCliente lo
prelevo da entrambe le tabelle.
Questo mi consente di aggiornare contemporaneamente le due tabelle.
Poi ho creato una maschera basata sulla query. Quando inserisco un
nuovo record, inserisco codCliente nel campo "proveniente" da
TAB_FATTURE, se il codCliente esiste già
automaticamente mi aggiorna i restanti campi di TAB_CLIENTE (ho
previsto un aggiornamento della casella di testo del codCliente
relativo a TAB_CLIENTI) e poi proseguo nell'inserimento dati nei campi
di TAB_FATTURE.
Se il coCliente non esiste, inserisco i dati nei campi di TAB_CLIENTI e
poi di TAB_FATTURE.
Il problema è con il comando trova.
Se lo attivo sul recordset della query (cioè eseguo la query e poi
attivo il comando trova dal menu modifica) va tutto bene, appare la
finestra "trova e sostituisci"
e posso muovermi come credo, basta inserire un campo e il comando mi
trova il record o i records nella query.
Quando però uso il comando trova con la maschera aperta, a volte la
voce "cerca in" appare inattiva (in grigio) e non posso selezionare il
campo corrente oppure la query. Poi succede che inserendo una voce che
in effetti esiste, il comando trova non la trova, suppongo perchè il
"cerca in" è impostato su un campo corrente che non contiene la voce.
Infatti quando in "cerca in" è attivo, allora non ci sono problemi
perchè posso selezionare il campo o la query.
Ma pechè dalla maschera il "cerca in" a volte è attivo e a volte no
mentre dalla query è sempre attivo?
Grazie Filippo.

 ha scritto nel messaggio
news:1165530838....@16g2000cwy.googlegroups.com...


Ciao Filippo, a mio modesto avviso l'utilizzo del comando trova non è
proprio il massimo della vita.
Non disponi di tutta la flessibilità che un comando ad hoc da te creato che
esegua dei filtri o delle ricerche fra i record ti permetterebbe di fare. I
database infatti hanno nella velocità delle ricerche dei dati i propri punti
di forza!
Pertanto ti suggerisco di vedere sulla guida il comando filter,  ( mi sembra
più semplice da impostare di un complesso find di dao) che ti consente di
filtrare i records delle tue tabelle secondo criteri da te impostati. Non
solo, tale comando ti permette di accedere a tutte le funzioni di ricerca su
stringhe, date o numeri.
In sostanza è l'equivalente del costrutto where di una query, ma lo puoi
applicare dinamicamente alla form attiva.
Se non trovi, riposta che la vediamo insieme.
M

 M
Ciao Ciroteo,
ti ringrazio del consiglio, provo a seguirlo. Suppongo che bebba usare
un'azine aplica filtro.
Do un'occhiata alla guida, se trovo problemi riposto
Ciao e grazie

 ha scritto nel messaggio
news:1165570042....@80g2000cwy.googlegroups.com...


Ciao e grazie
ecco attento l'apply filter a me non piace proprio.
prova magari cosi:
crei una casella di testo non associata magari nell'intestazione della form
poi su evento dopo aggiornamento metti;
me.filteron = true ' attivi il filtro
me.filter="[campoincuivuoiricercare]=" & me.nomecasellatesto
ricorda che se vuoi utilizzare stringhe devi racchiudere tra singoli apici,
mentre le date devi lavorare con i cancelletti. troverai un sacco di post a
riguardo, perchè se il testo contiene apici (tipo: tendine d'achille) ti da
errore, e a me dolore ...
:-)

 ha scritto nel messaggio
news:1165570042....@80g2000cwy.googlegroups.com...


Ciao e grazie


 :-)
dunque, avrei cambiato idea, nel senso che vorei adoperare la
DoCmd.FindRecord come avevi accennato.
Questo perchè con il filtro la maschera filtra appunto i record da
visualizzare, e quindi con un apposito comando occorre annullare il
filtro per recuperare il dominio completo dei record.
Ecco, io vorrei evitare questa necessità poichè il db verrà usato da
molte persone che ne sanno anche meno di me e quindi l'uso dovrebbe
essere al massimo semplificato.
Io quindi ho fatto così: con un bottone apro una maschera MAS_RICERCA
che contiene una casella di testo in cui inserire il valore del
relativo campo. Poi alla chiusura della maschera, l'evento active form
della maschera sottostante esegue la findrecord e... incredibile ma
funziona! (tramite un flag controllo se l'evento acrtiveform è stato
provocato dalla chiusura di MAS_RICERCA)
ora però ho un'altra esigenza: sullo stile del comando trova vorrei
proseguire la ricerca sui record successivi che soddisfano il criterio
di ricerca, ma per far ciò devo evitare la chiusura di MAS_RICERCA. E
qui nasce il problema: come facio ad eseguire la DoCmd.FindRecord
per la maschera sottostante e non per quella corrente?
Grazie ancora Filippo.

> devi riferirti correttamente alle maschere
Forms!NomeMaschera!nomecontrolloincuicercare
oppure se vuoi rendere variabile il nome maschera per riutilizzare la frm
ricerca in più punti dell'applicazione
Forms("NomeMaschera")!nomecontrolloincuicercare
se è in sottomaschera
 Forms!Nomemaschera!NomeSottomaschera.form!nomecontrolloincuicercare
Grazie ancora Filippo.

ciroteo (nospam) ha scritto:
hai ragione, aprire un'altra maschera non semplifica la vita... allora
ho fatto come mi hai suggerito pqualche post fa, ho messo una cvasella
di testo non associata nella form adibita per l'inserimento del campo
da cercare. Poi con un bottone eseguo la ricerca
Però volevo continuare ad usare la DoCmd.Findrecord.
La sintassi che uso è
DoCmd.FindRecord "222222"
(i campi facoltativi sono omessi)
dovrebbe andare a cercare il record con il campo "222222".
Narturalmente andrà inserita una variabile al posto della costante, ma
sono a fare le prove dirette perchè la DoCmd.FindRecord non vuol
funzionare.
Infatti quando viene eseguita mi da il seguente errore:
"Errore di run time 2162. L'esecuzione di una macro impostata ad una
delle proprietà del campo corrente non è riuscita per un errore
dell'argomento dell'azione TovaReord"
Il tasto con il punto "?" è inattivo e non posso saperne di più.
Ma ho il sospetto che dipèenda dal fatto che la form è impostata su
una query inverce che su una tabella...
Pe usare il find che dicevi occorre aprire il db,  irecordset ecc.. ma
non si va un pò nel complicato  :-(
Grazie...

 ha scritto nel messaggio
news:1165677448.3...@n67g2000cwd.googlegroups.com...
ciroteo (nospam) ha scritto:

DoCmd.FindRecord "222222"



cìao ora sono di corsa prvoa una roba del genere..
(da verificare) su dopo aggiornamento della casella combinata o del campo
testo ...
Dim rst As dao.Recordset
Set rst = Me.RecordsetClone
rst.FindFirst ("[nome_controllo]'" = Me.CasellaCombinata9 & "'")

 rst.FindFirst ("[nome_controllo]'" = Me.CasellaCombinata9 & "'")
mi da errore: impossibile trovare il membro dati o il metodo , e fa
vedere evidenziato il findFirst.
Vabbè non posso romperti ad ogni prova che va storta, cerco di
documentarmi un pù sui dao e poi ti faccio risapere. razie ancora.
Filippo.

 ha scritto nel messaggio
news:1165705412....@f1g2000cwa.googlegroups.com...


come ti accennavo deve essere un problema di virgolette ( o meglio apici)
se si tratta di una stringa la variabile o il riferimento al campo va
racchiuso tra apici semplici, se si tratta di una variabile numerica non
servono.
se invece hai a che fare con delle date racchiudi la variabile tra
cancelletto.
Fai bene a documentarti, se fai una ricerca nei post precedenti attraverso
google gruppi troverai sicuramente risposte più esaustive delle mie! :-)
buona domenica
M