Riordinare record da due tabelle access

di il
17 risposte

Riordinare record da due tabelle access

Ciao
Ho a disposizione 2tabelle:
-A ( origine dei dati)
-B ( tabella che aggiorno da A all occorrenza).
In comune hanno la stessa chiave primaria "codice".
La tabella A ha può avere per ogni "codice" 5 alternative di acquisto, Alt1/Alt2/Alt3/Alt4/Alt5.
La tabella B ne ha solo 3 market1/market2/market3 e non è detto che siano compilati tutti e tre di sicuro solo il primo.

La tabella B viene aggiornata spulciando da A i dati, ma vorrei che non si sovrascrivessero i dati market1/market2/market3 se sono già scritti nella tabella B.

Purtroppo la mia difficoltà è quella che nella tabella A Alt1/Alt2/Alt3/Alt4/Alt5 non sono in ordine e potrei trovare il market1 nell' Alt4.
Per cui se market2 è vuoto dovrei fare una ricerca in A per la chiave primaria "codice" dei record differenti da market1,
Se market3 è vuoto dovrei fare una ricerca in A per la chiave primaria "codice" dei record differenti da market1, e market2.

Oltre a questa regola non è fondamentale quale Alt1-5 scrivere nei campi vuoti dei market2-3

Ricapitolando servirebbe una istruzione SQL di riempimento dei campi vuoti cercando il valore differente dal record precedente.

