Scambio Record Tabella VBA

di il
16 risposte

16 Risposte - Pagina 2

  • Re: Scambio Record Tabella VBA

    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.
  • Re: Scambio Record Tabella VBA

    Come vuoi, personalmente continuo a pensare che sia una operazione inutile che non si fa MAI con i DB. Sicuramente la necessità deriva da una cattiva analisi del problema (forse per la sua particolare complessità). Buon lavoro
Devi accedere o registrarti per scrivere nel forum
16 risposte