Aggiornamento subform da codice

di il
3 risposte

Aggiornamento subform da codice

Buongiorno a tutti,
sono nuovo del forum e chiedo venia in anticipo per eventuali inesattezze o strafalcioni che vi sottoporrò.
Capite già che le conoscenze di access non sono sicuramente ai vs livelli.
Ho una maschera singola frm_modulo_2 con un controllo a schede (orc, pdc_comp, pdc_ass, p_tech). E per ora si lavora sulla prima scheda, orc. La scheda orc è organizzata anch’essa con un controllo a schede (analisi_ex, dt_pp, calcolo, tm_delta_sh, port_cs). Per far ciò ho utilizzato una sottomaschera, subform_modulo_2_orc che ha appunto il controllo a schede precedente.
Questa sottomaschera ha come origine controllo una tabella mod2_assunzioni che filtro con una “select * from mod2_assunzioni where id_assunzioni = 1;”.
I campi della select sono origine controllo di alcuni textbox nelle diverse schede della subform (non tutti in una singola scheda della subform, alcuni in analisi_ex, altri in calcolo, altri in tm_delta_sh) e inoltre ci sono molti altri controlli (soprattutto textbox) calcolati e derivati dai controlli precedenti. Le derivazioni sono a più livelli di profondità, non solo derivati dal campo in tabella, sono praticamente annidati.
Ed ora il problema. Mi serve calcolare il valore minimo assunto da un controllo (textbox) al variare di due campi presenti in tabella che alimenta la subform.
Quando apro in modalità visualizzazione la subform_modulo_2_orc (ma anche la form_modulo_2) posso variare il contenuto dei controlli textbox e la maschera (form o subform) si aggiorna correttamente (cambio il valore nella textbox e premendo invio mi aggiorna i campi, in particolare quello di mio interesse) e ciò cambiando entrambe le textbox. Nella tabella di origine i campi non sono variati finché non faccio un salva.
Poiché mi interessa calcolare il valore minimo assunto dal textbox al variare dei valori delle altre due textbox ho inserito un pulsante e da codice provo a far variare i valori e leggere quello desiderato. Ho pensato di inserire il tutto in una tabella tramite un recordset e poi analizzare la tabella creata alla ricerca del valore minimo (e dei corrispondenti valori che lo hanno determinato). Il codice utilizzato è il seguente
(TestoTM_DSH_E4 è la textbox che deve variare tra un valore minimo e un massimo letti da altri 2 controlli,
TestoTM_DSH_F4 è la seconda textbox che deve variare tra min e max letti da altri 2 controlli e un altro controllo TestoTM_DSH_L6, anch?esso calcolato e derivato tante volte, deve risultare sempre >=0; prova è la tabella dove voglio far confluire i valori delle 2 textbox variabili e della textbox di interesse, dic cui calcolare il minimo al variare delle precedenti)


Private Sub Comando738_Click()
Dim min_1, max_1, k, min_2, max_2, var1, var2 As Variant
Dim rs1 As DAO.Recordset

Set db = CurrentDb
Set rs1 = db.OpenRecordset("Select * from prova", dbOpenDynaset)

min_1 = TestoTM_DSH_B8.Value 'vincolo_1_inf.Value ' >=
max_1 = TestoTM_DSH_B9.Value 'vincolo_1_sup.Value ' <=
min_2 = TestoTM_DSH_B12.Value 'vincolo_2_inf.Value ' >=
max_2 = TestoTM_DSH_B11.Value 'vincolo_2_sup.Value ' <=
k = TestoTM_DSH_L6.Value ' vincolo_3.Value '>=

DoCmd.RunSQL ("delete from prova;") ‘svuoto la tabella prova
For var1 = min_1 To max_1 Step 0.01
    TestoTM_DSH_E4.Value= var1
    'DoCmd.RunSQL ("update mod2_assunzioni set tmax_tm_dsh_e4 = " & Replace(var1, ",", ".") & " WHERE ID_assunzioni=1;")
    For var2 = min_2 To max_2 Step 0.01
        'DoCmd.RunSQL ("update mod2_assunzioni set deltat_sh_tm_dsh_f4 = " & Replace(var2, ",", ".") & " WHERE ID_assunzioni=1;")
        TestoTM_DSH_F4.Value = var2
        DoCmd.RepaintObject acForm, "subform_modulo_2_orc"
        k = TestoTM_DSH_L6.Value
        If k >= 0 Then
            rs1.AddNew
            rs1.Fields(1) = TestoTM_DSH_E4.Value
            rs1.Fields(2) = TestoTM_DSH_F4.Value
            rs1.Fields(3) = TestoTM_DSH_H6.Value
            rs1.Update
              
        Else
        End If
    Next var2
    
Next var1
End Sub


