Help Maschera Access 2003

martedì 11 dicembre 2007 - 13.33

salinis Profilo | Junior Member

In una maschera di access dopo che eseguo una query di accodamento vorrei che tutti i campi della maschera stessa fossero vuoti così posso procedere ad un nuovo inserimento che sarà effettuato sempre tramite la query.

Grazie

alpanix Profilo | Junior Member

>In una maschera di access dopo che eseguo una query di accodamento
>vorrei che tutti i campi della maschera stessa fossero vuoti
>così posso procedere ad un nuovo inserimento che sarà effettuato
>sempre tramite la query.

fai un loop sulla maschera e svuota tutti i controlli in essa contenuti
questo puoi farlo semplicemente tramite un ciclo "For Each.. Next"
dandogli in pasto la maschera e dichiarando all'inizio della routine una variabile Object puoi attribuire il valore Null a tutti i campi testo e caselle combinate
ecco l'esempio

Private Sub ... ()

' Qui dichiaro la variante Oggetto
Dim oggetto As Object

' E inizio il ciclo per ogni oggetto sull'insieme "Me", la maschera in questo momento attiva
For Each oggetto In Me

' Se l'oggetto è un combo o un textbox lo svuoto
If oggetto.ControlType = acTextBox Or _
oggetto.ControlType = acComboBox Then
oggetto = Null
End If

Next oggetto

End Sub


>Grazie

prego


AlPanix

salinis Profilo | Junior Member

Se la Maschera si chiama Articoli. All'interno della maschera ho campo1, campo2, campo3....campo10. La stringa da te indicata come la scrivo?


Grazie

alpanix Profilo | Junior Member

>Se la Maschera si chiama Articoli. All'interno della maschera
>ho campo1, campo2, campo3....campo10. La stringa da te indicata
>come la scrivo?

quella che ti ho scritto è universale
l'insieme "Me", nel caso tu sia sulla maschera "Articoli", è la maschera "Articoli" stessa
si usa "Me" per indicare la maschera attiva in questo momento
nel momento in cui stai lavorando sulla maschera "Articoli", "Me" è solo un'abbreviazione di "Forms!Articoli"
avrei potuto scrivere "For Each oggetto In Forms.Articoli", ma ho preferito scrivere meno , tanto le due istruzioni corrispondono..


la definizione della variante "oggetto As Object", allo stesso modo, acquisisce tutte le caratteristiche dell'oggetto a cui è riferita
praticamente il ciclo "For Each.. Next" fa questo:
si muove sul primo oggetto presente sulla maschera "Me" (che nel tuo caso è la maschera "Articoli"), lo sposta nella variante oggetto e ne controlla la tipologia
nel caso sia un textbox o un combobox lo svuota
poi passa al secondo oggetto e ripete il controllo e casomai lo svuotamento
poi al terzo e così via fino a che non ci sono più oggetti da controllare
tra gli oggetti ci sono combobox, textbox, etichette di testo, caselle di riepilogo, pulsanti di comando.. cioè tutto quello che sta sulla maschera


>Grazie
prego


AlPanix

salinis Profilo | Junior Member

Ho copiato tra le proprietà della maschera "su corrente" questa stringa :

' Qui dichiaro la variante Oggetto
Dim oggetto As Object

' E inizio il ciclo per ogni oggetto sull'insieme "Me", la maschera in questo momento attiva
For Each oggetto In Me

' Se l'oggetto è un combo o un textbox lo svuoto
If oggetto.ControlType = acTextBox Or _
oggetto.ControlType = acComboBox Then oggetto = Null

End If

Next oggetto

All' apertura mi genera un errore cioè non è possibile assegnare un valore all' oggetto.

In che cosa sbaglio ? La stringa è corretta? Va assegnata su proprietà della maschera o su un comand specifico ?


Grazie

alpanix Profilo | Junior Member

>Ho copiato tra le proprietà della maschera "su corrente" questa
>stringa :
>
>' Qui dichiaro la variante Oggetto
>Dim oggetto As Object
>
>' E inizio il ciclo per ogni oggetto sull'insieme "Me", la maschera
>in questo momento attiva
>For Each oggetto In Me
>
>' Se l'oggetto è un combo o un textbox lo svuoto
>If oggetto.ControlType = acTextBox Or _
>oggetto.ControlType = acComboBox Then oggetto = Null
>
>End If
>
>Next oggetto
>
>All' apertura mi genera un errore cioè non è possibile assegnare
>un valore all' oggetto.
>
>In che cosa sbaglio ? La stringa è corretta? Va assegnata su
>proprietà della maschera o su un comand specifico ?
non assegnare la serie di comandi all'evento "Su corrente"
se hai un pulsante che inserisce il record sulla tabella, assegnalo all'evento "Click" di quel pulsante
altrimenti, lasciandolo associato all'evento "Su corrente", ogni volta che ti muoverai tra i records, avrai tutti i campi vuoti
i controlli sulla tua maschera sono tutti "Non associati"?


