Scambio Record Tabella VBA

di il
16 risposte

Scambio Record Tabella VBA

Spero che il Titolo non tragga in inganno.

Sono alla ricerca di un'idea "Funzionale" per scambiare i record di una tebella.

Ovvero..

Ho una tabella con N campi. In base ad alcuni calcoli di priorità ottengo che tale tabella va riordinata. Visivamente ottengo la visualizzazione giusta in maschera applicando un ordinamento sul campo "priorità". Ma se io volessi di fatto scambiare il Record "N" con il record "N......" senza doverli eliminare o utilizzare tabelle d'appoggio, come posso farlo con VBA senza dover passare "campo per campo" ad una variabile temporanea?

Spero di essermi spiegato ed attendo Idee in merito.

16 Risposte

  • Re: Scambio Record Tabella VBA

    No, non mi pare abbia senso. La tabella non ha un suo ordine. I record li ottieni come vuoi in base alla query che esegui edè la via giusta.
  • Re: Scambio Record Tabella VBA

    Aldilà del senso pratico o meno.

    Se io volessi scambiare il Record 1: Mario Rossi
    con il Record 100: Anna Verdi

    SENZA agire sul loro ID ma scambiando semplicemente i valori "MARIO ROSSI" con "ANNA VERDI" (se fosse solo 1 campo sarebbe facile ma trattasi di una tabella con 37 campi), esiste un metodo applicabile? Oppure avete un'idea?! Io sto provando a pensare come fare ma non voglio dover creare una tabella d'appoggio che poi va pulita, gestita, ecc ecc. Vorei semplicemente scambiare i valori tra il record 1 e il record N senza diventare matto gestendo N campi.
  • Re: Scambio Record Tabella VBA

    Ciao.
    Non mi risulta che esista una funzione del genere in nessun tipo di database.
    Ma la tua è solo una funzione estetica, oppure una esigenza pratica che non comprendo?
    Di primo acchitto quello che mi viene in mente è creare una nuova tabella creata con i dati riordinati, per poi cancellare la vecchia e rinominare la seconda, oppure usare la stessa tabella e fare l accodamento dei dati ordinati cancellando quelli vecchi.
    Però tutto questo non ha senso. Come gestisci poi le chiavi primarie che inevitabilmente cambierebbero, mandando a ramengo tutti i collegamenti?
  • Re: Scambio Record Tabella VBA

    Ma devi scambiare tutto il record, oppure scambiare dolo i dati di alcuni campi?
  • Re: Scambio Record Tabella VBA

    Ok come non detto
  • Re: Scambio Record Tabella VBA

    Ma devi scambiare tutto il record, oppure scambiare dolo i dati di alcuni campi?
    Devo scambiare tutti i campi tranne l'ID per mantenere l'integrità nelle relazioni.

    Il mio è un tentativo di ottimizzare ciò che sto sviluppando. Ad ora sfrutto il sistema suggeritomi di accodare i dati nuovamente alla tabella in modo ordinato, ma ciò comporta l'eliminazione del record precedente ecc ecc.

    Perciò mi chiedevo se conoscendo l'ordinamento che gli "N" record (non tutti) devono avere che ho salvato in un array dove conservo i loro ID in modo "riordinato", posso fare lo scambio dei dati tra record "X" e record "Y" senza dover accodare dati ma semplicemente scambiando i campi desiderati?
  • Re: Scambio Record Tabella VBA

    Il senso dell'operazione lo sai solo ... quindi non lo discuto anche se mi 'perplime'.

    Di fatto tu vorresti realizzare lo 'swap' di 2 records (non cambiando SOLO la chiave primaria/ID): quindi non esistendo una funzione che lo faccia te la devi creare tramite VBA.
    Possibile soluzione, supponendo di voler copiare ID1 in ID2 e viceversa:
    - crei un recordset (RS1) di tipo snapshot (non aggiornabile) che contiene ID1 e ID2
    - crei un recordset aggiornabile (RS2) che contiene ID1 e ID2
    - entrambi i recordset devono avere gli stessi campi. Se hanno anche lo stesso ordinamento puoi copiare i dati sfruttando la posizione numerica altrimenti devi utilizzare il nome del campo.
    - ti posizioni sul record ID1 (RS1)
    - ti posizioni sul record ID2 (RS2)
    - tramite VBA scorri la collection Fields di RS2 e aggiorni tutti i campi (tranne la chiave primaria /ID) con gli stessi campi presi da RS1. Di fatto in ID2 ti ritrovi i valori di ID1 a parte l'ID
    - ti posizioni sul record ID2 (RS1)
    - ti posizioni sul record ID1 (RS2)
    - tramite VBA scorri la collection Fields di RS2 e aggiorni tutti i campi (tranne la chiave primaria /ID) con gli stessi campi presi da RS1. Di fatto in ID1 ti ritrovi i valori di ID2 a parte l'ID
    - chiudi i recordset

    Si tratta di un lavoro in VBA abbastanza semplice, sebbene un poco articolato e quindi non alla portata di chi non conosce VBA decentemente e/o si limita a fare copia/incolla di pezzi di codice trovati in giro.

    Nota : Scorrendo la collection Fields puoi anche capire il tipo di campo e se questo è di tipo autoincrement (e quindi non lo copi tra i record). Nel caso il tuo campo chiave non fosse autoincrement puoi ancora tentare di capire in maniera programmatica quale può essere il campo chiave verificando gli indici : quello univoco dovrebbe essere la tua chiave primaria (attenzione che un indice può essere composto da più campi).
  • Re: Scambio Record Tabella VBA

    Secondo me nn vanno alimentate idee senza senso logico nè di programmazione.
    Non si fa anche se tecnicamente si può fare, non si fa perchè non ha senso
  • Re: Scambio Record Tabella VBA

    Anche io la penso così, non ha assolutamente senso.
  • Re: Scambio Record Tabella VBA

    Secondo me nn vanno alimentate idee senza senso logico nè di programmazione.
    Non si fa anche se tecnicamente si può fare, non si fa perchè non ha senso
    Il senso logico da chi e cosa deriva?
    Anche io la penso così, non ha assolutamente senso.
    Dipende dai punti di vista.

    Comunque sia il mio quesito grazie a chi ha voluto offrirmi un idea è stato risolto.

    Non intendo alimentare la polemica sulla valutazione della mia richiesta. Anche perchè non ho chiesto "é giusto?", bensì come potrei districarmi in questo problema, aldilà della "pulizia e correttezza" delle mie considerazioni tecniche.
  • Re: Scambio Record Tabella VBA

    LoScortese ha scritto:


    Comunque sia il mio quesito grazie a chi ha voluto offrirmi un idea è stato risolto.
    Quindi hai implementato quanto suggerito da me? Oppure?

    (Forse) Sarebbe utile condividere il codice adottato ...
  • Re: Scambio Record Tabella VBA

    LoScortese ha scritto:


    Secondo me nn vanno alimentate idee senza senso logico nè di programmazione.
    Non si fa anche se tecnicamente si può fare, non si fa perchè non ha senso
    Il senso logico da chi e cosa deriva?
    Anche io la penso così, non ha assolutamente senso.
    Dipende dai punti di vista.

    Comunque sia il mio quesito grazie a chi ha voluto offrirmi un idea è stato risolto.

    Non intendo alimentare la polemica sulla valutazione della mia richiesta. Anche perchè non ho chiesto "é giusto?", bensì come potrei districarmi in questo problema, aldilà della "pulizia e correttezza" delle mie considerazioni tecniche.
    il senso del forum non è solo quello di far si che il richiedente arrivi ad una soluzione ma quello di reindirizzare i problemi nella giusta direzione in modo che anche altri che si trovino nella stessa situazione (o come in questo caso abbiano la stessa idea di come si lavora sui record) non commettano gli stessi errori ...
    quindi, siccome non è stata data una spiegazione logica e tecnica ad una cosa che "ai più" appare errata rimango della mia idea
    e aggiungo che non deve esistere un "aldilà del senso pratico"
  • Re: Scambio Record Tabella VBA

    LoScortese ha scritto:


    Secondo me nn vanno alimentate idee senza senso logico nè di programmazione.
    Non si fa anche se tecnicamente si può fare, non si fa perchè non ha senso
    Il senso logico da chi e cosa deriva?
    Anche io la penso così, non ha assolutamente senso.
    Dipende dai punti di vista.

    Comunque sia il mio quesito grazie a chi ha voluto offrirmi un idea è stato risolto.

    Non intendo alimentare la polemica sulla valutazione della mia richiesta. Anche perchè non ho chiesto "é giusto?", bensì come potrei districarmi in questo problema, aldilà della "pulizia e correttezza" delle mie considerazioni tecniche.
    Non voglio ne essere indiscreto ne inopportuno, però per quanto mi riguarda cerco di andare oltre alla questione del giusto o dello sbagliato o del senso logico.
    Quello che sinceramente più mi interessa è sapere se è una esigenza tecnica che ignoro, che potrebbe magari, ritornarmi utile in futuro.
    Poi se si tratta di una questione tua personale è un altro discorso e sei liberissimo di non rispondere. Anche io ad esempio, quando apro una tabella e vedo le date non sequenziali, ed anche se le ordino in modo crescente, sapendo che sono archiviate a casaccio, mi viene la pelle d'oca, oppure agli inizi dell'uso di access, non sopportavo di avere dei buchi nella numerazione delle chiave primarie e ci ero andato in fissa, tanto da rinumerarle.
  • Re: Scambio Record Tabella VBA

    Questo modo di vedere le tabelle (come array da tenere ordinati e compatti) è sbagliato e inutile per i RDBMS.

    L'allocazione fisica delle righe nella tabella è responsabilità del motore del DB che fa tutte le ottimizzazioni del caso per gestire al meglio l'I/O. Le tabelle non dovrebbero essere mai gestite direttamente ma sempre tramite viste (query) e stored procedure.
    Movimentare i dati in una tabella per creare un ordine personale è del tutto inopportuno.

    E' corretto precisarlo in questo thread (come indicare la migliore strada in ogni thread, ad esempio usare i parametri al posto delle concatenazioni in una query) e non deve essere visto come un messaggio che fa perdere tempo o che va contro la volontà di chi ha aperto la discussione. Ovviamente lui può fare come crede.
Devi accedere o registrarti per scrivere nel forum
16 risposte