Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Metodo Item dell'oggetto Form non riuscito

408 views
Skip to first unread message

Alfabex

unread,
Jun 17, 2003, 12:53:56 PM6/17/03
to
Ciao Ragazzi,
Stavo eseguendo la mia funzione per controllare se una mia maschera era
"Aperta" e Vb si è bloccato su questa istruzione:

If Forms(strNomeDellaMaschera).CurrentView <>
conVisualizzazioneStruttura Then
Aperta = True

Segnalandomi errore di debug; se controllo il valore delle mie variabili
vedo che sono tutte valorizzate ma sull'istruzione
"(strNomedellaMaschera).CurrentView" mi indica: "Metodo Item dell'oggetto
Form non riuscito"
cosa vuol dire?
La stessa funzione la uso in altre maschere e funziona correttamente
grazie dell'aiuto
Ciao
Stefano


Antonio Biso

unread,
Jun 17, 2003, 12:57:29 PM6/17/03
to
"Alfabex" <alf...@libero.it> ha scritto nel messaggio
news:EIHHa.98854$lK4.2...@twister1.libero.it...

Mai visto questo modo di procedere.
Normalmente per le form si deve intercettare l'errore provocato dal
tentativo di riferimento ad una maschera non aperta e quello ti fa decidere
se è aperta o meno.

Antonio


Alfabex

unread,
Jun 17, 2003, 1:03:01 PM6/17/03
to

"Antonio Biso" <ch...@etruria.net> ha scritto nel messaggio
news:ZLHHa.98870$lK4.2...@twister1.libero.it...

> "Alfabex" <alf...@libero.it> ha scritto nel messaggio
> news:EIHHa.98854$lK4.2...@twister1.libero.it...
> > Ciao Ragazzi,
> > Stavo eseguendo la mia funzione per controllare se una mia maschera era
> > "Aperta" e Vb si č bloccato su questa istruzione:

> >
> > If Forms(strNomeDellaMaschera).CurrentView <>
> > conVisualizzazioneStruttura Then
> > Aperta = True
> >
> > Segnalandomi errore di debug; se controllo il valore delle mie variabili
> > vedo che sono tutte valorizzate ma sull'istruzione
> > "(strNomedellaMaschera).CurrentView" mi indica: "Metodo Item
dell'oggetto
> > Form non riuscito"
> > cosa vuol dire?
> > La stessa funzione la uso in altre maschere e funziona correttamente
> > grazie dell'aiuto
>
> Mai visto questo modo di procedere.
> Normalmente per le form si deve intercettare l'errore provocato dal
> tentativo di riferimento ad una maschera non aperta e quello ti fa
decidere
> se č aperta o meno.
>
> Antonio
>
>
Ti riporto di seguito la mia funzione completa, forse saro' un po' piů
chiaro

Public Function Aperta(ByVal strNomeDellaMaschera As String) As Boolean
'Restituisci True se la maschera specificata č aperta in visualizzazione
struttura'
Const conVisualizzazioneStruttura = 0
Const conStatoOggettoChiuso = 0
Aperta = False
If SysCmd(acSysCmdGetObjectState, acForm, strNomeDellaMaschera) <>
conStatoOggettoChiuso Then


If Forms(strNomeDellaMaschera).CurrentView <>
conVisualizzazioneStruttura Then
Aperta = True

End If
End If
End Function

ciao Stefano


@Alex

unread,
Jun 17, 2003, 2:33:07 PM6/17/03
to

"Alfabex" <alf...@libero.it> ha scritto nel messaggio
news:9RHHa.98888$lK4.2...@twister1.libero.it...


Per determinare se č aperta io uso questa:

Public Function IsLoaded(ByVal strFormName As String) As Integer
'*****************************************************************
'Name : IsLoaded (Function)
'Purpose : Verifie if Form passed is already OPEN
'Called by :
'Calls :
'Inputs : String=Form.Name
'Output : Return True if Form is Open
'*****************************************************************
Const conObjStateClosed = 0
Const conDesignView = 0
If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <>
conObjStateClosed Then
If Forms(strFormName).CurrentView <> conDesignView Then
IsLoaded = True


End If
End If
End Function


Saluti
@Alex.


Alfabex