17 Risposte

  • Re: Riordinare record da due tabelle access

    Io non ho capito ... A è la tabella "base" ? B cos'è? una temp-table che aggiorno con dei raggruppamenti e/o filtri sui dati di A?
    nel caso, spero di aver capito male, non ne capisco il senso.
    Magari prova a farmi/ci capire meglio
  • Re: Riordinare record da due tabelle access

    A è una tabella collegata al gestionale e quindi aggiornata con tutti i dati di alternative ai codici.
    B è una tabella differente collegata al CAD con altre proprietà.
    Quello che vorrei è aggiornare Bcon le alternative aggiunte da altre persone in A senza sovrascrivere gli eventuali Market123 scritti in B ma eventualmente riempire solo i campi vuoti, per evitare problemi con il CAD.
    Esempio di A
    Code:123
    Alt1:TPS/Alt2:fst/Alt3:ght/Alt4:fgk/Alt5:null

    Esempio di B iniziale
    Code:123
    Market1:fgk/Market2-3:null

    Esempio di B dopo aggiornamento:
    Code:123
    Market1:fgk/Market2:TPS/Market3:ght

    Si noti che i Market già presenti in B non devono essere toccati.
  • Re: Riordinare record da due tabelle access

    Gomez ha scritto:


    A è una tabella collegata al gestionale e quindi aggiornata con tutti i dati di alternative ai codici.
    B è una tabella differente collegata al CAD con altre proprietà.
    Quello che vorrei è aggiornare Bcon le alternative aggiunte da altre persone in A senza sovrascrivere gli eventuali Market123 scritti in B ma eventualmente riempire solo i campi vuoti, per evitare problemi con il CAD.
    Esempio di A
    Code:123
    Alt1:TPS/Alt2:fst/Alt3:ght/Alt4:fgk/Alt5:null

    Esempio di B iniziale
    Code:123
    Market1:fgk/Market2-3:null

    Esempio di B dopo aggiornamento:
    Code:123
    Market1:fgk/Market2:TPS/Market3:ght

    Si noti che i Market già presenti in B non devono essere toccati.
    Mah una "if" non dovrebbe andare bene?...come lo fai l'aggiornamento?
  • Re: Riordinare record da due tabelle access

    Si un "if" andrebbe bene.. non saprei dove/come inserirlo.
    L aggiornamento lo faccio con una query di aggiornamento tra tabella A e B con un inner join che collega le chiavi primarie.
    L "if"lo metto sotto il criterio del Market2-3?
  • Re: Riordinare record da due tabelle access

    E...cos'è che non funziona?
    Posta il codice.
  • Re: Riordinare record da due tabelle access

    Scusa non serve la "If" perchè la "IF" non è altro che un criterio.
    Io ho giocato un po sulle query "dati non corrispondenti" e sono arrivato a questo risultato, ti posto l'SQL su un solo campo:
    UPDATE TbA INNER JOIN TbB ON TbA.id = TbB.id SET TbB.Market = TbA![Market]
    WHERE (((TbB.Market) Is Null));
    Prova (fai copie di sicurezza prima) è chiaro che lo devi adattare al tuo caso.
    Se la query è relativa a più campi "Is null" della TabB lo devi inserire man mano nelle righe criterio sottostanti al fine di realizzare un "OR".
    Saluti
  • Re: Riordinare record da due tabelle access

    Grazie Gianni
    Ancora però non ci siamo, nel senso che nella tabella A
    Le 5 alternative sono mescolate rispetto all ordine della tabella By.
    Esempio se scrivo ght nel market1 della tabella B,
    Mi ritrovero' con la query che mi consigli con questo risultato:
    Market1:ght/Market2:fst/market3:ght ( 1-3 sono doppioni,)

    Con

    Esempio di A
    Code:123
    Alt1:TPS/Alt2:fst/Alt3:ght/Alt4:fgk/Alt5:null

    Esempio di B iniziale
    Code:123
    Market1:ght/Market2-3:null

    Esempio di B che vorrei dopo aggiornamento:
    Code:123
    Market1:ght/Market2:TPS/Market3:fst

    Devo in qualche modo capire se il record è un doppione e in quel caso passare alla successiva alternativa.
    Ci serve un po' di codice in più...
    Del tipo aggiungere al WHERE (((TbB.Market) Is Null) un And valore differente da market1
  • Re: Riordinare record da due tabelle access

    Scusa non sapendo di cosa parli mi viene difficile aiutarti vedi di spiegare meglio questa questione del codice.
  • Re: Riordinare record da due tabelle access

    La tabella A è il nostro gestionale dove chi acquista può trovare alternative identiche all oggetto e le mette alla rinfusa dentro alt1-5.
    La tabella B è la tabella dei tecnici dove Market1 è il primo codice che valido e voglio rimanga questo per l intera vita.
    Gli acquisti inseriscono il codice ricercando alternative e spesso alt1 non corrisponde al mio Market1.
    Potrebbe essere che alt2 corrisponda al Market1 e alt1-3-4 siano codici alternativi che nella tabella B non ci siano.
    Io li devo inserire facendo attenzione a non replicare il codice Market1 che ho già inserito (dal momento che gli acquisti possono inserirli alla rinfusa)
    Se serve preparo un DB di esempio .
  • Re: Riordinare record da due tabelle access

    Quindi, mi sembra di capire, che il valore in alt1 della tabA non solo deve aggiornare Market1 "solo nel caso questo sia vuoto" ma
    deve essere confrontato anche con tutti gli altri Market della TabB...giusto?
    Francamente mi sono perso nel senso che non afferro il senso di questa cosa.
    Rileggendo tutto diventa più oscuro:
    La TabA ha 5 valori inseriti alla rinfusa...mentre
    La TabB ha 3 valori di cui 1 il primo è sempre presente e deve rimanere tale...giusto?
    quindi, correggimi se sbaglio, sono solo 2 i campi da aggiornare con 5 valori inseriti alla RINFUSA.
    Mah la logica dove sta in questa cosa?
    Poniamo il caso che nella TabA ci siano 4 valori, ma anche 3 quali porto sulla tabB?
    A mio parere non basta una query e non so nemmeno cosa suggerirti (forse un ciclo)
    Del tipo aggiungere al WHERE (((TbB.Market) Is Null) un And valore differente da market1

    No no la query confrontava dati della TbA NON presente in TbB nel tuo caso dovresti confrontare anche con dati della stessa
    TbB, ma ripeto non capisco il senso di tutto.
  • Re: Riordinare record da due tabelle access

    Gianni55 ha scritto:


    Quindi, mi sembra di capire, che il valore in alt1 della tabA non solo deve aggiornare Market1 "solo nel caso questo sia vuoto" ma
    deve essere confrontato anche con tutti gli altri Market della TabB...giusto?
    Sì corretto
    Francamente mi sono perso nel senso che non afferro il senso di questa cosa.
    Il senso è che nasce prima Market1 e l informazione risiede nel cad come codice primario.
    Poi gli acquisti compilano la TabA ma non è detto che inseriscono il codice come alt1 potrebbero mescolare i codici con le alternative
    Rileggendo tutto diventa più oscuro:
    La TabA ha 5 valori inseriti alla rinfusa...mentre
    La TabB ha 3 valori di cui 1 il primo è sempre presente e deve rimanere tale...giusto?
    quindi, correggimi se sbaglio, sono solo 2 i campi da aggiornare con 5 valori inseriti alla RINFUSA.
    Si basta aggiornare solo 2 campi hai capito benissimo.
    Mah la logica dove sta in questa cosa?
    Poniamo il caso che nella TabA ci siano 4 valori, ma anche 3 quali porto sulla tabB?
    Nella tabB bisogna portare i valori senza creare doppioni e senza sovrascrivere quelli già inseriti.
    Se è più facile potrei inserire nella tabella B anziché 3 campi tutti e 5 i campi presenti nella tabella A, però il problema rimane nel non inserire doppioni.

    A mio parere non basta una query e non so nemmeno cosa suggerirti (forse un ciclo)
    Del tipo aggiungere al WHERE (((TbB.Market) Is Null) un And valore differente da market1

    No no la query confrontava dati della TbA NON presente in TbB nel tuo caso dovresti confrontare anche con dati della stessa
    TbB, ma ripeto non capisco il senso di tutto.
  • Re: Riordinare record da due tabelle access

    Mah di cosa stiamo parlando: scarpe, abbigliamento, componenti elettronici, chimica, analisi cliniche...cosa?

    Scusa ma questa cosa non ha niente di logico.
    Ti faccio un esempio, poniamo che stiamo parlando di scarpe
    TabA : Art234-bianco-giallo-verde-rosso
    tabB :Art234-verde-rosso >mah il bianco ed il giallo per quale motivo è indifferente metterle

    Gomez ha scritto:


    ..Se è più facile potrei inserire nella tabella B anziché 3 campi tutti e 5 i campi presenti nella tabella A ...
    Questo non si può sentire.
    Diciamo che nella TabB oltre il primo campo se prima ne mettavamo 2 a caso , i primi che ci capitavano ,
    adesso li portiamo a 5...perchè?...per farmi contento?
    Saluti
  • Re: Riordinare record da due tabelle access

    Gianni55 ha scritto:


    Mah di cosa stiamo parlando: scarpe, abbigliamento, componenti elettronici, chimica, analisi cliniche...cosa?
    Parliamo di viti meccaniche
    Scusa ma questa cosa non ha niente di logico.
    Ti faccio un esempio, poniamo che stiamo parlando di scarpe
    TabA : Art234-bianco-giallo-verde-rosso
    tabB :Art234-verde-rosso >mah il bianco ed il giallo per quale motivo è indifferente metterle
    L esempio che fai porta a confusione perché giallo è diverso da rosso..Ti faccio capire

    TabA:Art1/2 bullone M3 comperato da Gigi/bullone M3 comperato da Robert
    Sono uguali ma hanno codice di acquisto differente.
    Entrambi li posso usare per assemblare un trattore.
    TabB:Market1 bullone M3 comperato da Robert

    Gomez ha scritto:


    ..Se è più facile potrei inserire nella tabella B anziché 3 campi tutti e 5 i campi presenti nella tabella A ...
    Questo non si può sentire.
    Diciamo che nella TabB oltre il primo campo se prima ne mettavamo 2 a caso , i primi che ci capitavano ,
    adesso li portiamo a 5...perchè?...per farmi contento?


    Saluti
    Non sono a caso... Sono tutti bulloni M3 uguali ma con codice di acquisto diversi.
    Il codice anagrafico è identico.
    Per cui io vorrei tenere la TabB Market1 come principale perché è legato sul CAD meccanico.
    Gli altri 2 a seguire sono le ulteriori omologhe da inserire nel cad meccanico (in totale 3 perché si è deciso così, ma potrei mettere anche5)
    Quali scelgo? A CASO tra la tabella A basta che siano diverse tra loro come codice.

    Dico a "caso" perché a livelli pratici sono identici.
    Devo solo dare delle alternative sui cartigli meccanici

    Spero ora sia tutto chiaro
  • Re: Riordinare record da due tabelle access

    Gomez ha scritto:


    A è una tabella collegata al gestionale e quindi aggiornata con tutti i dati di alternative ai codici.
    B è una tabella differente collegata al CAD con altre proprietà.
    Quello che vorrei è aggiornare Bcon le alternative aggiunte da altre persone in A senza sovrascrivere gli eventuali Market123 scritti in B ma eventualmente riempire solo i campi vuoti, per evitare problemi con il CAD.
    Esempio di A
    Code:123
    Alt1:TPS/Alt2:fst/Alt3:ght/Alt4:fgk/Alt5:null

    Esempio di B iniziale
    Code:123
    Market1:fgk/Market2-3:null

    Esempio di B dopo aggiornamento:
    Code:123
    Market1:fgk/Market2:TPS/Market3:ght

    Si noti che i Market già presenti in B non devono essere toccati.
    Non avendo una struttura normalizzata c'è poco da mordere : devi lavorare di codice VBA.
    1 - devi separare il campo che contiene i Market (B) utilizzando la funzione split (carattere separatore /) ottenendo quindi un array di campi (dovrebbero essere 3)
    2 - dovresti scorrere l'array ottenuto e verificare che tutti gli elementi inizino per 'Market' (da considerare le varie varianti di maiuscole/minuscole). Quelli che non cominciano per 'Market' dovrebbero essere scartati, se non rimangono campi validi hai finito
    3 - devi riscorrere l'array e verificare se ci sono elementi che terminano per ':' (supponendo che il tuo concetto di null sia che non ci sono caratteri dopo il ':' ) . Se non ci sono elementi che terminano per ':' hai finito

    4 - devi separare il campo che contiene le alternative (A) utilizzando la funzione split (carattere separatore /) ottenendo quindi un array di campi (dovrebbero essere 5)
    5 - dovresti scorrere l'array ottenuto e verificare che tutti gli elementi inizino per 'Alt' (da considerare le varie varianti di maiuscole/minuscole). Quelli che non cominciano per 'Alt' dovrebbero essere scartati. Se non ci sono elementi validi hai finito
    6 - devi riordinare l'array ottenuto per garantire che vengano inserite le alternative nell'ordine corretto
    7 - scorri l'array di alternative andando ad inserire l'alternativa nel market disponibile. Lo scorrimento finisce quando non ci sono più market disponibili oppure quando hai finito le alternative

    8 - riunisci nuovamente gli elementi Market in modo da formare un unico campo
    9 - aggiorni la tabella B

    Se non conosci VBA, lascia perdere ...
Devi accedere o registrarti per scrivere nel forum
17 risposte