Valido Se

di il
8 risposte

Valido Se

Scusate la mia ignoranza , non sono un programmatore, ripongo in qualcuno che mi dia una mano a risolvere il seguente problema.

Nome Maschera : Articoli Prodotti
Campo 1: [Dim-A] , origine Campo da tabella TMArticoliProdotti, Tipo di Campo - numerico, dimensione campo - precisione doppia.
Campo 2: [Formato], origine Campo da tabella TMArticoliProdotti, Tipo di Campo - numerico, dimensione campo - precisione doppia, nome elemento txtFormato, Campo bloccato.

Ho creato una maschera Articoli Prodotti dove il campo [Dim-A] deve essere <= [Formato] e contemporaneamente sempre [Dim-A] non può essere uguale ai valori compresi ([Formato]/2)-3 e ([Formato]/2)+1

Inizialmente ho provato a creare una formula del tipo Valido se <= [Formato] Not Between (([Formato]/2)-3) And (([Formato]/2)+1) ma non mi riconose la formula...............

Allora ho creato due campi uguali [Dim-A1] e [Dim-A] che rispettivamente sono validi se <= [Formato] e se (([Formato]/2)-3) And (([Formato]/2)+1)................I campi funzionano ma è sorto un'altro problema:

Visto che [Dim-A1] e [Dim-A] sono la stessa cosa ho provato a inserire nell'Evanto , Routine su invio di [Dim-A] a inserire me.Dim_A = me.Dim_A1 cosi facendo però non mi riconosce la regola della Validita del Campo.................
Ho provato a con copia incolla................Sell'evento in [Dim_A1] Routine su INVIO :

Private Sub Dim_A1_Enter()
Me.Dim_A1.SelStart = 0
Me.Dim_A1.SelLength = Len(Me.Dim_A1.Text)
RunCommand acCmdCopy
End Sub

Sull'evento [Dim_A] Routine su INVIO :

Private Sub Dim_A_Enter()
RunCommand acCmdPaste
End Sub

Cosi pare funzionare, ma mi genera altri e ben più importanti probemi per cui è meglio rinuciare.................

Mi serve un Aiuto
Grazie!

Simone

8 Risposte

  • Re: Valido Se

    simoselva ha scritto:


    ...
    Inizialmente ho provato a creare una formula del tipo Valido se <= [Formato] Not Between (([Formato]/2)-3) And (([Formato]/2)+1) ma non mi riconose la formula...
    Non uso questo tipo di validazione, di solito si usa l'evento BeforeUpdate della maschera, dove esegui la verifica del tipo
    If Me![Dim-A].Value > Me![txtFormato].Value Or _
    (Me![Dim-A].Value >= ((Me![txtFormato]/2)-3) And Me![Dim-A].Value <= ((Me![txtFormato]/2)+1))) Then
         Cancel = True
         'messaggio di avvertimento dell'errore di validazione, ad esempio
         Me![Dim-A].SetFocus
    End If
    Il SetFocus su Dim-A serve per agevolare l'utente a trovarsi pronto sul controllo da modificare.
    (il criterio di validazione l'ho un po' scritto a naso, spero che si siano tutte le parentesi, comunque dovrebbe essere chiaro il concetto)
  • Re: Valido Se

    Ho provato a compilare come consiglio........................

    Private Sub Dim_A_BeforeUpdate(Cancel As Integer)
    If Me![Dim-A].Value > Me![txtFormato].Value Or ((Me![txtFormato] / 2) - 3) And Me![Dim-A].Value <= ((Me![txtFormato] / 2) + 1) Then Cancel = True
    Me![Dim-A].SetFocus
    End If
    End Sub

    Ma non funziona....................Mi dice che l'espressione non corrisponde al nome di una macro.
  • Re: Valido Se

    simoselva ha scritto:


    Private Sub Dim_A_BeforeUpdate(Cancel As Integer)
    If Me![Dim-A].Value ...
    ...
    End Sub
    Come si chiama il controllo? Dim_A o Dim-A?
    Poi io avevo detto di metterlo su BeforeUpdate della maschera, non del controllo.
    In ogni caso credo che l'espressione dell'If non fosse corretta.
    Vediamo se "indentandola" meglio capisci come costuirla
    If Me![Dim-A].Value > Me![txtFormato].Value _ 'primo criterio
       Or ( _ 'inizio del secondo criterio composto a due criteri
            Me![Dim-A].Value >= ((Me![txtFormato]/2)-3) _ 'primo subcriterio della seconda verifica
            And _
            Me![Dim-A].Value <= ((Me![txtFormato]/2)+1)) _ 'secondo subcritero della seconda verifica 
          ) _ 'fine del secondo criterio composto a due criteri
    Then
         
         Cancel = True
         'messaggio di avvertimento dell'errore di validazione, ad esempio
         Me![Dim-A].SetFocus
    End If
    (non si scrive così il codice ma serve per farti vedere la "sequenza" )

    Ah, altra cosa: ho preso come riferimento sempre e solo sul controllo associato, senza passare dagli altri controlli intermedi che avevi creato nel frattempo (Dim_A1 e simili)
  • Re: Valido Se

    Scusate la mia ignoranza ma scrivo il codice nel seguente modo:

    Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Me![Dim-A].Value > Me![txtFormato].Value Or (Me![Dim-A].Value >= ((Me![txtFormato]/2)-3)And Me![Dim-A].Value <= ((Me![txtFormato]/2)+1)))Then
    Cancel = True
    Me![Dim-A].SetFocus
    End If
    End Sub

    Ma mi dice errore di compilazione.............Errore di sintassi.
    Il controllo si chiama [Dim-A]..............
    Grazie
  • Re: Valido Se

    simoselva ha scritto:


    
    If Me![Dim-A].Value > Me![txtFormato].Value Or (Me![Dim-A].Value >= ((Me![txtFormato]/2)-3)And Me![Dim-A].Value <= ((Me![txtFormato]/2)+1)))Then
    
    Una parentesi di troppo di chiusura (prima di Then) e manca uno qui in mezzo
    ...-3) And Me![Dim-A]...
    (te l'avevo detto di guardare se c'erano tutte le parentesi a posto, avevo scritto un po' a naso)
  • Re: Valido Se

    Dove manca 1...................Comunque ora non ho più nessun errore, però qualunque valore digito me lo lascia digitare non riconoscendo nessun errore ??????
  • Re: Valido Se

    simoselva ha scritto:


    Dove manca 1...
    Scusa, mancava uno spazio.
    Allora il criterio è scritto male, devo rivedere meglio.
  • Re: Valido Se

    Grazie comunque ma per il momento ho risolto in questo modo: due campi [Dim-A1] dove controllo un criterio e [Dim-A] dove controllo il secondo criterio...............[Dim-A] è un campo che fa parte di un calcolo che come risultante da il nome all'articolo. [Dim-A] e [Dim-A1] devono essere uguali e per ciò in automatico una volta inserito [Dim-A] viene copiato dopo aver controllato il primo criterio in [Dim-A1], per controllare il secondo criterio. Se il secondo criterio non è confermato posso cancellare i 2 campi contemporaneamente e ripartire................Però rimane il problema che vorrei bloccare il campo [Dim-A] ma purtroppo non posso, altrimenti non mi lascia copiare [Dim-A].
    Grazie Comunque.
Devi accedere o registrarti per scrivere nel forum
8 risposte