Alcune istruzioni sono commentate e le ho riportate per mostrare i diversi tentativi.
Il problema è che quando faccio variare, o meglio provo ad assegnare via codice i valori ai controlli che rappresentano le variabili (TestoTM_DSH_E4.Value = var1 o anche impostandolo come aggiornamento della tabella di origine per poi fare un recalc, requery o repaint) la maschera o sottomaschera non si aggiorna correttamente riportandomi gli errori #Errore o #Tipo.
A cosa è dovuto il differente comportamento (variazione in modalità visualizzazione nessun errore rispetto all’attribuzione via codice)? Cosa sbaglio e come potrei intervenire? Mi scuso per la lunghezza ma volevo descrivere in modo dettagliato per evitarvi problemi di interpretazione.
Grazie in anticipo dell’attenzione che vorrete prestare.
Saluti.

3 Risposte

  • Re: Aggiornamento subform da codice

    Io non ho capito quasi nulla. La descrizione forse "relativamente chiara" non riesco ad afferrarla. Troppi controlli, troppe schede...anche terminologie tecniche del tuo ambito professionale...di cui io mi sento totalmente all'oscuro. Fai attenzione a non esagerare con troppi controlli annidati, altrimenti è facile perdersi.
    Riesci ad allegare una immagine della maschera/schede/sottomaschere?
    Siamo sicuri che il tuo database è normalizzato?

    Almeno che un utente più esperto abbia compreso...cedo volentieri la palla.
  • Re: Aggiornamento subform da codice

    Salve,
    sorry per la poca chiarezza nella spiegazione. Ci provo con l'immagine richiesta.
    Ho form e subform con controlli a schede. nel subform diversi controlli soprattutto textbox tra cui E4(rosso) e F4(celeste) che sono alimentati dalla tabella recordsource del subform, gli altri sono controlli derivati e "annidati" come detto ieri derivanti.
    Quelli che interessano sono E4, F4, K6 e H6. Non c'è un legame "diretto" tra H6 ed E4 e F4. Al variare di E4(tra un min e max che prende sempre sul subform e sempre in rosso) e F4(anche questo tra un min e max presenti sul subform in celeste) cambiano i valori di K6 (che devo verificare sia sempre >=0) e H6, campo di interesse per il quale devo calcolare il minimo nel range di variazione di E4 ed F4.
    In visualizzazione maschera cambio manualmente i valori di E4 ed F4 e la maschera si aggiorna (nella tabella origine recordsource i dati non cambiano se non faccio un salva) fornendo i valori di K6 ed H6.
    E fin qui tutto bene. Nel momento in cui provo a far variare E4 e F4 con codice su click del pulsante 738 la maschera non si aggiorna e i controlli riportano #Errore e #Tipo.
    Mi chiedevo il perché di questo duplice comportamento della maschera.
    Riporto di seguito il codice utilizzato
    
    
    Private Sub Comando738_Click()
    Dim min_1, max_1, k, min_2, max_2, var1, var2 As Variant
    Dim rs1 As DAO.Recordset
    
    Set db = CurrentDb
    Set rs1 = db.OpenRecordset("Select * from prova", dbOpenDynaset)
    
    
    min_1 = E4_min.Value  	'vincolo_1_inf.Value ' >=
    max_1 = E4_max.Value 	'vincolo_1_sup.Value ' <=
    min_2 = F4_min.Value 		'vincolo_2_inf.Value ' >=
    max_2 = F4_max.Value 	'vincolo_2_sup.Value ' <=
    k = K6.Value			 ' vincolo_3.Value '>=
    
    DoCmd.RunSQL ("delete from prova")
    For var1 = min_1 To max_1 Step 0.01
        E4.Value = var1
        'DoCmd.RunSQL ("update mod2_assunzioni set E4 = " & Replace(var1, ",", ".") & " WHERE ID_assunzioni=1;")
        For var2 = min_2 To max_2 Step 0.01
            'DoCmd.RunSQL ("update mod2_assunzioni set F4 = " & Replace(var2, ",", ".") & " WHERE ID_assunzioni=1;")
            F4.Value = var2
            DoCmd.RepaintObject acForm, "subform_modulo_2_orc"
            k = K6.Value
            If k >= 0 Then
                rs1.AddNew
                rs1.Fields(1) = E4.Value
                rs1.Fields(2) = F4.Value
                rs1.Fields(3) = H6.Value
                rs1.Update
                  
            Else
            End If
        
        Next var2
        
    Next var1
    
    End Sub
    
    Grazie in anticipo.
    Allegati:
    31028_352171329e61a967ab41941037d84d08.jpg
    31028_352171329e61a967ab41941037d84d08.jpg
  • Re: Aggiornamento subform da codice

    Io continuo a leggere arabo. Sempre in attesa di un utente più esperto che avesse capito il tuo intento, almeno io ho bisogno di capire il tuo contesto dalla A alla Z.
    1. Di cosa parla il tuo database?
    2. Puoi mostrare la Finestra Relazioni? Ossia nomi propri di tabelle, campi, relazioni.
    3. I nomi propri di tabelle e campi sono tutti così "ermetici"? Io non capisco nulla.
Devi accedere o registrarti per scrivere nel forum
3 risposte