Allora vorrei rispondere a tutti non innalzando alcuna polemica.
Non sono un esperto di VBA ma nemmeno mi considero un novellino che chiede la differenza tra un "left join" od un "inner join".
Aldilà di questa valutazione personale voglio spiegare il perchè della mia richiesta.
Ho ereditato un Database diviso in varie tabelle (e' un database per la gestione di eventi di un'associazione sportiva).
Nelle due tabelle pertinenti al discorso ho una relazione 1 a molti. Le tabelle in questione le chiamerò "EVENTO" e "SCAMBIO_EVENTO".
Quando si crea un "EVENTO" i vari partecipanti a quell'evento vengono progressivamente numerati. Ma il loro ordinamento reale deriva da una funzione che tiene conto di 3 parametri, ovvero il tipo di ruolo in quell'evento, il numero di persone che compongono un gruppo in quell'evento (i gruppi vanno da singolo a N....) e per ultimo la loro sequenza d'inserimento.
Dato che è un calcolo molto complesso che mi ha preso una settimana per strutturarlo (io ho sminuito i 3 parametri che sono quelli principali, ma in realtà la casistiche sono molteplici e non sto qui ad elencarvele).
Ora l'utente a "video" ottiene sempre un ordine corretto perchè la query la ordino nei vari campi come crescente o decrescente a seconda del parametro che sto studiando. Ma i calcoli per l'EFFETTIVO ordinamento corretto su cui ad ogni inserimento il nuovo "partecipante" dovrà trovare il "suo posto" vengono eseguiti da due funzioni a latere, che hanno necessità di un minimo ordinamento di base per non:
- A sprecare risorse nel controllo e ricerca (parliamo di un DB con circa 100.000 dettagli sulla tabella "SCAMBIO_EVENTO")
- B rischiare di associare un ordinamento scorretto (e questo in termini di SICUREZZA per l'EVENTO)
Comunque sia ho risolto sfruttando l'idea di @max.riservo di creare un recordset di tipo snapshot e ciclando i vari record ordinandoti (in base al progressivo) e scambiandoli di volta in volta.
Nella fattispecie:
Set Tabella = DbCorrente.OpenRecordset("SCAMBIO_EVENTO", dbOpenDynaset)
Set TabClone = DbCorrente.OpenRecordset("SCAMBIO_EVENTO", dbOpenSnapshot)
Tabella.MoveFirst
TabClone.MoveFirst
I = 1
I2 = 1
TabClone.FindFirst ("Cod=" & Code & " And Numero_posto=" & I)
Tabella.FindFirst ("Cod=" & Code)
While Not TabClone.NoMatch
For I2 = 2 To (TabClone.Fields.Count - 1)
Tabella.Edit
Tabella.Fields(I2) = TabClone.Fields(I2)
Tabella.Update
Next I2
Tabella.MoveNext
TabClone.MoveFirst
I = I + 1
TabClone.FindFirst ("Cod=" & Code & " And Numero_posto=" & I)
Wend
Grazie per le Vs risposte e delucidazioni anche in merito al discorso di "necessità" di una tale operazione a livello logico.
Nel MIO caso specifico DEVO adottare questa strategia.