Newsgroup: it.comp.appl.access
Titolo: Aiuto! Form, e quel requery che la fa sparire inesorabilmente!

     Ciao a tutti ragazzi esperti e non.
     Ho un problema con una maschera che uso per effettuare un riepilogo:
la suddetta maschera visualizza i campi presenti in una query, mediante il
passaggio di alcuni parametri.
     In poche parole, inserendo una data in un campo non associato, e poi
lanciando un requery, posso visualizzare tutte le fatture emesse nel periodo
da me indicato.
tutto funziona correttamente, se non fosse che per il piccolo, classico
inconveniente. I più smaliziati sicuramente avranno già capito a cosa mi
riferisco.
     Per chi non ha voglia ne tempo di perdersi in indovinelli :-P dirò
subito che, nel momento in cui nel momento in cui inserisco un valore nel
campo non associato, che non è presente nemmeno nella query, e subito dopo
lancio il requery, la maschera sparisce.
     Ho provato in tutti i modi (da me conosciuti) e con tecniche
alchimistiche (ed estremamente ingarbugliate) ad ottenere anche solo un
messaggio d'errore intercettabile per impedire che la maschera scompaia, ma
tutto ciò che in una normale form funziona, nel momento in cui viene aperta
e viene trovata vuota (metodo EOF), in questo caso risulta inutile.
     Qualcuno di voi sa darmi un consiglio in merito?
     Premetto che, da bravo frequentatore di newsgroup, prima di rompervi
le... hem... scatole, ho già spulciato altre discussioni precedenti a questa
ed ho anche dato una buona occhiata al sito comune... senza esiti degni di
nota purtropo :-(
    Grazie a TUTTI coloro che vorranno perdere qualche buon minutino per
aiutarmi.

 ha scritto nel messaggio
news:9ifuti$o4q$1...@usenet.inwind.it...

Puoi inviare il codice incriminato?
Ciao.


Il codice è il seguente ed è proprio quello che tu hai suggerito a "Gigino"
qualche mess fa (Oggetto: maschera Vuota)
stDocName = "Elenco_Fatture per_Cliente"
DoCmd.Echo False
DoCmd.OpenForm stDocName
If Forms(stDocName).RecordsetClone.EOF Then
            DoCmd.Close acForm, stDocName
        End If
Else
        Forms(stDocName).SetFocus
End If
DoCmd.Echo True
    La maschera in cui effettuo la ricerca si chiama appunto
Elenco_Fatture_per_Cliente e al suo interno contiene una sottomaschera con
l'elenco di tutte le fatture emesse per quel cliente (ma la sottomaschera
non ci importa in questo momento).
    Io, mediante una maschera di popup che vado a richiamare con un
pulsante, inserisco i dettagli sui quali voglio eseguire una ricerca nella
maschera principale.
   In pratica voglio cercare un cliente specifico passando dei parametri
(spero di essere stato chiaro fin qui). Allora inserisco i miei dati nella
maschera di popup "Cerca" e poi avvio un requery passando prima i dati che
voglio cercare dalla maschera di popup "cerca" all'elenco delle fatture.
    E fin qui tutto ok. Però, se inserisco dei dati inesistenti (per
esempio, un cliente che non esiste) e poi passo i dati alla maschera EFpC,
questa mi diventa completamente vuota. Sparisce tutto. Allora io avevo
pensato che, infilando dopo il requery l'istruzione che avevi suggerito a
Gigino, tale istruzione avrebbe intercettato la maschera vuota e io avrei
così potuto gestire l'errore.
   Invece l'istruzione non vede la maschera vuota (eppure è strano, l'ho
usata per aprire una maschera senza dati ed ha funzionato benissimo) e io mi
ritrovo con la finestra Cerca ancora aperta e una maschera completamente
vuota sotto. Anche qui la cos potrebbe andarmi bene visto che ho inserito un
comando nella maschera cerca che può comunque annullare i criteri e
ripristinare la visualizzazione di tutti i record.
   Il Problema, però, sta nel fatto che ho dovuto necessariamente inserire
anche il tasto "chiudi", nella maschera di ricerca. Così se qualcuno cerca
un cliente, una società, un nome, una partita iva o un codice fiscale (la
maschera cerca contiene 5 campi che mi permettono di fare una ricerca
multipla inserendo da 1 a 5 parametri, anche parziali) inesistente e la
maschera si svuota, dopo di che chiude per errore la maschera, resta
bloccato.
   In poche (?!?) parole ti ho spiegato la situazione. Tu come la
