RowSource di un Combo, perde i valori

di il
20 risposte

RowSource di un Combo, perde i valori

Buongiorno a tutti.
Ho un form che contiene un ComboBox "cmbIva".
Sull'evento "OnExit" del combo aggiungo al suo RowSouce il suo text, se non è già presente.
Private Sub cmbIva_Exit(Cancel As Integer)
	If Me.cmbIva.ListIndex = -1 And Len(Trim(Me.cmbIva.Text) & "") > 0 Then Me.cmbIva.RowSource = Me.cmbIva.RowSource & ";" & Trim(Me.cmbIva.Text)
End sub
Ho poi un pulsante che chiude il form, salvandolo.

Digito il nuovo parametro nel combo, passo a compilare altri campi e se riapro la lista del combo, questa contiene il nuovo parametro.
Funziona bene, ma quando esco dal form e rientro, nonostante lo abbia salvato (il form) prima di chiuderlo con l'istruzione:
DoCmd.Close acForm, "AddMovimenti", acSaveYes
il RowSource torna quello di prima.

Cosa sbaglio?

20 Risposte

  • Re: RowSource di un Combo, perde i valori

    Appoggiati ad una tabella
  • Re: RowSource di un Combo, perde i valori

    Io credo che sia assurdo creare una tabella per ogni combo che devo popolare con una lista valori. Ce ne sono almeno 20 nel form... preferirei capire come modificare la lista in maniera definitiva...
  • Re: RowSource di un Combo, perde i valori

    Forse non necessariamente una "tabella", magari anche una "query" ricostruibile in base alle tabelle che già hai.
  • Re: RowSource di un Combo, perde i valori

    Koa68 ha scritto:


    Io credo che sia assurdo creare una tabella per ogni combo che devo popolare con una lista valori. Ce ne sono almeno 20 nel form... preferirei capire come modificare la lista in maniera definitiva...
    sono d'accordo su quello che dici ma di norma la tabella delle IVA contiene descrizione per fatturazione elettronica piuttosto che quella di uso interna, piuttosto che quella breve, aliquota ed altro ... per cui siccome si parla di iva mi sembra la soluzione migliore, anche perchè in materia di fatturazione/economica non avrai un unico posto in cui usi una combo legata all'iva, giusto?
    La soluzione di Osvaldo funziona ma se poi hai 1mln di record si rallenta.
  • Re: RowSource di un Combo, perde i valori

    Koa68 ha scritto:


    Buongiorno a tutti.
    Ho un form che contiene un ComboBox "cmbIva".
    Sull'evento "OnExit" del combo aggiungo al suo RowSouce il suo text, se non è già presente.
    Private Sub cmbIva_Exit(Cancel As Integer)
    	If Me.cmbIva.ListIndex = -1 And Len(Trim(Me.cmbIva.Text) & "") > 0 Then Me.cmbIva.RowSource = Me.cmbIva.RowSource & ";" & Trim(Me.cmbIva.Text)
    End sub
    Ho poi un pulsante che chiude il form, salvandolo.

    Digito il nuovo parametro nel combo, passo a compilare altri campi e se riapro la lista del combo, questa contiene il nuovo parametro.
    Funziona bene, ma quando esco dal form e rientro, nonostante lo abbia salvato (il form) prima di chiuderlo con l'istruzione:
    DoCmd.Close acForm, "AddMovimenti", acSaveYes
    il RowSource torna quello di prima.

    Cosa sbaglio?
    Secondo te, le modifiche fatte a RUNTIME dove finiscono...?
    Se non la salvi in qualche parte quella riga di codice è ovvio non venga memorizzata da nessuna parte.

    Quindi la tua affermazione "Io credo che sia assurdo creare una tabella per ogni combo che devo popolare con una lista valori" è vera se non devi MEMORIZZARE le modifiche in modo permanente, alterimenti la memoria in cui salvi quel ROW SOURCE è la Ram Temporanea dedicara all'Oggetto contenitore... la Form, chiusa quella perse le modifiche.

    A me sembra talmente banale questa cosa che fatic a capire come credi venga gestita questa cosa...
  • Re: RowSource di un Combo, perde i valori

    Mmmmh, la soluzione di Osvaldo mi piace di più e potrebbe funzionare, ma come dice Muttley rallenterebbe tutto anche perché i dati acquisiti finiscono in un file di Excel (per condivisione con altri progetti che fanno altre operazione su quei dati) e non vengono mai memorizzati in Access (dovrei sincronizzarli ed essendo parecchi e i PC in alcuni casi sono molto vetusti sarebbe un'enorme perdita di tempo).
  • Re: RowSource di un Combo, perde i valori

    Koa68 ha scritto:


    Mmmmh, la soluzione di Osvaldo mi piace di più e potrebbe funzionare, ma come dice Muttley rallenterebbe tutto anche perché i dati acquisiti finiscono in un file di Excel (per condivisione con altri progetti che fanno altre operazione su quei dati) e non vengono mai memorizzati in Access (dovrei sincronizzarli ed essendo parecchi e i PC in alcuni casi sono molto vetusti sarebbe un'enorme perdita di tempo).
    Se la richeista è AGGIUNGERE su NotInList in modo permanente, perchè si dovrebbe usare l'evento NotInList per fare questa cosa non Exit..., nessuna delle 2 va bene, una perchè una Query come base di una Combo o List è readOnly ma se alla base hai una tabella allora hai posto un NON PROBLEMA, l'altra perchè ovviamente non si toccano i File sorgenti.

    Chiarisciti cosa vuoi altrimenti... abbiamo anche noi confusione.
  • Re: RowSource di un Combo, perde i valori

    MI sono dimenticato di scrivere che la proprietà del combo "RowSourceType" è impostata su "value list" ma pensavo che fosse implicito se uso il codice:
    Me.cmbIva.RowSource = Me.cmbIva.RowSource & ";" & Trim(Me.cmbIva.Text)
    Comunque soluzione trovata ragionando su quello che hai scritto prima:

    @Alex ha scritto:


    Secondo te, le modifiche fatte a RUNTIME dove finiscono...?
    Basta entrare in modalità Design... prima di chiudere il form!

    Non capisco perché:

    @Alex ha scritto:


    non si toccano i File sorgenti
    se hanno creato la modalità Design a qualcosa servirà...
  • Re: RowSource di un Combo, perde i valori

    Per quanto riguarda "NotInList" hai ragione me l'ero dimenticato... grazie.
    Preferisco comunque mantenere l'uso di OnExit perché così posso controllare che l'utente non abbia digitato uno spazio prima del numero, cosa che (non ho mai capito perché) succede spesso...
  • Re: RowSource di un Combo, perde i valori

    Koa68 ha scritto:


    MI sono dimenticato di scrivere che la proprietà del combo "RowSourceType" è impostata su "value list" ma pensavo che fosse implicito se uso il codice:
    Me.cmbIva.RowSource = Me.cmbIva.RowSource & ";" & Trim(Me.cmbIva.Text)
    Comunque soluzione trovata ragionando su quello che hai scritto prima:

    @Alex ha scritto:


    Secondo te, le modifiche fatte a RUNTIME dove finiscono...?
    Basta entrare in modalità Design... prima di chiudere il form!

    Non capisco perché:

    @Alex ha scritto:


    non si toccano i File sorgenti
    se hanno creato la modalità Design a qualcosa servirà...
    La modalità Design "non esiste" per l'utilizzo ... ma se gestisci tu tutto e non ci sono altri utenti che utilizzano questa form ... allora di cosa stiamo parlando?!? non capisco...
  • Re: RowSource di un Combo, perde i valori

    Certo che ci sono altri utenti che utilizzano questa form. Io faccio entrare il progetto in modalità Design da codice VBA quando l'utente chiude il form, gli faccio modificare le 22 RowSource (prima avevo scritto che erano più di una ventina) e lo faccio salvare, così quando l'utente riapre il form ha i nuovi valori implementati. Lo trovo meno oneroso che creare 22 tabelle per popolare 22 combo.
  • Re: RowSource di un Combo, perde i valori

    Koa68 ha scritto:


    Lo trovo meno oneroso che creare 22 tabelle per popolare 22 combo.
    Però sei qui a sbatterci la testa...
    Davvero, se stiamo parlando di IVA, mi meraviglio che tu una tabella non l'abbia già. Se poi sono dati miscellanei, nulla ti vieta di avere una sola tabella in cui organizzi NomeCombo-ValorePossibile (benché a livello personale non mi piaccia molto come soluzione. Troppa roba hardcoded).
    Se sei in fase di test e devi trovare una gabola per provare ok. Altrimenti meglio una tabella per ogni combo (a meno che varie combo non riferiscano alla stessa tabella, e le relative maschere per gestire gli inserimenti dei vari valori.
  • Re: RowSource di un Combo, perde i valori

    Koa68 ha scritto:


    ....
    Basta entrare in modalità Design... prima di chiudere il form!
    Quando sento una frase iniziare con "Basta"... mi viene l'orticaria da banalizzazione.
    Rispondo sotto.

    Koa68 ha scritto:


    Non capisco perché:

    @Alex ha scritto:


    non si toccano i File sorgenti
    Intendevo quelli in Excel...!

    Koa68 ha scritto:


    se hanno creato la modalità Design a qualcosa servirà...
    La modalità Design, come per qualsiasi Programma di sviluppo Interfacce Utente, è destinata a chi Sviluppa il prodotto proprio perchè lo deve "Disegnare"....!
    Agli utenti si distribuisce una versione che non richiede l'IDE, sicuramente sai di cosa parlo, e questo di solito si fa sia per questione di Costi, ma soprattutto per questione di Sicurezza dell'interfaccia.
    Ne consegue che qualsiasi piattaforma di costruzione Interfacce Desk venga usata, la prima cosa che uno sviluppatore conosce è che deve scrivere codice che deve girare in modalità RUNTIME senza richiedere il passaggio per la modalità Design in quanto non disponibile.

    Ovviamente come tutti quelli che hanno parziali visioni di questi argomenti... tu puoi fare quello che vuoi, basta che non banalizzi le affermazioni senza darne una concretezza tecnica comprensibile e supportata, la spiegazione del "se si può fare lo faccio"... va bene se te la tieni per te.

    Ora da quì a pensare che ti servano 22 Tabelle non previste per 22Combo... mi viene da pensare all'ingegneria del prodotto... e mi pongo molte domande.
  • Re: RowSource di un Combo, perde i valori

    Sgrubak ha scritto:


    Se poi sono dati miscellanei, nulla ti vieta di avere una sola tabella in cui organizzi NomeCombo-ValorePossibile (benché a livello personale non mi piaccia molto come soluzione. Troppa roba hardcoded).
    Esattamente...

    Ogni combo di quella finestra non viene mai ripetuta in nessun altra... e sono tuti valori di quel tipo (ad esempio percentuale di ritenuta d'acconto), dove se non cambiano le leggi non si aggiungono mai altri valori e quindi cose abbastanza improbabili, ma che comunque deve esserci la possibilità di implementarle senza che io debba intervenire.
Devi accedere o registrarti per scrivere nel forum
20 risposte