unread,
Jun 18, 2003, 10:58:03 AM6/18/03
to

"@Alex" <ik2...@libero.it> ha scritto nel messaggio
news:D9JHa.99233$lK4.2...@twister1.libero.it...
Ciao Alex,
ho provato anche la tua Funzione, ma l'errore che mi segnala in fase di
Debug č lo stesso ..... che cosa sto' sbagliando???


@Alex

unread,
Jun 18, 2003, 4:35:16 PM6/18/03
to

"Alfabex" <alf...@libero.it> ha scritto nel messaggio
news:%5%Ha.99041$Ny5.2...@twister2.libero.it...
>
[CUT]

Che versione di Access stai usando...???
Sicuramente o 2000 o XP.
Credo pertanto che non hai settato i riferimenti alle Librerie DAO.

Dal modulo VBA vai in Strumenti--Riferimenti e cerca DAO 3.6 o similari...!

@Alex.


Alfabex

unread,
Jun 19, 2003, 10:55:56 AM6/19/03
to

"@Alex" <ik2...@libero.it> ha scritto nel messaggio
news:824Ia.99976$Ny5.2...@twister2.libero.it...
Avevi ragione, non avevo abilitato i riferimenti a DAO 3.6 Object Library
ma anche dopo aver abilitato questo, mi da' lo stesso identico messaggio, mi
manca qualcos'altro? grazie per la collaborazione, ciao Stefano


Alessandro Cara

unread,
Jun 19, 2003, 11:06:08 AM6/19/03
to
Alfabex wrote:
>
[cut]

> >
> >
> Avevi ragione, non avevo abilitato i riferimenti a DAO 3.6 Object Library
> ma anche dopo aver abilitato questo, mi da' lo stesso identico messaggio, mi
> manca qualcos'altro? grazie per la collaborazione, ciao Stefano
scusami ma come fa a darti lo stesso errore se hai usato la funzione suggerita
da alex?
Che ti dia errore sul metodo item ci sta tutto se tu cerchi di accedere ad una
collezione (insieme) con una chiave che non esiste.

Vuoi proprio usare il metodo item?:

on error resume next
set x = insieme("key")
if err.number <> 0 then msgbox "l'item 'un c'e'"
on error goto 0

--
a.cara
Togli qualcosa dall'email

Alfabex

unread,
Jun 19, 2003, 11:17:05 AM6/19/03
to

"Alessandro Cara" <alexqu...@blunet.it> ha scritto nel messaggio
news:3EF1D160...@blunet.it...


io farei anche a meno di usare il metodo item (che è sto' metodo item?)
e la tua funzione la devo mettere in coda alla funzione isloaded (quella di
alex) o in coda alla routine in cui controllo se la mia maschera è aperta?
......... scusami ma sto' cercando di imparare 'da solo' (con qualche libro
e rompendo nel ng) ad utilizzare il codice vb in access ..........
grazie della pazienza ciao Stefano


Alessandro Cara

unread,
Jun 19, 2003, 12:43:38 PM6/19/03
to

non e' un "o" e' un "invece"
ricapitoliamo:

1) Un insieme (collezione) e' una specie di array che ha un metodo di default
che si chiama "item" (secondo me e' piu' una proprieta' che un metodo) quando
scrivi insieme("key") e' come se scrivessi insieme.item("Key")
2) l'insieme forms e' appunto un insieme
3) l'insieme si puo' scorrere (tutti gli insiemi hanno una proprieta' "count"
predefinita)
4) si puo' accedere direttamente ad un "item" (voce) attraverso una chiave di
ricerca
5) quando si accede direttamente e la voce non c'e' (non c'e' quella chiave
ricercata) si "becca" orrore (proprio orrore non e' un refuso)
6) Sull'insieme "forms" ci sono solo le forms "aperte" e quindi se cerchi una
maschera che non e' stata aperta "becchi" l'orrore di cui sopra

a questo punto o:
1) usi la routine suggerita da Alex che usa un altro comando appositamente
definito per tale bisogna (e non solo quella, riferita alla bisogna)

oppure

2) intercetti l'errore attraverso la gestione della "resume next" ed il relativo
ripristino della gestione, sempre dell'errore, attraverso il "goto 0"

@Alex