risolveresti? Io non so più come muovermi. Anche perché adesso Access si
rifiuta persino di compilarmi l'mdb in mde! Ma perché???? Mi dicesse almeno
dove sta il problema.
   Dipenderà forse dal fatto che nel mio Db uso una ocx che non viene
installata di default da office e che ho dovuto aggiungere io?
    Ciao Sergio. Spero davvero che i questo mucchio di parole tu riesca a
capirci qualcosa :-)


Io ti chiedevo tutto il codice incriminato non solo la parte suggerita da
me...
Ciao.

 ha scritto nel messaggio
news:9iike2$s1m$1...@usenet.inwind.it...

GIGIGNO voleva aprire una maschera e controllare se era vuota o no, non si
parlava di requery. Mentre tu fai riferimento al requery e non ne ho trovato
traccia nel codice che mi hai inviato; se ho capito bene tu hai una maschera
popup, dove inserisci dei dati, che utilizzi per filtrare un'altra maschera
che può essere già aperta o da aprire. se è così non c'è bisogno di un
requery per aggiornare i dati della maschera, basta che gli passi la
condizione where al docmd.openform
Es.
'----------
stDocName = "Elenco_Fatture per_Cliente"
stLinkCriteria = "stringa condizione where senza la parola where"
DoCmd.Echo False
DoCmd.OpenForm stDocName, , , stLinkCriteria
If Forms(stDocName).RecordsetClone.EOF Then
            DoCmd.Close acForm, stDocName
        End If
Else
        Forms(stDocName).SetFocus
End If
DoCmd.Echo True
'----------
Ciao

"Sergio MAZZA" ha scritto

Ciao Sergio
Scusa se non ti ho risposto subito, costringendoti così ad un lavoro di
immaginazione su quello che poteva essere il mio problema. Per questo ti
ringraizo subito per l'interessamento:
Ti spiego meglio come funzionano le maschere:
Io ho la maschera "Elenco_Fatture per_Cliente"
All'interno di questa maschera ci sono 5 campi non associati che mi servono
per passare dei valori alla query contenuta nella maschera. Se non inserisco
nessun valore in questi campi, la maschera mi mostra tutti i record.
Inserendo dei valori in quei campi, la maschera mi mostra i record che
soddisfano le mie richieste (Società, Cognome, Nome, PI, CF).
Per complicarmi la vita, e per liberare un po' di spazio sulla maschera
"Elenco_Fatture per_Cliente", ho creato una seconda maschera di popup che ho
chiamato "Cerca". Questa maschera contiene 5 campi identici a quelli
contenuti nella maschera "Elenco_Fatture per_Cliente". Allo stesso tempo ho
rimpicciolito e nascosto i 4 campi principali sulla maschera "Elenco_Fatture
per_Cliente". A questo punto quando apro la maschera "Elenco_Fatture
per_Cliente" vedo sempre tutti i record. Se invece devo fare una ricerca,
apro la maschera cerca, inserisco i dati che voglio ricercare , e poi copio
i dati dalla maschera di popup ai campi nascosti nella maschera
"Elenco_Fatture per_Cliente" con queste poche istruzioni:
Forms![Elenco_Fatture per_Cliente].Form!CercaSocietà = Forms![Cerca]!Società
 Forms![Elenco_Fatture per_Cliente].Form!CercaCognome =
Forms![Cerca]!Cognome
  Forms![Elenco_Fatture per_Cliente].Form!CercaNome = Forms![Cerca]!Nome
   Forms![Elenco_Fatture per_Cliente].Form!CercaPI = Forms![Cerca]!PI
    Forms![Elenco_Fatture per_Cliente].Form!CercaCF = Forms![Cerca]!CF
     Forms![Elenco_Fatture per_Cliente].Requery
Una volta passati i dati è necessario fare un requery della maschera in modo
da permettere alla query di ricaricare i dati, considerando però le mie
richieste questa volta.
Con questo metodo un po' ingarbugliato riesco a fare delle ricerche molto
precise e su uno o + valori contemporaneamente.
Il problema è però sempre lo stesso. Se inserisco un solo valore che non
esiste, la maschera si svuota completamente e appare una maschera amorfa.
Se, per esempio ho il cliente Bianchi e il cliente Rossi, e io cerco il
cliente Neri (o anche Ner), e queste lettere non esistono nella tabella,
tutto si svuota.
Secondo te come faccio a gestire quest'errore, segnalando che il
cliente/cognome/nome/pi/cf non è stato trovato, senza far sparire tutto?
Anche perché, la maschera di popup "Cerca" non si chiude automaticamente,
subito dopo la ricerca, per dare modo all'utente di raffinare ulteriormente
la ricerca, dopo un primo avvio. La maschera cerca ha la possibilità di
mostrare nuovamente tutto svuotando i campi di ricerca:
Forms![Elenco_Fatture per_Cliente].Form!CercaSocietà = Null
 Forms![Elenco_Fatture per_Cliente].Form!CercaCognome = Null
  Forms![Elenco_Fatture per_Cliente].Form!CercaNome = Null
   Forms![Elenco_Fatture per_Cliente].Form!CercaPI = Null
    Forms![Elenco_Fatture per_Cliente].Form!CercaCF = Null
     Forms![Elenco_Fatture per_Cliente].Requery
