Ordinamento record prima del comando Move

di il
10 risposte

Ordinamento record prima del comando Move

Salve, qualcuno può aiutare?
Ho due tabelle e ho bisogno di ordinare i record prima della copia sulla seconda, per la giusta assegnazione.

Dim rst1 As DAO.Recordset
Dim rst2 As DAO.Recordset
Set rst1 = CurrentDb().OpenRecordset("TBVittoAss", dbOpenDynaset)
Set rst2 = CurrentDb().OpenRecordset("TBVittoTmp")
If rst1.EOF And rst1.BOF Then MsgBox "Nessun Record Trovato": Exit Sub

strSql = "SELECT FROM TBVittoAss ORDER BY TBVittoAss.Data, TBVittoAss.ordinario, TBVittoAss.Iddipendenti"


rst1.MoveFirst
Do Until rst1.EOF
rst2.AddNew
rst2!Data = rst1!Data
rst2!Iddipendenti = rst1!Iddipendenti
rst2!prot = "" & Format(IIf(IsNull(DMax("[Prot]", "[TBVittoTmp]", "[Prot] like '???/" & Format(rst2!Data, "MM/YYYY") & "'")), 1, Mid(DMax("[Prot]", "[TBVittoTmp]", "[Prot] like '???/" & Format(rst2!Data, "MM/YYYY") & "'"), 1, 3) + 1), "000") & "/" & Format(rst2!Data, "MM/YYYY")
rst2!Buonovitto = Left(rst2!prot, 3)
rst2!Bollettario = Mid(rst2!prot, 5, 2)
rst2!Anno = Right(rst2!prot, 4)
rst2!ordinario = rst1!ordinario
rst2!ValUni = rst1!ValUni
rst2.Update
rst1.MoveNext
Loop
rst1.Close
rst2.Close

Exit Sub
Set rst1 = Nothing
Set rst2 = Nothing

Grazie

