Ultimo valore

di il
10 risposte

Ultimo valore

Ciao,
Ho una scheda che alimenta una tabella.
La scheda ha un campo chiamato "progressivo" collegato al campo (testo) della tabella.
Vorrei che la scheda "suggerisse" per il campo [progressivoo] il valore dell'ultimo record scritto nella tabella + 1.
per far questo fino ad ora ho utilizzato la funzione Dlast applicata alla tabella immessa nelle impostazione di "valore predefinito del campo della scheda.
Valore Predefinito: =DLast("[PROGRESSIVO]";"COMMESSE")+1

Fino ad ora ha funzionato bene, ma adesso.....
Il valore restituito non corrisponde più all'ultimo ma rimane fisso al valore di un record in mezzo alla tabella.
Anche facendo una query e impostando la funzione "Ultimo" per il campo [PROGRESSIVO] mi restituisce sempre lo stesso valore....
Cosa è successo nel frattempo non so.
Come posso fare a risolvere il problema?

Grazie a tutti inanticipo per l'aiuto.

Andrea

10 Risposte

  • Re: Ultimo valore

    La cosa che non è chiara... è il motivo del "+1" visto che dici che il campo è di tipo TESTO...!

    Cosa ottieni da "1" + 1...? 2, questo perchè il Casting del dato viene fatto sul NUmerico...
    Ma se fai "A"+1 cosa ottieni...? Errore...
    E se fai "01"+1 è giusto ottenere 2...? Oppure dovresti ottenere "02"...?

    Quale è il tuo scenario...?
  • Re: Ultimo valore

    Scusate... ovviamente il campo [Progressivo] è un campo di tipo numerico (dimensione : Intero lungo).
    Il campo voglio che funzioni esattamente come un contatore e che mostri in fase di inserimento di un nuovo record il valore dell'ultimo record inserito aumentato di 1.
    Allego anche una schermata in cui è visibile il malfunzionamento anche di una query in cui vieve applicata la funzione "ultimo". Come si vede la query restituisce per il campo [PROGRESSIVO] il valore 241, mentre nella tabella l'ultimo valore è 244....

    Il mistero è che su versioni precedenti del medesimo database la funzionalità funziona correttamente...

    Grazie
    Andrea
    Allegati:
    10348_478c38ab19aea8d779b767699f9d1169.jpg
    10348_478c38ab19aea8d779b767699f9d1169.jpg
  • Re: Ultimo valore

    Io ho il sospetto che, per un motivo X, o distrazione, tu possa aver deciso di ordinare la tabella in base ad un campo diverso da IDCommessa (Contatore). Ciò ti avrebbe causato una diversa disposizione dei record e, di conseguenza, il tuo predefinito DCount...+1 avrebbe agito sull'ultimo record "ora mostrato". Dovresti impostare in modo che la tabella si apra sempre ordinata in base a IDCommessa.
    La query funziona correttamente, ma anch'essa andrebbe impostata diversamente. Il valore Ultimo è sufficiente impostarlo soltanto su un campo, e poi anche la query deve essere certa che l'ordinamento sia coerente a quello che tu stai cercando.
  • Re: Ultimo valore

    Buongiorno,
    Ho controllato la tabella, ma non mi risultano ordinamenti in base a campi diversi dal contatore.
    Ho provato in ogni caso a ordinare i record in base al campo contatore (a scanso di equivoci) ed ho salvato la tabella. Tuttavia il valore della funzione ultimo della query è sempre 241.
    Inoltre aggiungo che anche inserendo nuovi record nella tabella COMMESSE il valore della funzione "ultimo" sulla query è sempre il solito.
    Allego nuovamente l'immagine della schermata con la query e la tabella.
    Come si può vedere, dopo aver ordinato la tabella ho inserito un nuovo record nella tabella commesse, ma il valore predefinito risulta 242, cioè 241+1, proprio perchè il valore della funzione "ultimo" (come si vede dalla query in alto) è sempre 241!!

    Anche se non si riesce a risolvere questo problema (che mi sembra misterioso....), avete una idea su come arrivare allo stesso risultato ("proporre come predefinito sul campo [PROGRESSIVO] l'ultimo valore della tabella aumentato di 1")?

    Grazie
    Andrea
    Allegati:
    10348_0dd23a63467be8d91cfa0429f646c548.jpg
    10348_0dd23a63467be8d91cfa0429f646c548.jpg
  • Re: Ultimo valore

    Voglio sperare che in visualizzazione struttura query appaia soltanto questa tabella, talvolta per dimenticanza, compare qualche altra eventualmente correlata (metti il caso che ti sei messo a fare delle prove) che fa sballare il risultato finale.

    Per me devi creare una "query a scanso di equivoci" così strutturata:
    1) importa soltanto questa tabella
    2) trascina nella griglia i campi IDCOMMESSA e PROGRESSIVO
    3) imposta Crescente soltanto a IDCOMMESSA
    4) clicca sul tasto Totali, lascia Raggruppamento a IDCOMMESSA, imposta Ultimo a PROGRESSIVO

    meglio ancora:
    2) trascina nella griglia solo il campo PROGRESSIVO
    3) imposta Crescente
    4) clicca sul tasto Totali, imposta Ultimo a PROGRESSIVO
  • Re: Ultimo valore

    Prova già fatta.
    Risultato identico.
    Ultimo valore 241....

    Secondo me è un problema sulla tabella ma non saprei identificare quale (visto che sembra "non riconoscere" le successive registrazioni come "Record" successivi al record 3781 (campo contatore) corrispondente al 241 di PROGRESSIVO.

    Ma un altro metodo non esiste?
    Grazie
    Andrea
  • Re: Ultimo valore

    Andrea50018 ha scritto:


    Ma un altro metodo non esiste?
    Sostanzialmente non ha molto senso avere 2 campi Contatore nella stessa tabella. Access stesso impedisce di poterlo fare. Quell'artificio che avevi inventato è tanto forzato quanto delicato al cedere al minimo cambiamento di situazione Ordinamento, filtro, query o quant'altro che deve aver corrotto il meccanismo.
  • Re: Ultimo valore

    Ma non era assolutamente mia intenzione creare un secondo campo contatore. La chiave primaria della mia tabella COMMESSE è unica ed è rappresentata dal contatore.
    La ragione di tutto questo, sta nel tentativo di facilitare l'immissione dati nella maschera (collegata alla tabella COMMESSE) da parte dell'operatore in modo che attivando una nuova commessa non si debba ricordare a quale numero PROGRESSIVO era arrivato. (il numero PROGRESSIVO delle commesse è annuale, nel senso che di anno in anno viene azzerato ripartendo da 1). Per questo motivo sono obbligato ad usare la funzione ULTIMO e non MAX (che mi restituirebbe un valore non valido per la numerazione dell'anno in corso).

    grazie comunque per la pazienza
    Andrea
  • Re: Ultimo valore

    Ho una novità....
    Nel modificare la una scheda del database sono incorso in un errore che ha provocato la chiusura di Access. Dopo la chiusura Access si è riaperto automaticamente compattandosi e creando una copia di backup.
    Ebbene.... la copia creata ora è tornata a funzionare!

    Forse ogni tanto devo usare l'utility "compatta database"?

    Ciao
    Andrea
  • Re: Ultimo valore

    Auguri!
    Compatta e ripristina database, serve di tanto in tanto, non fa male.
    Rileggendo con calma il tutto, penso che potrebbero essere successe una o più cose concausa a catena..........

    1) Immagino che la tua tabella non abbia relazioni con altre tabelle (questo semplifica il mio discorso) e che, tutte le volte che hai inserito records sbagliando, tu li abbia cancellati ora qua ora là. Non so se hai notato, ma quando cancelli i record, il campo Contatore salta la numerazione dimenticando quello cancellato e passando al numero progressivo successivo. Beh, tale numerazione "regolare", normalmente non la recuperi più, tranne nel caso che si tratti degli ultimi record..........mi spiego meglio, se hai una numerazione
    1
    2
    3
    4
    6
    7
    9
    in questo caso 5 e 8 non li recuperi più.
    Ma se a questa stessa numerazione elimini 7 e 9, poi Compatti e ripristini, Access rinumera regolarmente dal 7,8,9 ecc....
    Ovvero sia, se decidi momentaneamente di eliminare il campo contatore, Compatti e ripristini, rimetti il campo contatore, questo ti restituirà tutta la numerazione corretta.
    Questo meccanismo, potrebbe aver giocato la sua parte da qualche parte, ma ho sospetti più importanti...

    2) Quando tu parli di scheda, è un termine antico di Access, oggi si chiama maschera, può accadere che certe proprietà, come può essere Ordinamento, possano essere indipendenti da quelle della tabella che c'è sotto. Io temo che tu avessi la tabella ordinata in un modo, mentre la maschera in un altro, o comunque qualche filtro/query del genere che entrava in funzione.
    Sul problema di essere sicuri che una maschera, all'apertura riporti un certo ordinamento corretto (secondo i propri gusti), ti proporrei di impostare un codice o un'azione macro all'evento "Su apertura" della maschera, che imposti tale Ordinamento sempre. Da quel momento in poi, devi avere cura di non giocare con nessun comando di Ordinamento, altrimenti la tua funzione darà risultati sbagliati.
Devi accedere o registrarti per scrivere nel forum
10 risposte