Seleziona colonna

di il
7 risposte

Seleziona colonna

Ho 3 tabelle A, B, C indipendenti e ho la necessità di copiare/incollare intere colonne da A, B, verso C.
Manualmente so come si fa. Non riesco a capire come automatizzare l'operazione considerato che non esiste una azione macro SelezionaColonna o qualcosa di simile in VBA: mi appare molto strano.
Premetto che la soluzione di creare una routine che analizzi tutte le celle record per record, non la trovo ideale.
Come posso risolvere in maniera rapida?

7 Risposte

  • Re: Seleziona colonna

    Tieni presente che non è EXCEL, quindi per incollare dati dalla COLONNA A(T1) a T3... cosa significa...?
    Devi AGGIUNGERE dati, quindi è un'accodamento, oppure è un UPDATE dei dati già presenti...

    Nel 1° Caso, basta una QUERY INSERT
    
    INSERT INTO T3 SELECT A FROM T1
    Nel 2° Caso è un problema... non hai un SINCRONIZZANTE... quindi l'update è CASUALE..?

    Come ti dicevo non è EXCEL che fai Copia/Incolla della Colonna...!
  • Re: Seleziona colonna

    Lo so che non è Excel. Siccome esistono azioni macro SelezionaRecord e SelezionaTuttiRecord (quindi qualcosa tutta in blocco), pensavo fosse naturale che esistesse SelezionaColonna.
    Avevo trovato altre soluzioni di comodo, ma le trovo pur sempre molto macchinose.

    1) Sfruttando SelezionaTuttiRecord e imponendo di visualizzare soltanto una Colonna sia in fase di Copia che di Incolla, la cosa funzionava. Ma il problema macchinoso risiedeva proprio nel tentare di isolare le singole colonne.

    2) Utilizzare 2 tabelle di comodo X e Y aventi entrambi il campo IDContatore di compagnia. Accodare i dati di A in X, accodare i dati di B in Y. Poi siccome entrambi IDX e IDY ci si aspetta abbiano la stessa numerazione, con una query che le includa entrambi e un join che collega gli ID, ricreo una situazione sincronizzata, quindi accodare in C l'intero blocco.
    Volendo riutilizzare in futuro X e Y, ogni volta devo cancellare tutti i record e Compatta/Ripristina.

    Mi sembrano entrambe soluzioni macchinose.
  • Re: Seleziona colonna

    Premetto: Sto andando a naso. Nel senso che non ho mai cercato una soluzione ad un problema del genere, ma su sito comune una volta lessi una cosa del genere riguardante però l'inserimento in automatico di una chiave univoca in una tabella in cui non era presente per permettere un join ma riuscendo a fare questo penso che stiamo a metà strada del problema posto da alex e quindi alla risoluzione "veloce" al tuo problema.

    Vediamo.
    Secondo me bisogna creare una tabella di appoggio, quindi:
    Bisogna creare un id univoco, ma ci devono essere determinate condizioni, cioè ogni record della prima deve essere correlato al corrispettivo della seconda
    Allora:
    Modifichi le due tabelle aggiungendo un campo id(chiave primaria) sulla prima e il relativo campo sulla seconda.
    Inserisci manualmente (o con script in automatico) i relativi id univoci nella prima tabella e quelli di collegamento nella seconda tabella.
    Crei il join tra le due tabelle e poi usi una query di creazione tabella per disporre i dati come desideri.

    Ripeto sto andando a naso, e molto probabilmente, vista anche l'ora tarda sto dicendo un sacco di (scegliere il termine che considerate più adatto) ed ora sinceramente non ho voglia di provare.
  • Re: Seleziona colonna

    Mypipe, il tuo naso ha odorato bene, ma in sostanza hai detto la stessa soluzione 2) da me proposta.
    In verità, un problema che avevo pendente, non aveva bisogno di questa operazione e l'ho risolto in tutt'altra maniera. Lascio comunque sul piano teorico la soluzione del mio post e continuo ad essere sorpreso di come esistono centinaia di azioni macro e metodi VBA tra i più svariati e apparentemente superflui (scusate la superficialità), ma non la selezione di una intera colonna (che, tra l'altro, è una operazione manualmente possibile).
  • Re: Seleziona colonna

    Ciao.
    Dunque, mentre mi stavo addormentando stamattina alle 5 rimuginavo sul problema, ed esiste un metodo molto più veloce per fare tutto ciò, e senza andare a modificare le tabelle e sopratutto, fa tutto in automatico lasciando invariate le tabelle ed in via teorica applicabile a qualsiasi database access e tutte le tabelle, ma bisogna usare il vba.

    Allora analizzando la soluzione logica.

    prendere i dati dalle tabelle, creare una matrice, riempendola dei dati come vogliamo noi, e poi creare una tabella riversandovi dentro la matrice.

    Ora, visto che sono 13 anni che non scrivo più una riga di codice di qualsiasi linguaggio, perchè avevo avuto un forte rigetto psicologico, sotto il punto di vista del codice, al momento non ti posso aiutare.
    Tempo 3 giorni che tolgo la polvere dai manuali e provo a trovare la soluzione.

    Comunque non penso che esistano negli altri db, soluzioni preconfezionate che ti permettano di prendere il valore di una intera colonna e riversarla in una tabella, affiancandola a record già esistenti. Va contro la logica di struttura e sopratutto potrebbe creare più danni che benefici.
    Il problema poi che access, non è SQL puro. Mi sembra di ricordare (sempre per il fatto che sono 13 anni che a livello di codice sono praticamente alla preistoria) dovrebbe esserci qualcosa tra i comandi SQL, ma non sono sicuro.
  • Re: Seleziona colonna

    mypipe ha scritto:


    prendere i dati dalle tabelle, creare una matrice, riempendola dei dati come vogliamo noi, e poi creare una tabella riversandovi dentro la matrice.
    Questa può essere una strada.

    Ma io dico questo: immaginiamo di voler trasferire 100 record dalle tabelle A e B in C.
    1) La prima colonna (da A in C) si può tranquillamente accodare con query di accodamento. Questo lo so fare e sarebbe molto più veloce.
    2) Apri tabella B
    3) Filtra i 100 record
    4) Seleziona colonna
    5) Copia
    6) Apri tabella C
    7) Filtra o predisponi il campo di arrivo affinchè abbia 100 record
    Seleziona colonna
    9) Incolla
    Tutto questo manualmente è possibile e ottieni il risultato voluto. Esistono anche i siti Microsoft Access che parlano di spostare colonne da una tabella in un'altra e lo raccontano manualmente così come l'ho descritto io. Non capisco perchè non esistono le azioni macro SelezionaColonna...mi accontenterei anche di VaiAControllo: Colonna ma l'azione VaiAControllo funziona soltanto con maschere e non esiste nemmeno l'azione Seleziona (semplice nuda e cruda).
    Come ho già detto nel primo post, riesci a realizzare lo stesso effetto isolando la colonna di partenza e quella di arrivo e azione macro SelezionaTuttiIRecord, poi Copia/Incolla, ma credimi, l'ho già testato in passato, è così lunga che fai prima manualmente.
  • Re: Seleziona colonna

    Ciao,
    Si sinceramente anche io faccio tutto manualmente, tutto più veloce di sicuro.

    Il motivo per il quale non esista un comando del genere non lo so di preciso, ma posso supporre che in realtà l'elemento colonna nei data base non esiste.
    Quello che noi chiamiamo colonna in realtà è un campo di un record e di logica i campi vanno copiati uno per uno da un record ad un'altro e per questo penso che non esista una cosa del genere per la migrazione di interi campi verso un'altra colonna o insieme di campi.
    Se occorre una cosa del genere, farlo con una macro inizierebbe a diventare complicato, perchè comunque avresti bisogno di una o più tabelle appoggio, varie query e sopratutto delle variabili per fare i passaggi intermedi.
    Visto che comunque esiste già uno strumento performante che è il VBA, con il quale la cosa è relativamente semplice, visto che ad occhio e croce il codice non dovrebbe superare le 20 30 righe, abbiano ritenuto superfluo creare uno strumento specifico. (a meno che esista e noi non ne siamo a conoscenza)
    Penso che dovendo fare tutto ciò con una macro verrebbe decisamente lunghetta.
    Purtroppo ci facciamo forviare da quello che facciamo manualmente, cioè copiare una colonna e ricopiarla da un'altra parte.
    Agendo invece in automatico bisogna passare alla logica del campo di un record che per noi, visualmente rappresenta una colonna di una tabella ma per l'engine invece non è strutturato come noi lo vediamo, ma una cosa singola che fa parte di un altro insieme:Il record, che ha una "struttura" orizzontale e non verticale.

    Comunque, guarda, mi hai fatto ritornare la voglia di riaprire l'editor del VBA
Devi accedere o registrarti per scrivere nel forum
7 risposte