10 Risposte

  • Re: Ordinamento record prima del comando Move

    Questo codice non ha nessun effetto sull'ordinamento

    strSql = "SELECT FROM TBVittoAss ORDER BY TBVittoAss.Data, TBVittoAss.ordinario, TBVittoAss.Iddipendenti"
  • Re: Ordinamento record prima del comando Move

    nellocose ha scritto:


    Questo codice non ha nessun effetto sull'ordinamento

    strSql = "SELECT FROM TBVittoAss ORDER BY TBVittoAss.Data, TBVittoAss.ordinario, TBVittoAss.Iddipendenti"
    Non hai dichiarato
    Dim strSql As String
    e oltre tale assegnazione non coinvolgi mai strSql nel resto del codice.

    nellocose ha scritto:


    Ho due tabelle e ho bisogno di ordinare i record prima della copia sulla seconda, per la giusta assegnazione.
    Io mi perdo in quel codice. Esponi:
    - tutti i campi di entrambe le tabelle
    - in cosa consiste la "giusta assegnazione"

    Se intuisco quello che vuoi fare, forse vuoi accodare record da Tabella1 in Tabella2 dopo aver formattato "diversamente" i campi. Giusto?

    N.B.: quando scrivi codice VBA o SQL, clicca sul tasto in basso "Editor completo & Anteprima", quindi seleziona tutto il codice e poi clicchi in alto sul tasto </>.
  • Re: Ordinamento record prima del comando Move

    nellocose ha scritto:


    Questo codice non ha nessun effetto sull'ordinamento

    strSql = "SELECT FROM TBVittoAss ORDER BY TBVittoAss.Data, TBVittoAss.ordinario, TBVittoAss.Iddipendenti"
    Quel codice è sbagliato..., non ti pare machi qualche cosa di fondamentale...?
  • Re: Ordinamento record prima del comando Move

    Avete ragione ho incollato il codice sbagliato, questo è quello giusto:
    Dim rst1 As DAO.Recordset
     Dim rst2 As DAO.Recordset
     Set rst1 = CurrentDb().OpenRecordset("TBVittoAss", "SELECT * From TBVittoAss ORDER BY Data", dbOpenDynasetdbOpenDynaset)
     Set rst2 = CurrentDb().OpenRecordset("TBVittoTmp")
            Dim strSql As String
            strSql = "SELECT FROM TBVittoAss ORDER BY TBVittoAss.Data, TBVittoAss.ordinario, TBVittoAss.Iddipendenti"
    Set rst2 = db.OpenRecordset(strSql, dbOpenDynaset)
    
    If rst1.EOF And rst1.BOF Then MsgBox "Nessun Record Trovato": Exit Sub
          rst1.MoveFirst
         Do Until rst1.EOF
                 rst2.AddNew
                 rst2!Data = rst1!Data
                 rst2!Iddipendenti = rst1!Iddipendenti
                 rst2!prot = "" & Format(IIf(IsNull(DMax("[Prot]", "[TBVittoTmp]", "[Prot] like '???/" & Format(rst2!Data, "MM/YYYY") & "'")), 1, Mid(DMax("[Prot]", "[TBVittoTmp]", "[Prot] like '???/" & Format(rst2!Data, "MM/YYYY") & "'"), 1, 3) + 1), "000") & "/" & Format(rst2!Data, "MM/YYYY")
                 rst2!Buonovitto = Left(rst2!prot, 3)
                 rst2!Bollettario = Mid(rst2!prot, 5, 2)
                 rst2!Anno = Right(rst2!prot, 4)
                 rst2!ordinario = rst1!ordinario
                 rst2!ValUni = rst1!ValUni
                 rst2.Update
                 rst1.MoveNext
                    Loop
     rst1.Close
     rst2.Close
    
    Exit Sub
     Set rst1 = Nothing
     Set rst2 = Nothing
    
    Praticamente ho la necessità di accodare dei record da tabella1 a tabella2, prima però ho bisogno di ordinarli affinché prendano un numero progressivo, "Protocollo" ed univoco.
  • Re: Ordinamento record prima del comando Move

    Ti rinnovo l'osservazione... Non ti pare manchi qualche cosa nel predicato SQL...?

    Quel codice ha un sacco di errori sembra un puzzle di roba scopiazzata a destra e sinistra... guardalo bene e metti la gestione errori...

    A prescindere quello che vuoi fare si fa con 1 query di accodamento e nessuna riga di codice.
  • Re: Ordinamento record prima del comando Move

    Questo codice funziona bene da oltre 5 anni. Ora mi occorrerebbe solo un aiuto per aggiungere a questo codice un ordinamento dei record
    Dim rst1 As DAO.Recordset
    Dim rst2 As DAO.Recordset
    Set rst1 = CurrentDb().OpenRecordset("TBVittoAss", dbOpenDynaset)
    Set rst2 = CurrentDb().OpenRecordset("TBVittoTmp")
    If rst1.EOF And rst1.BOF Then MsgBox "Nessun Record Trovato": Exit Sub
    rst1.MoveFirst
    Do Until rst1.EOF
    rst2.AddNew
    rst2!Data = rst1!Data
    rst2!Iddipendenti = rst1!Iddipendenti
    rst2!prot = "" & Format(IIf(IsNull(DMax("[Prot]", "[TBVittoTmp]", "[Prot] like '???/" & Format(rst2!Data, "MM/YYYY") & "'")), 1, Mid(DMax("[Prot]", "[TBVittoTmp]", "[Prot] like '???/" & Format(rst2!Data, "MM/YYYY") & "'"), 1, 3) + 1), "000") & "/" & Format(rst2!Data, "MM/YYYY")
    rst2!Buonovitto = Left(rst2!prot, 3)
    rst2!Bollettario = Mid(rst2!prot, 5, 2)
    rst2!Anno = Right(rst2!prot, 4)
    rst2!ordinario = rst1!ordinario
    rst2!ValUni = rst1!ValUni
    rst2.Update
    rst1.MoveNext
    Loop
    rst1.Close
    rst2.Close
    
    Exit Sub
    Set rst1 = Nothing
    Set rst2 = Nothing
    
    Grazie
  • Re: Ordinamento record prima del comando Move

    Ma tu ritieni siamo lenti...?
    Questo.codice di adesso non ha nulla a che vedere con quello di prima mi pare si sia perso un sacco di tempo.
    Le modifiche che hai introdotto sono tipiche di chi non ha la più pallida idea di cosa stia scrivendo e questo codice non lo hai scritto tu...
    Devi scrivere un predicato SQL che contenga l'ordinamento ma non al posto di Rst2 che non ha alcun senso dal momento che lo usi in ADDNEW quanto magari su RST1 che invece lo usi per ciclare... e tu anche sbagliando la sintassi sql hai maldestramente fatto il contrario... quindi o stai facendo.cose che non servono oppure non ti è chiarissima la cosa....

    P.s. ti ripeto che si fa anche senza codice con una query.
  • Re: Ordinamento record prima del comando Move

    @Alex ha scritto:


    Ma tu ritieni siamo lenti...?
    Questo.codice di adesso non ha nulla a che vedere con quello di prima mi pare si sia perso un sacco di tempo.
    Le modifiche che hai introdotto sono tipiche di chi non ha la più pallida idea di cosa stia scrivendo e questo codice non lo hai scritto tu...
    Devi scrivere un predicato SQL che contenga l'ordinamento ma non al posto di Rst2 che non ha alcun senso dal momento che lo usi in ADDNEW quanto magari su RST1 che invece lo usi per ciclare... e tu anche sbagliando la sintassi sql hai maldestramente fatto il contrario... quindi o stai facendo.cose che non servono oppure non ti è chiarissima la cosa....

    P.s. ti ripeto che si fa anche senza codice con una query.
    Parla senza conoscere e Nutre la Sua arroganza con il sapere.
    Ho fatto l'iscrizione a questo forum perché avevo bisogno di aiuto per implementare un database sviluppato da Me per l'ufficio in cui lavoro negli anni 90, sottolineo, senza un briciolo di conoscenza.
    Il codice di cui stiamo parlando è frutto di prove e prove e ore ore di sonno perse, quindi per Me motivo d'orgoglio, tanto che questo ridicolo database lo usano ancora circa un centinaio di persone ed uno di essi mi chiedeva se fosse possibile una implementazione in quanto ancora molto valido pur avendo subito poche modifiche negli anni.
    Per tornare all'oggetto del contendere, Lei @Alex Utente Senior, ha solo fatto sfoggio del Suo sapere criticando ed offendendo.
    Pensa forse che se fossi stato al suo livello di conoscenza mi sarei iscritto a questo forum che Mi guarderò in futuro di non frequentare più.
    Ringrazio per i modi Osvaldo Laviosa.
    Cordialmente
  • Re: Ordinamento record prima del comando Move

    Parla senza conoscere e Nutre la Sua arroganza con il sapere.
    Ho fatto l'iscrizione a questo forum perché avevo bisogno di aiuto per implementare un database sviluppato da Me per l'ufficio in cui lavoro negli anni 90, sottolineo, senza un briciolo di conoscenza.
    Il codice di cui stiamo parlando è frutto di prove e prove e ore ore di sonno perse, quindi per Me motivo d'orgoglio, tanto che questo ridicolo database lo usano ancora circa un centinaio di persone ed uno di essi mi chiedeva se fosse possibile una implementazione in quanto ancora molto valido pur avendo subito poche modifiche negli anni.
    Per tornare all'oggetto del contendere, Lei @Alex Utente Senior, ha solo fatto sfoggio del Suo sapere criticando ed offendendo.
    Pensa forse che se fossi stato al suo livello di conoscenza mi sarei iscritto a questo forum che Mi guarderò in futuro di non frequentare più.
    Ringrazio per i modi Osvaldo Laviosa.
    Cordialmente
    Sbagliato, io ho letto tutti i tuoi POST ed hai scritto 3 versioni diverse di codice, dicendo anche che il 2° fosse quello corretto(se fosse così nemmeno è stato provato perchè contiene errori macroscopici) di cui non si comprende nulla e di cui nemmeno tu comprendi cosa hai fatto scrivendo dichiarazioni doppie, ma alla base è la logica che applichi a non aver alcun senso.
    Ti inviterei a riflettere prima di scrivere cose inutili n volte, ti ho già scritto anche la soluzione analizzando l'incoerenza delle confuse informazioni fornite, e sarebbe bene che nonosante tu abbia chiaramente delle lacune, quanto meno un riferimento lo abbia, altrimenti se il metodo è andare a tentoni non ci siamo.

    Purtroppo si vede che oltre ad essere permaloso, hai poca attenzione a quello che ti viene detto, perchè, nonostante il pippone che fai... ti ho spiegato cosa hai sbagliato e la logia corretta di come operare.

    Lasciamo stare "io faccio io brigo...", levati il cappello di calimero, ragionaci sopra e cerca di darti da fare in modo concreto...

    Per il resto... senza BASI si riduce tutto al farti correggere il codice, ma non lo facciamo, quindi se ti bastano i suggerimenti puoi sforzarti a leggere e studiare un pochetto... bene, riceverai aiuto, se il tutto si riduce a scivere cose insensate sostenendo il contrario..., non serve a nessuno...
  • Re: Ordinamento record prima del comando Move

    1. Facciamo un piccolo sforzo tutti quanti nel fornire solo informazioni tecniche e smetterla di buttarci pesci in faccia? Il cattivo linguaggio nel forum non è accettato/consentito...da nessuno.
    2. Basta questo

    nellocose ha scritto:


    Praticamente ho la necessità di accodare dei record da tabella1 a tabella2, prima però ho bisogno di ordinarli affinché prendano un numero progressivo, "Protocollo" ed univoco.
    per capire che non ti serve manipolare i recordset. Ti serve impostare per bene la query. Falla prima come "query di selezione" (usa la visualizzazione struttura query...è così comoda/intuitiva e a portata di colpo d'occhio per l'utente) per vedere se i dati da accodare saranno coerenti e dagli un nome. Poi la trasformi in "query di accodamento". La esegui una volta sola e il gioco è fatto.
Devi accedere o registrarti per scrivere nel forum
10 risposte