>Grazie
prego

AlPanix

salinis Profilo | Junior Member

i controlli sulla maschera sono tutti non associati.

la stringa da te indicata lo inserita nel pulsante di comando "inserisci" (mi lancia la query di accodamento) pero' mi genera un errore: "Errore di run-time " 2448" Impossibile assegnare un valore all'oggetto"

Come posso risolvere il problema?

alpanix Profilo | Junior Member

>i controlli sulla maschera sono tutti non associati.

perfetto


>la stringa da te indicata lo inserita nel pulsante di comando
>"inserisci" (mi lancia la query di accodamento) pero' mi genera
>un errore: "Errore di run-time " 2448" Impossibile assegnare
>un valore all'oggetto"
>
>Come posso risolvere il problema?

per saperlo dovrei vedere la maschera e i suoi controlli
puoi mandare un mdb leggero d'esempio?

AlPanix

salinis Profilo | Junior Member

Ti invio in allegato un db come esempio.

Avrei la necessità di risolvere il problema di svuotare le caselle di controllo dopo l' inserimento di un record.

Dovrei sullo stesso db abilitare un campo che alla scadenza della garanzia mi disabilita il Si e si attiva in automatico il NO.
A 30 giorni dalla scadenza mi si attiva una finestra allert che mi avvisa della scadenza della garanzia.

Come posso risolvere queste problematiche?

Grazie in anticipo per l' aiuto!!!

alpanix Profilo | Junior Member

il messaggio d'errore esce dal momento che il campo ElencoMatricole è associato
quanto segue risolve il tuo problema:

[...]
Dim oggetto As Object

' E inizio il ciclo per ogni oggetto sull'insieme "Me", la maschera in questo momento attiva
For Each oggetto In Me

' Se l'oggetto è un combo o un textbox lo svuoto
If oggetto.ControlType = acTextBox Or _
oggetto.ControlType = acComboBox Then
' Se l'oggetto non è associato lo svuoto, altrimenti lo lascio com'è
If oggetto.ControlSource = "" Then
oggetto = Null
End If
End If

Next oggetto
[...]


AlPanix

salinis Profilo | Junior Member

OK perfetto funziona...


Mi potresti dare una mano sul db che ti ho inviato come allegato per automatizzare il controllo sulla garanzia e sulla finestra messaggio per avvisare 1 mese prima della scadenza?


Grazie

alpanix Profilo | Junior Member

>Dovrei sullo stesso db abilitare un campo che alla scadenza della
>garanzia mi disabilita il Si e si attiva in automatico il NO.

questo devi metterlo sull'evento "Su corrente" della maschera
devi eseguire un controllo sulla data di scadenza della garanzia e porre a False la casella di controllo "Garanzia Sì" e a True la casella di controllo "GaranziaNo"



>A 30 giorni dalla scadenza mi si attiva una finestra allert che
>mi avvisa della scadenza della garanzia.

io creerei una maschera con un oggetto solo: una casella di riepilogo basata su una query del tipo:
SELECT * FROM tblArticoli WHERE (([DataScadenzaGaranzia]-30) = Fix(Now()))
il che ti elencherà solo gli articoli con scadenza pari a 30 giorni dalla data corrente
se poi vuoi che questa finestra si visualizzi solamente quando ci sono effettivamente articoli in prossima scadenza, allora nell'evento "Su caricamento" dovrai inserire quanto segue:

[...]
' Dichiaro una variabile per il conteggio degli articoli con garanzia in scadenza
Dim Conteggio As Integer

' Valorizzo la variabile contando i records che soddisfano la condizione DataScadenzaGaranzia-30 = Oggi
Conteggio = DCount("IDMatricola", "InventarioH", "[DataScadenzaGaranzia]-30 = Fix(Now())")

' Se non esistono records esco e apro la maschera "login", altrimenti continuo con la normale apertura della maschera
If Conteggio = 0 Then
DoCmd.Close
DoCmd.OpenForm "login"
End If
[...]

fatto ciò, la maschera ti si aprirà solamente se c'è almeno un articolo articoli con garanzia in scadenza


>Grazie in anticipo per l' aiuto!!!

prego

AlPanix

alpanix Profilo | Junior Member

>Mi potresti dare una mano sul db che ti ho inviato come allegato
>per automatizzare il controllo sulla garanzia e sulla finestra
>messaggio per avvisare 1 mese prima della scadenza?

per aggiornare automaticamente le garanzie, creati una query di aggiornamento
questa dovrà modificare il valore del campo FlagGaranzia a 0 se la DataScadenzaGaranzia è oggi
nel dettaglio:

UPDATE InventarioH SET InventarioH.FlagGaranzia = 0 WHERE (((InventarioH.DataScadenzaGaranzia)=Fix(Now())));

naturalmente dovrai chiamare la query da una maschera qualsiasi (meglio sarebbe da quella parincipale)

