ivan.ti
12-08-2010, 20:05
Buonasera a Tutti...
Sono giorni che mi cimento nella creazione di un database e dopo aver risolto alcuni problemi (non banali per uno che sa poco di programmazione) sono arrivato ad un punto morto.
Il problema riguarda l'utilizzo degli interruttori in una maschera. Mi spiego meglio:
Ho inserito in una maschera 5 interruttori per attivare le 5 maschere collegate, utilizzando la procedura Parent-Child, copiata dal Wizard e successivamente riadattata per le multi-maschere.
Ho scritto lo stesso codice per ogni tanto modificando i vari nomi necessari (NomeInterruttore, NomeMaschera, ecc) ma qui esce il problema.
Due maschere in particolare rimangono sempre su attivate, cioè l'interruttore rimane sempre premuto anche al secondo click che dovrebbe disattivarlo e chiudere la maschera. Il problema però succede solo a 2 di questi 5 interruttori-maschere.
Cosa devo fare?
Qui c'è una parte di codice della maschera principale:
Option Compare Database
Sub Form_Current()
On Error GoTo Form_Current_Err
If ChildFormIsOpen() Then FilterChildForm
If Child1FormIsOpen() Then FilterChild1Form
If Child2FormIsOpen() Then FilterChild2Form
If Child3FormIsOpen() Then FilterChild3Form
If Child4FormIsOpen() Then FilterChild4Form
Form_Current_Exit:
Exit Sub
Form_Current_Err:
MsgBox Error$
Resume Form_Current_Exit
End Sub
Sub addFile_Click()
On Error GoTo addFile_Click_Err
If ChildFormIsOpen() Then
CloseChildForm
Else
OpenChildForm
FilterChildForm
End If
addFile_Click_Exit:
Exit Sub
addFile_Click_Err:
MsgBox Error$
Resume addFile_Click_Exit
End Sub
Private Sub FilterChildForm()
If Me.NewRecord Then
Forms![insertfilerim].DataEntry = True
Else
Forms![insertfilerim].Filter = "[nome] = " & Me.[id_rim]
Forms![insertfilerim].FilterOn = True
End If
End Sub
Private Sub OpenChildForm()
DoCmd.OpenForm "insertfilerim"
If Not Me.[addFile] Then Me![addFile] = True
End Sub
Private Sub CloseChildForm()
DoCmd.Close acForm, "insertfilerim"
If Me![addFile] Then Me![addFile] = False
End Sub
Private Function ChildFormIsOpen()
ChildFormIsOpen = (SysCmd(acSysCmdGetObjectState, acForm, "insertfilerim") And acObjStateOpen) <> False
End Function
In questa prima parte c'è il richiamo del form e del primo interruttore funzionante, ovviamente c'è una ripetizione con Child1 Child2 ecc cambiando i relativi dati. Il problema però c'è con Child2 e Child4, ma non capisco perchè avendo copiato ed incollato.
Grazie
Sono giorni che mi cimento nella creazione di un database e dopo aver risolto alcuni problemi (non banali per uno che sa poco di programmazione) sono arrivato ad un punto morto.
Il problema riguarda l'utilizzo degli interruttori in una maschera. Mi spiego meglio:
Ho inserito in una maschera 5 interruttori per attivare le 5 maschere collegate, utilizzando la procedura Parent-Child, copiata dal Wizard e successivamente riadattata per le multi-maschere.
Ho scritto lo stesso codice per ogni tanto modificando i vari nomi necessari (NomeInterruttore, NomeMaschera, ecc) ma qui esce il problema.
Due maschere in particolare rimangono sempre su attivate, cioè l'interruttore rimane sempre premuto anche al secondo click che dovrebbe disattivarlo e chiudere la maschera. Il problema però succede solo a 2 di questi 5 interruttori-maschere.
Cosa devo fare?
Qui c'è una parte di codice della maschera principale:
Option Compare Database
Sub Form_Current()
On Error GoTo Form_Current_Err
If ChildFormIsOpen() Then FilterChildForm
If Child1FormIsOpen() Then FilterChild1Form
If Child2FormIsOpen() Then FilterChild2Form
If Child3FormIsOpen() Then FilterChild3Form
If Child4FormIsOpen() Then FilterChild4Form
Form_Current_Exit:
Exit Sub
Form_Current_Err:
MsgBox Error$
Resume Form_Current_Exit
End Sub
Sub addFile_Click()
On Error GoTo addFile_Click_Err
If ChildFormIsOpen() Then
CloseChildForm
Else
OpenChildForm
FilterChildForm
End If
addFile_Click_Exit:
Exit Sub
addFile_Click_Err:
MsgBox Error$
Resume addFile_Click_Exit
End Sub
Private Sub FilterChildForm()
If Me.NewRecord Then
Forms![insertfilerim].DataEntry = True
Else
Forms![insertfilerim].Filter = "[nome] = " & Me.[id_rim]
Forms![insertfilerim].FilterOn = True
End If
End Sub
Private Sub OpenChildForm()
DoCmd.OpenForm "insertfilerim"
If Not Me.[addFile] Then Me![addFile] = True
End Sub
Private Sub CloseChildForm()
DoCmd.Close acForm, "insertfilerim"
If Me![addFile] Then Me![addFile] = False
End Sub
Private Function ChildFormIsOpen()
ChildFormIsOpen = (SysCmd(acSysCmdGetObjectState, acForm, "insertfilerim") And acObjStateOpen) <> False
End Function
In questa prima parte c'è il richiamo del form e del primo interruttore funzionante, ovviamente c'è una ripetizione con Child1 Child2 ecc cambiando i relativi dati. Il problema però c'è con Child2 e Child4, ma non capisco perchè avendo copiato ed incollato.
Grazie