(e così facendo i dati nella maschera ricompaiono) e ha la possibilità,
ovviamente, di essere chiusa.
Anche solo impedire che la maschera di popup venga chiusa se la maschera
"Elenco_Fatture per_Cliente" risulta vuota mi andrebbe bene. Inserendo
subito dopo il requery il codice che ti ho postato nella mail precedente:
stDocName = "Elenco_Fatture per_Cliente"
DoCmd.Echo False
' Passo i parametri di ricerca alla query
  Forms![Elenco_Fatture per_Cliente].Form!CercaSocietà =
Forms![Cerca]!Società
   Forms![Elenco_Fatture per_Cliente].Form!CercaCognome =
Forms![Cerca]!Cognome
    Forms![Elenco_Fatture per_Cliente].Form!CercaNome = Forms![Cerca]!Nome
     Forms![Elenco_Fatture per_Cliente].Form!CercaPI = Forms![Cerca]!PI
      Forms![Elenco_Fatture per_Cliente].Form!CercaCF = Forms![Cerca]!CF
    ' Ricarico la query con i parametri da me passati
       Forms![Elenco_Fatture per_Cliente].Requery
' La maschera è vuota?
  If Forms(stDocName).RecordsetClone.EOF Then
    ' Si - Mostro nuovamente tutti i record
        msgbox "non ci sono corrispondenze nei criteri di ricerca"
            Forms![Elenco_Fatture per_Cliente].Form!CercaSocietà = Null
             Forms![Elenco_Fatture per_Cliente].Form!CercaCognome = Null
              Forms![Elenco_Fatture per_Cliente].Form!CercaNome = Null
               Forms![Elenco_Fatture per_Cliente].Form!CercaPI = Null
                Forms![Elenco_Fatture per_Cliente].Form!CercaCF = Null
                 Forms![Elenco_Fatture per_Cliente].Requery
                  End If
  Else
    ' No - Passo il controllo alla finestra
         Forms(stDocName).SetFocus
End If
DoCmd.Echo True
non è servito a niente. Anzi, sia che la maschera risulti piena (quindi la
ricerca è andata a buon fine", sia che la maschera risulti vuota (Quindi non
ho trovato corrispondenze nella maschera), il codice mi dice sempre che la
maschera è vuota.
Tu che ne pensi?
--
____________________________________________________________________________
Norma di finnagle
Tutti gli esperimenti devono essere perfettamente riproducibili e fallire
tutti allo stesso modo.
____________________________________________________________________________
Togli nemo per risposte via e-mail


Azz! Che ingarbugliamento!
Prova ad inserire:
'-------------
Forms(stDocName).RecordsetClone.MoveLast
Forms(stDocName).RecordsetClone.MoveFirst
'-------------
prima di:
'-------------
Forms(stDocName).RecordsetClone.EOF
'-------------
Ciao.


OK
Provo e ti fo sapere :-)


 perchč? Esiste un modo + semplice per risolvere il problema?
Ci puoi scommettere il... Caschetto con le ali!
Esistono tanti modi per fare quello che vuoi fare tu (maschera utilizzata
per filtrare un'altra maschera); un esempio č proprio quello che ti avevo
proposto in precedenza:
Es.
'----------
stDocName = "Elenco_Fatture per_Cliente"
stLinkCriteria = "stringa condizione where senza la parola where"
DoCmd.Echo False
DoCmd.OpenForm stDocName, , , stLinkCriteria
If Forms(stDocName).RecordsetClone.EOF Then
            DoCmd.Close acForm, stDocName
        End If
Else
        Forms(stDocName).SetFocus
End If
DoCmd.Echo True
'----------
E' chiaro che il codice lo devi riadattare alle tue esigenze, ma con poche
righe e sopratutto senza crearti controlli non associati sulla maschera
"Elenco_Fatture per_Cliente" puoi filtrarla ugualmente.
Poi sicuramente avrai le tue ragioni a fare come dici tu...
Ciao.