Gestione evento

di il
11 risposte

Gestione evento

Buonasera a tutti,
vorrei diversificare un evento in aggiornamento di una casella combinata che però il comportamento deve essere diverso da inserimento nuovo record invece di modifica record?
Es. ho una maschera di inserimento commesse con vari campi tra cui una casella combinata e in fase di creazione record vorrei che all'aggiornamento del campo faccia una cosa e invece quando sono in variazione record commesse in aggiornamento casella combinata deve fare un'altra cosa.

Grazie per l'aiuto.

Giuseppe

11 Risposte

  • Re: Gestione evento

    Allora fai in modo che faccia le certe 2 cose che hai immaginato... scusa un po di sarasmo, ma di fatto non hai detto nulla di tecnico, quindi è improponibile aiutarti.

    Con le combo puoi fare tutto, quindi quasi certamente anche quello che chiedi... a capirlo...
  • Re: Gestione evento

    Alex ti spiego nel dettaglio la mia esigenza:

    ho l'esecuzione di questo codice dopo aggiornamento casella combinata:

    Private Sub CasellaCombinata341_Change()
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "selmacchinecommesse", acViewNormal, acEdit
    updatecasellacombinata353
    End Sub

    La query esegue una query per determinare il tipodisegno da utilizzare e poi attraverso l'updatecasellacombinata353 vado a popolare la casella
    successiva con i dati presi dalla query.

    il codice inserito in update casellacombinata353 è il seguente:

    Function updatecasellacombinata353()
    Dim strsql, tipiDisegno As String
    Dim RS As DAO.Recordset
    Dim db As Database
    Dim arrayTipiDisegno() As String
    Dim intCounter As Integer
    Set db = CurrentDb
    strsql = "selmacchinacliente"
    Set RS = db.OpenRecordset(strsql)

    If RS.EOF Then
    tipiDisegno = "A.B.C.D.E.F.G.H.LIB"
    Else
    If RS!dsTipoPremontaggio = "" Then
    tipiDisegno = "A.B.C.D.E.F.G.H.LIB"
    Else
    tipiDisegno = RS!dsTipoPremontaggio
    End If
    End If
    tipiDisegno = Replace(tipiDisegno, ":", " .")
    tipiDisegno = Replace(tipiDisegno, " . ", ".")



    arrayTipiDisegno = Split(tipiDisegno, ".")
    Do While Form_Commessa!CasellaCombinata353.ListCount > 0
    Form_Commessa!CasellaCombinata353.RemoveItem (0)
    Loop

    For intCounter = LBound(arrayTipiDisegno()) To UBound(arrayTipiDisegno())
    Form_Commessa!CasellaCombinata353.AddItem (arrayTipiDisegno(intCounter))
    Next intCounter

    End Function

    Non capisco perché quando vado a selezionare la casella combinata già popolata dei dati se non inserisco un valore di default non riesco a selezionare dato. Siccome devo controllare i cambiamenti che fa l'operatore e pulire valore casellacombinata353 pensavo di fare un doppio evento uno in creazione record commessa e uno in variazione commessa.
    Grazie
    ciao
    Giuseppe
  • Re: Gestione evento

    Quando si posta Codice si usano i TAG specifici che trovi nella barra sopra a dove digiti... la scritta CODE che vedi...!
    Continuo a capire poco... ma, una cosa è chiarissima hai scritto 90% di codice inutile...!

    Data la stringa iniziale:
    
    tipiDisegno = "A.B.C.D.E.F.G.H.LIB"
    tu fai una marea di giri di codice per fare questo
    
    tipiDisegno = Replace(tipiDisegno, " ", "")
    tipiDisegno = Replace(tipiDisegno, ".", ";")
    Me!CasellaCombinata353.RowSource=tipiDisegno
    Ora ripartiamo da dopo aver semplificato il tutto.
  • Re: Gestione evento

    Quindi l'array non serve?
  • Re: Gestione evento

    giuseppe21965 ha scritto:


    Quindi l'array non serve?
    Se hai provato quello che ti ho suggerito, dovresti spiegarci tu a cosa serve tutto quel lavoro...!
  • Re: Gestione evento

    Alex ho provato e in effetti se il valore del campo è A.B.C.D.E.LIB la tua soluzione sarebbe giusta. In realtà il dato A.B.C.D.E.LIB è l'insieme di A B C D E LIB che invece devono essere scelti e memorizzati singolarmente perché ad ogni valore corrisponde un disegno ecco perché l'array.
  • Re: Gestione evento

    Io ho la forte sensazione che tu abbia un serio problema di progettazione/normalizzazione tabelle. Aggiungo che se gestissi tutto in maniera normalizzata ti semplificheresti molte cose senza mettere mano a intrecciati e inutili giri di codice VBA.
  • Re: Gestione evento

    Il problema è che arrivo da un archivio sql server e con tabelle già fatte con un altro precedente programma fatto non da me e quindi mi son dovuto adeguare.
    Il fatto di scrivere qui è per avere un aiuto.
    Ringrazio in anticipo.
    Giuseppe
  • Re: Gestione evento

    Questa è la sezione Access. Con quale applicazione devi gestire il tuo database? In ogni caso, con qualsiasi applicazione tu voglia gestire un database, è d'obbligo passare attraverso la "normalizzazione"...altrimenti nessun utente del forum potrà aiutarti.
  • Re: Gestione evento

    giuseppe21965 ha scritto:


    Alex ho provato e in effetti se il valore del campo è A.B.C.D.E.LIB la tua soluzione sarebbe giusta. In realtà il dato A.B.C.D.E.LIB è l'insieme di A B C D E LIB che invece devono essere scelti e memorizzati singolarmente perché ad ogni valore corrisponde un disegno ecco perché l'array.
    E questa cosa cosa c'entra...?
  • Re: Gestione evento

    Giuseppe21965,
    si fa fatica a interpretare lo scenario che descrivi; infatti, se hai seguito i suggerimenti di Alex che cerco di descriverti più dettagliatamente:
    
    Private Sub Form_Load()
    
    ' Alimenta la combo-box con un elenco valori
    ' forniti da una stringa ove sono separati dal punto e virgola
    
    strArray = ";A;B;C;D;E;F;G;LIB"		      ' Stabilisce i singoli valori separati da punto e virgola
    Me.cboDaArray.RowSourceType = "value list"    ' imposta "Elenco valori" nella combo-box
    Me.cboDaArray.RowSource = strArray	      ' assegna i vari valori attraverso stringa
    
    End Sub
    
    la casella combinata avrà l'opportunità di selezionare uno dei valori (fra quelli predisposti nella stringa) per cui non si comprende quando indichi:

    Giuseppe21965 ha scritto:


    .., invece devono essere scelti e memorizzati singolarmente perché ad ogni valore corrisponde un disegno ecco perché l'array.
    in quanto, come indicato non serve impiegare un array. ma puoi scegliere singolarmente uno degli elementi fra l'elenco dei valori disponibili.
    Poi se, invece, devi scegliere fra un elenco di valori plurimi (in quanto potresti voler scegliere varie combinazioni come ad esempio: "B;D;LiB" ecc.) invece di impiegare una casella combinata è preferibile impiegare una casella di riepilogo (list-box) imponendo una selezione multipla; (in modo da poter scegliere fra più valori) ed al termine, della selezione stessa, procedere alla memorizzazione (in tal caso puoi impiegare una casella di testo che contenga le scelte effettuate, magari suddividendole con apposito separatore):
    https://support.microsoft.com/it-it/help/827423/how-to-retrieve-the-selected-items-in-a-multiple-selection-list-box-as
Devi accedere o registrarti per scrivere nel forum
11 risposte