Newsgroup: it.comp.appl.access
Titolo: [form] variabili pubbliche e openform su non in elenco

Ho questa situazione.
Due maschere, la prima associata ad anagrafiche "studenti" e la
seconda associata a quello che volete (ad esempio, "esami")
Ho un controllo "matricola" (casella di testo) su entrambe le
maschere. Sono sulla maschera "esami": vorrei che a seguito del 
tentativo di caricamento di una matricola non presente nella 
tabella "studenti", la sub aprisse la maschera "studenti" per 
aggiungere il nuovo studente.
(I domanda)
Ok, fino a qui ho risolto a modo mio. Non disponendo dell'evento 
"su non in elenco" in una casella di testo e trovandomi piuttosto
imbranato nell'intercettazione degli errori ho ricorso a una
funzione di aggregazione su domini come dlookup. C'č di meglio? (*)
(II domanda)
Vorrei anche che la matricola digitata sulla maschera "esami" venisse
copiata automagicamente nella maschera "studenti". Per fare ciň ho
inserito nelle dichiarazioni del modulo...
Option Compare Database
Public varMatricola As Variant
Tuttavia quando il focus passa alla maschera "esami" varMatricola ha
valore null. Temo che tutto dipenda dalla mia ignoranza in fatto di
variabili. Infatti con debug print di varMatricola sull'evento 
"su corrente" della maschera "esami" non si ottiene alcunche`.
Ergo il contenuto della casella di testo č rimasto confinato nella
maschera "studenti".
(*)
Private Sub matricola_AfterUpdate()
Dim varRisposta As Variant
varMatricola = Me!matricola.Text 'assegno un valore alla variabile pubblica
' poi verifico se la matricola sia o meno presente all'interno di studenti
varMatr = DLookup("[matricola]", "studenti", "[matricola]=" & [matricola])
Dim strMsg As String
strMsg = "La matricola " & Me!matricola & " č inesistente " & _ 
    "oppure lo studente non č in memoria. Si vuole aggiungere?"
' infine apro la maschera se da dlookup ho estratto un valore numerico
' altrimenti undo
If Not IsNumeric(varMatr) Then _
varRisposta = MsgBox(strMsg, vbInformation + vbYesNo, "Conferma"): _
If varRisposta = vbYes Then DoCmd.OpenForm "studenti", , , , acFormAdd Else Me.Undo
End Sub

"massimo" <n...@send.invalid> wrote in message
news:Xns935B809C...@news.inwind.it...

[...]
    Ti ho preparato un esempio. Facci sapere se hai bisogno di spiegazioni
ulteriori.
' Maschera Studenti_FStudenti
'
Option Base 0
Option Compare Database
Option Explicit
Public Event NuovoStudente(ByVal lngIDStudente As Long)
Private Sub CloseMe( _
  ByVal Result As Boolean)
  Me.Visible = False
  If (Result = True) Then
    RaiseEvent NuovoStudente(Me.IDStudente.Value)
  Else
    Me.Undo
    RaiseEvent NuovoStudente(0)
  End If
End Sub
Private Sub cmdCancel_Click()
  CloseMe False
End Sub
Private Sub cmdOK_Click()
  CloseMe True
End Sub
Private Sub Form_AfterUpdate()
  Me.AllowAdditions = False
End Sub
' Maschera Studenti_FStudentiDiEsame
'
Option Base 0
Option Compare Database
Option Explicit
Private WithEvents m_frmStudenti As Form_Studenti_FStudenti
Private Sub Form_BeforeInsert( _
  ByRef Cancel As Integer)
  Me.IDStudenteDiEsame.Value _
    = DMax( _
          "[IDStudenteDiEsame]" _
        , "Studenti_TStudentiDiEsami" _
        ) + 1
End Sub
Private Sub IDStudente_Exit( _
  ByRef Cancel As Integer)
  Dim lngIDStudente As Long
  lngIDStudente = Nz(Me.IDStudente.Value, 0)
  If (lngIDStudente > 0) Then
    If (DCount( _
            "*" _
          , "Studenti_TStudenti" _
          , "[IDStudente] =" & str(lngIDStudente) _
          ) = 0 _
    ) Then
      Cancel = True
      If ( _
        MsgBox( _
            "Codice inesistente." & vbCrLf _
          & "Vuoi immettere un nuovo Studente" _
          & " con questo codice?" _
          , vbQuestion + vbOKCancel _
          , "ATTENZIONE!" _
          ) = vbOK _
      ) Then
        With Me.IDStudente
          .SelStart = 0
          .SelLength = Len(.Text)
        End With
        Set m_frmStudenti = New Form_Studenti_FStudenti
        With m_frmStudenti
          .IDStudente.Value = lngIDStudente
          .Visible = True
        End With
      End If
    End If
  End If
End Sub
Private Sub m_frmStudenti_NuovoStudente( _
  ByVal lngIDStudente As Long)
  Set m_frmStudenti = Nothing
  If (lngIDStudente > 0) Then
    SendKeys CStr(lngIDStudente) & "~", False
  End If
End Sub
-- 
Ciao :o)
Maurizio
--------
?SPQR(C)
 X
--------

     Ti ho preparato un esempio.
Porca puzzola. Non chiedevo tanto :-)
Sui newsgroup non ringrazio mai. Quest'area non è pensata per 
sprecare tempo e banda in questo modo. Tuttavia, in questa occasione 
mi sento in dovere di farlo. Grazie di tutto cuore, a te e agli altri 
padroni del vapore :-)
PS: dopo la leggenda degli elicotteri neri del GCN ora passiamo alle 
locomotrici ad alta velocità che macinano stringhe a tutto andare.