>Grazie

prego

AlPanix

alpanix Profilo | Junior Member

>OK perfetto funziona...
è vero, funziona, ma nel caso tu non utilizzi il db nel giorno stesso dell'avviso, questo non ti verrà evidenziato
la cosa migliore sarebbe modificare il controllo in modo che ti visualizzi tutti gli articoli che hanno scadenza garanzia tra meno di 31 giorni, cioé (DataScadenzaGaranzia-30 <= Fix(Now()) AND FlagGaranzia = '-1')
il controllo sul Flag devi metterlo, nel caso tu faccia il confronto con l'operatore "<=", perché altrimenti verrebbero visualizzati anche i records già scaduti

AlPanix

salinis Profilo | Junior Member

è vero, funziona, ma nel caso tu non utilizzi il db nel giorno stesso dell'avviso, questo non ti verrà evidenziato
la cosa migliore sarebbe modificare il controllo in modo che ti visualizzi tutti gli articoli che hanno scadenza garanzia tra meno di 31 giorni, cioé (DataScadenzaGaranzia-30 <= Fix(Now()) AND FlagGaranzia = '-1')
il controllo sul Flag devi metterlo, nel caso tu faccia il confronto con l'operatore "<=", perché altrimenti verrebbero visualizzati anche i records già scaduti.


Praticamente sul db cosa dovrei fare?

La mia necessità è che possa visualizzare gli articoli in scadenza senza che io dalla maschera mi selezioni l'articolo. Spero di essere stato chiaro.

alpanix Profilo | Junior Member

>Praticamente sul db cosa dovrei fare?
>
>La mia necessità è che possa visualizzare gli articoli in scadenza
>senza che io dalla maschera mi selezioni l'articolo. Spero di
>essere stato chiaro.

chiarissimo, e quello che ti ho descritto sopra fa proprio questo
ti elenca a video tutti gli articoli che sono in scadenza senza selezionarli dalla maschera
praticamente devi creare una maschera in più che abbia solamente una casella di riepilogo
nella proprietà "Origine Riga" della casella di riepilogo inserisci questo:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

poi:
nella proprietà "Numero colonne" modifica il valore in "7";
nella proprietà "Larghezza colonne" scrivi questo: 0,5 cm;0,5 cm;1 cm;2 cm;2 cm;3 cm;2 cm;
nella proprietà "Larghezza" scrivi "12 cm"

poi edita l'evento "Su caricamento" e mettici il codice sopra riportato
e nell'evento su chiusura il comando: DoCmd.OpenForm "login"

a questo punto hai la tua maschera pronta
adesso questa (e non più il login) dovrà essere la maschera di avvio dell'applicazione

fatto

sulla tua maschera principale (o su una qualsiasi di tuo gradimento), poi, posiziona un pulsante di comando che lanci la query di aggiornamento dei flag garanzia, e il db è a posto
il codice della query lo vedi sopra

AlPanix

salinis Profilo | Junior Member

Qual' è la stringa che devo inserire su caricamento della maschera di riepilogo?

La query update potrebbe essere applicata sull'apertura della maschera? Se si qual'è la stringa che devo inserire?
Vorrei evitare di premere un pulsante per lanciare la query di aggiornamento per modificare il flag della garanzia.


Grazie

alpanix Profilo | Junior Member

>Qual' è la stringa che devo inserire su caricamento della maschera
>di riepilogo?
>La query update potrebbe essere applicata sull'apertura della
>maschera? Se si qual'è la stringa che devo inserire?

sì, puoi farlo
inserisci questo nell'evento "Su caricamento":

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


>Vorrei evitare di premere un pulsante per lanciare la query di
>aggiornamento per modificare il flag della garanzia.

in questo modo lo farà ogni volta che avvierai l'applicazione
in più ti evidenzierà le matricole a cui viene invalidata la garanzia alla data corrente

se non vuoi che queste matricole siano elencat, aggiungi il comando

Elenco0.Requery
dopo il DoCmd.RunSQL ...
e sostituisci "Elenco0" con il nome della casella di riepilogo della maschera


>Grazie

prego


AlPanix

salinis Profilo | Junior Member

E' possibile visualizzare la maschera di riepilogo (che visualizza gli articoli in scadenza) solo nel caso in cui ci sono gli articoli in scadenza altrimenti va avanti con la successiva maschera di login.

grazie

alpanix Profilo | Junior Member

>E' possibile visualizzare la maschera di riepilogo (che visualizza
>gli articoli in scadenza) solo nel caso in cui ci sono gli articoli
>in scadenza altrimenti va avanti con la successiva maschera di
>login.

se hai copiato il codice che ho postato succede proprio questo
nel caso in cui non ci sono prodotti che scadranno entro 30 giorni

If Conteggio = 0 Then DoCmd.Close DoCmd.OpenForm "login" End If

chiude la maschera attuale ed apre la maschera "login"



>grazie

prego

AlPanix
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5