LETTURA TABELLA DA CODICE VBA

di il
8 risposte

LETTURA TABELLA DA CODICE VBA

Mi succede qualche cosa di strano. Ho una tabella nella quale nel primo campo dei record ho inserito ad esempio i valoti 1,2,3,4 ,, 8. Leggendo i valori della tabella da codice mi succede che il valore del terzo record viene visualizzato per ultimo, cioè leggo 1,2,4,..8,3. Come mai?

8 Risposte

  • Re: LETTURA TABELLA DA CODICE VBA

    TRICCA ha scritto:


    ...Leggendo i valori della tabella da codice mi succede che il valore del terzo record viene visualizzato per ultimo, cioè leggo 1,2,4,..8,3. Come mai?
    I motivi possono essere vari. Come apri il recordset? Quel campo è chiave primaria o indicizzato? In ogni caso se ha importanza l'ordine, metti un "ORDER BY" nell'apertura del recordset (che quindi non potrà essere di tipo dbTable).
    Tutto questo però potrebbe portare ad una domanda ulteriore: a te interessa l'ordine di inserimento o l'ordine in base a quel campo? oppure ancora quel campo deve rappresentare l'ordine di inserimento?
  • Re: LETTURA TABELLA DA CODICE VBA

    Ecco lo script


    Private Sub Comando83_Click()
    Dim DB As dao.Database
    Dim AST As dao.Recordset
    Set DB = DBEngine.Workspaces(0).Databases(0)
    Set AST = DB.OpenRecordset("ASTE", DB_OPEN_TABLE)

    AST.Edit
    T = AST.RecordCount

    For I = 1 To T
    NAS = AST!aste
    H = AST!H
    S = AST!S
    n1 = AST!n1
    n2 = AST!n2
    AST.MoveNext
    Next I
    End Sub

    vorrei che l'ordinamento dei dati in lettura sia lo stesso dei dati della tabella. Grazie.
  • Re: LETTURA TABELLA DA CODICE VBA

    TRICCA ha scritto:


    ...
    Set AST = DB.OpenRecordset("ASTE", DB_OPEN_TABLE)
    ...
    Questo risponde ad una delle mie domande.
    Cosa intendi per

    TRICCA ha scritto:


    vorrei che l'ordinamento dei dati in lettura sia lo stesso dei dati della tabella.
    ?
    Dimentica come "vedi" i dati quando apri la tabella dall'interfaccia grafica.
    In questo momento stai accedendo ai dati tramite un recordset, di un tipo ben preciso. I dati vengono ordinati in base all'ordine di inserimento (che viene gestito automaticamente dal programma, sul quale tu non puoi intervenire). E' ovvio che il campo (di cui non conosciamo le caratteristiche) viene valorizzato seguendo un altro criterio (cioè non quello di inserimento) devi usare un recordset diverso, dbOpenDynaset, ad esempio bastato su una query dove hai aggiunto il criterio di ordinamento per quel determinato campo (oppure scrivendo direttamente la SQL).
    Nota (non del tutto) a margine: Script, DB_OPEN_TABLE. Di quale versione di Access parliamo? Siamo in VBA?
  • Re: LETTURA TABELLA DA CODICE VBA

    Per prima cosa si deve accertarsi.che il bookmark del recordset sia al primo record... cosa non scontata... secondo la proprietà Recordcount non è affidabile se prima non si scorre tutto il recordset affinché venga aggiornato... do solito si usa Movelast.

    Per ultimo il tuo metodo per scorrere i records non è il massimo...
    
    Rs.movefirst
    Do Until rs.eof
       ....
       ....
       Rs.movenext
    Loop
    
  • Re: LETTURA TABELLA DA CODICE VBA

    @Alex ha scritto:


    ...secondo la proprietà Recordcount non è affidabile ...
    E' un dbOpenTable (o DB_OPEN_TABLE, secondo il suo codice), RecordCount è affidabile fin da subito.
  • Re: LETTURA TABELLA DA CODICE VBA

    Philcattivocarattere ha scritto:


    @Alex ha scritto:


    ...secondo la proprietà Recordcount non è affidabile ...
    E' un dbOpenTable (o DB_OPEN_TABLE, secondo il suo codice), RecordCount è affidabile fin da subito.
    Mmm si è no... mi ricorda la questione dei sacchetti della plastica... per 1÷2 o maggiore di 3...

    Questi documenti definiscono che la proprietà NON È affidabile per aperture Dynaset e Snapshot... ma OpenTable...?

    https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/recordset-recordcount-property-dao

    https://docs.microsoft.com/en-us/office/vba/access/concepts/data-access-objects/count-the-number-of-records-in-a-dao-recordset

    Tuttavia... credo tu abbia ragione ma non trovo un dettaglio scritto... in ogni caso .... il problema maggiore è cosa fa quel codice... e scommetto avrà solo 3 records ... e lui legge l'ultimo... ovviamente le variabili sono sempre le stesse memorizzano sempre il record attuale sottoscrivendo continuamente.
  • Re: LETTURA TABELLA DA CODICE VBA

    @Alex ha scritto:


    Mmm si è no... mi ricorda la questione dei sacchetti della plastica... per 1÷2 o maggiore di 3...
    Sacchetti? quali sacchetti? non so di cosa parli. Questo è un forum tecnico e le risposte devono essere pertinenti. (certo che càpita proprio a fagiolo)
    Tuttavia... credo tu abbia ragione ma non trovo un dettaglio scritto...
    La prima riga del primo link
    Returns (omissis) the total number of records in a table-type Recordset object

    Secondo paragrafo del secondo link
    The RecordCount property contains the number of records in a table-type Recordset

    @Alex ha scritto:


    in ogni caso .... il problema maggiore è cosa fa quel codice...
    L'esperienza insegna che il problema evidenziato potrebbe essere solo la punta dell'iceberg, poi si viene a scoprire che c'è un po' tutto che non va ma per ora non ci sono elementi per ulteriore analisi.

    PS: i sacchetti della plastica sono un riferimento ironico esterno al forum. In barba a "fama" e nickname, entrambi sappiamo cos'è l'ironia (io di più, ovviamente).
  • Re: LETTURA TABELLA DA CODICE VBA

    I sacchetti erano un riferimento puramente casuale... ma la telepatia vedo che funziona...ehehe

    Dallo smartphone probabilmente faccio fatica a leggere... corretto ora che me lo hai fatto notare l'ho trovato... lo ricordavo a memoria ma non sono abituato ad andare a memoria.

    Per il resto direi che i problemi sono molti.... aspettiamo...
Devi accedere o registrarti per scrivere nel forum
8 risposte