unread,
Jun 19, 2003, 12:51:32 PM6/19/03
to

"Alfabex" <alf...@libero.it> ha scritto nel messaggio
news:RtkIa.104828$lK4.2...@twister1.libero.it...

>
> "Alessandro Cara" <alexqu...@blunet.it> ha scritto nel messaggio
> news:3EF1D160...@blunet.it...
> > Alfabex wrote:
> > >
> > [cut]
> > > >
> > > >
> > > Avevi ragione, non avevo abilitato i riferimenti a DAO 3.6 Object
> Library
> > > ma anche dopo aver abilitato questo, mi da' lo stesso identico
> messaggio, mi
> > > manca qualcos'altro? grazie per la collaborazione, ciao Stefano
> > scusami ma come fa a darti lo stesso errore se hai usato la funzione
> suggerita
> > da alex?

[CUT]


>
> io farei anche a meno di usare il metodo item (che è sto' metodo item?)
> e la tua funzione la devo mettere in coda alla funzione isloaded (quella
di
> alex) o in coda alla routine in cui controllo se la mia maschera è aperta?
> ......... scusami ma sto' cercando di imparare 'da solo' (con qualche
libro
> e rompendo nel ng) ad utilizzare il codice vb in access ..........
> grazie della pazienza ciao Stefano
>

In realtà ci è sfuggita una cosa, nel senso che non basta abilitare DAO,
ma come sempre se non la si mette prima di ADO va esplicitato il
riferimento a DAO nel Codice.
Pertanto se puoi, o meglio se non ti crea problemi con l'applicativo
deseleziona ADO, seleziona DAO e riseleziona ADO, e dovrebbe
andare, in alternativa credo dovrai usare ADO anche per verificare
se la Form è aperta in visualizzazione xxx ma ovviamente non è la
proprietà CurrentView......!

@Alex.


Alfabex

unread,
Jun 19, 2003, 4:21:08 PM6/19/03
to

> In realtà ci è sfuggita una cosa, nel senso che non basta abilitare DAO,
> ma come sempre se non la si mette prima di ADO va esplicitato il
> riferimento a DAO nel Codice.
> Pertanto se puoi, o meglio se non ti crea problemi con l'applicativo
> deseleziona ADO, seleziona DAO e riseleziona ADO, e dovrebbe
> andare, in alternativa credo dovrai usare ADO anche per verificare
> se la Form è aperta in visualizzazione xxx ma ovviamente non è la
> proprietà CurrentView......!
>
> @Alex.
>

Ho provato quanto mi hai detto ma l'errore mi viene segnalato lo stesso, non
più nella funzione isloaded, ma nella routine di controllo (che riporto di
seguito):

Private Sub Form_Current()
If IsLoaded("ArticoliPrezzi") Then
Forms!ArticoliPrezzi.Filter = "[Articolo.ID] = " & Nz([Articolo], 0)
End If
End Sub

il campo [Articolo] fà riferimento alla maschera RigaDocAcquisti (form
corrente), mentre la maschera ArticoliPrezzi è creata da una query tra la
tabella Articolo in cui ho il campo ID e la tabella Listino2.
Se visualizzo le proprietà della maschera ArticoliPrezzi vedo che il filtro
è impostato su [Articolo.ID] = 2


@Alex

unread,
Jun 19, 2003, 5:53:11 PM6/19/03
to

"Alfabex" <alf...@libero.it> ha scritto nel messaggio
news:UWoIa.103052$Ny5.2...@twister2.libero.it...

Beh, buon segno, significa che abbiamo risolto il problema.......!
Ora ne hai un'altro che mi pare sia di differente natura.
Sinceramente mi pare ci sia un pò di difficoltà a livello di Sintassi
a capire quale sia la Tbl e il Controllo di riferimento.
Se avessi usato la standardizzazione per la nomenclatura degli oggetti
avrei meno difficoltà a capire.
Suppongo possa essere così:

Private Sub Form_Current()
If IsLoaded("ArticoliPrezzi") Then

Forms!ArticoliPrezzi.Filter = "[ID] = " & Nz(Me.Articolo, 0)
Forms!ArticoliPrezzi.FilterOn=true
End If
End Sub

Ciao @Alex.


0 new messages