Valore di default in un campo

di il
7 risposte

Valore di default in un campo

Salve,
in un DB voglio evitare di riscrivere(nella maschera) lo stesso valore per un campo in tutti i nuovi record.
Nel controllo txtvalore(formato numerico) ho inserito il codice (dopo aggiornamento):
Me.txtvalore.defaultvalue=me.txt.value.
Purtroppo non funziona.Ho provato con prima di aggiornamento ma idem.
Ho provato a togliere l'origine controllo e il codice funziona ma evidentemente alla chiusura della maschera scompaiono i valori che io voglio invece popolino la tabella.
Faccio presente che la maschera dipende dalla query.
Come al solito chiedo lumi
Grazie

7 Risposte

  • Re: Valore di default in un campo

    In prima cosa scrivi codice che genera confusione...!
    
    Me.txtvalore.defaultvalue=me.txt.value
    Cosa rappresenta un campo della Tabella e cosa il Controllo Associato...?

    Da quello che dici [txtvalore] è il nome del Campo della Tabella e [txt] il nome del controllo.

    I campi delle Tabelle non prendono MAI i suffissi del DataType, questo è riservato alle variabili(sempre) ed eventualmente ai controlli(ma io lo trovo sbagliato e scomodo per i cicli eventuali...!)

    se ho compreso, la sintassi che hai usato è errata, non puoi modificare il valore del Campo della Tabella in quel modo.

    Il metodo che hai usato funziona perfettamente se usato correttamente, solo che devi lasciare la Maschera aperta...
    Ovviamente chiudendola, o peggio chiudendo il Database vengono perse le impostazioni ambiente.

    Come ti avevo suggerito nell'altro POST, cosa che non hai minimamente ascoltato devi usare un'altro sistema... quindi devi andare a RECUPERARE il valore direttamente dalla Tabella.

    Hai 2 metodi, ma dipende dalla tua capacità di scrivere codice, per questo ti avevo suggerito il DLAST che funziona egregiamente.

    Ora se vuoi vai a rileggere il vecchio suggerimento, e magari chiarisci il rapporto tra questa domanda ed il precedente 3D in quanto le 2 cose sono troppo in sintonia ed io un minimo di dubbio l'ho maturato... sarà magari l'età...!!
  • Re: Valore di default in un campo

    Ciao Alex,
    grazie per la tua osservazione in calce (potevi risparmiarla...)
    Allora ho provato il Dlast (nella proprietà valore predefinito) del controllo:
    =Dlast("txtvalore";"tabella1") ma sono al punto di partenza.
    Inserito il primo valore(che popola il relativo campo della tabella) poi nei record successivi niente.
    Ho rivisto i vari post ma non riesco a concludere.
    Non è che la funzione Dlast sia sibillina?
    Del resto in un post recente tu stesso l'hai definita di "performances discretamente scarse".
    Buona serata
  • Re: Valore di default in un campo

    silene ha scritto:


    Ciao Alex,
    grazie per la tua osservazione in calce (potevi risparmiarla...)
    Assolutamente no... perchè dovrei trattarti come un ragazzino/a... non siamo a scuola, e quello che devo dire lo dico usando educazione e senza mai offendere, solo che non ho timori reverenziali...
    Cosa ritieni ci sia di sbagliato o di offensivo in quanto esposto...?
    Ti faccio notare tuttavia che non hai risposto alla domanda.

    silene ha scritto:


    Allora ho provato il Dlast (nella proprietà valore predefinito) del controllo:
    =Dlast("txtvalore";"tabella1") ma sono al punto di partenza.
    Inserito il primo valore(che popola il relativo campo della tabella) poi nei record successivi niente.
    Ho rivisto i vari post ma non riesco a concludere.
    Non è che la funzione Dlast sia sibillina?
    Del resto in un post recente tu stesso l'hai definita di "performances discretamente scarse".
    Buona serata
    Il problema è di aggiornamento dei dati... prova a premere F5 dopo aver inserito un nuovo record... e vedrai che il tutto si aggiorna...!
    Qual'è il comando da generare per aggiornare i dati...?(Non dire Refresh o Recalc )
    Questo tuttavia richiede riflessione sull'evento o meglio gli eventi da usare...!

    Ovviamente è solo per farti capire il problema di fondo...

    Sulla questione di Performances credo tu abbia forse frainteso quanto è il concetto.

    Tutte le funzioni di aggregazione sui DOMINI, quindi DMAX/DLAST/DLOOKUP/Ecc... hanno performances migliorabili, e questo è vero sempre, ma l'entità della decadenza delle performances è visibile e da evitare nelle Queries, in quanto in questi casi ad ogni Record viene chiamata la funzione, quindi se la Query elabora 10000 Records allora si che richiamare 10000 volte la DMAX o altro ha un'impatto che potrebbe rendere meno efficienti le queries.

    Nel tuo caso la chiamata è singola e che possa impiegare 100ms in più credo tu possa convenire che non deve essere il problema.

    Ora siccome io non uso mai le funzioni di Aggregazione in realtà scriverei del codice per farlo, la 2° delle 2 soluzioni.
    Ipotizzo che nella tua tabella [tabella1] ci sia un campo definito come ChiavePrimaria [Id] quindi essendo un Progressivo crescente ho ipotizzato che il numero più alto sarà ovviamente l'ultimo Record inserito dal quale andare a leggere il valore del campo [txtValore]:
    
    Private Sub Form_Current()
        If Me.NewRecord Then
            Dim rs As dao.Recordset
            Set rs = DBEngine(0)(0).OpenRecordset("SELECT TOP 1, txtvalore From tabella1 ORDER BY ID DESC", dbReadOnly, dbOpenDynaset)
            If Not rs.EOF Then Me.d.DefaultValue = Nz(rs.Fields("txtvalore").Value,0)
            rs.Close
            Set rs = Nothing
        End If
    End Sub
    
    Ora fai attenzione all'evento di DELETE... provalo e vedrai che servirà generare un Requery su evento AfterDelCofirm...

    Giocaci un pò e vedi se ti soddisfa, facci sapere dei PRO e CONTRO... e di eventuali migliorie..!
  • Re: Valore di default in un campo

    Scusa Alex,se avessi voluto trattarmi da ragazzino cosa avresti detto?
    Lascia stare la scuola e l'educazione e meno ancora i timori reverenziali (non mi pare di averli mai causati), a me la frase è suonata come il non aver capito le problematiche a causa dell'età.........
    Sappi comunque che non mi sono sentito offeso ,ci vuole ben altro e credo che questa piccola polemica possa finire qui chiedendo, da parte mia, venia se talvolta non riesco a capire e tradurre in pratica tutti i vostri suggerimenti.
    Domani proverò il codice che mi hai fornito e ti saprò dire.
    Buona notte
  • Re: Valore di default in un campo

    silene ha scritto:


    Scusa Alex,se avessi voluto trattarmi da ragazzino cosa avresti detto?
    I ragazzini, essendo tali non richiedono questo approccio... l'irrazionalità, tipica, la lascio agli altri.

    silene ha scritto:


    Lascia stare la scuola e l'educazione e meno ancora i timori reverenziali (non mi pare di averli mai causati), a me la frase è suonata come il non aver capito le problematiche a causa dell'età.........
    Sappi comunque che non mi sono sentito offeso ,ci vuole ben altro e credo che questa piccola polemica possa finire qui chiedendo, da parte mia, venia se talvolta non riesco a capire e tradurre in pratica tutti i vostri suggerimenti.
    Polemica finita da subito.
    Ti suggerisco tuttavia, quando ti vengono date risposte, di non snobbarne nemmeno una... ma di approfondire sempre i motivi per cui un'utente ti da una risposta ed un'altro una diversa...
    C'è sempre da imparare da tutti, e lo puoi fare solo se STUDI e ti confronti su tutte le risposte che ti vengono date, indipendentemente possano sembrare a te più idonee...
    In fondo per chi ha poca esperienza, anche i suggerimenti sbagliati potrebbero sembrare giusti... senza un contradditorio..., e capire è meglio che subire...!

    silene ha scritto:


    Domani proverò il codice che mi hai fornito e ti saprò dire.
    Buona notte
    Ottimo.
  • Re: Valore di default in un campo

    Salve Alex,
    ho provato la routine che mi hai fornito , l'ho analizzata passo per passo e dopo vari tentativi l'ho adattata ed ora funziona.
    Private Sub Form_Current()
    If IsNull(Me.valore1.Value) Then
    Dim rs As DAO.Recordset
    Set rs = DBEngine(0)(0).OpenRecordset("SELECT valore1 From tabella1 where not valore1 is null ORDER BY ID DESC", dbReadOnly, dbOpenDynaset)
    If Not rs.EOF Then Me.valore1.Value = rs.Fields("valore1").Value
    rs.Close
    Set rs = Nothing
    End If
    End Sub
    Il nuovo problema ora è inserire nella medesima routine un altro campo (valore2)con le stesse modalita del valore1. Ho fatto parecchi tentativi ma non sono riuscito.
    Se la puoi sistemare te ne sarei grato.
    Buona serata.
  • Re: Valore di default in un campo

    Innanzitutto hai commesso un'errore di concetto, quello di non usare la proprietà DEFAULTVALUE, cosa a mio avviso sbagliata.
    Altro errore è che hai eliminato il Test del NewRecord sempre molto importante, che ti ha costretto a controllare il dato presente...
    La query che hai scritto è assurda...

    Sinceramente non so cosa dire... hai stravolto il senso... sbagliando tecnicamente l'applicazione di concetti base.... boh...

    In tutti i casi recupera il Recordset con tutti i campi che ti servono modificando la Query, poi assegna il valore copiando il codice per il valore1.
Devi accedere o registrarti per scrivere nel forum
7 risposte