Copia del campo ID tra tabelle

di ornello il
26 risposte
Buongiorno a tutti,

chiedo aiuto per 1 domanda apparentemente semplice:

ho 2 semplici tabelle la relazione esistente è del tipo 1 a molti

vorrei semplicemente copiare il numero ID relativo alla Tab 1 nel campo relativo associato della Tab 2 senza dovrerlo inserire manualmente.

è possibile passando da una query di aggiornamento effettuare questa copia? oppure l'unico modo per gestire è tramite una maschera + relativa casella combinata?

Ringrazio in anticipo chiunque avesse suggerimenti

26 Risposte

  • In base all'uso pratico che ne devi fare (questo lo sai solo tu) puoi pensare una di queste ipotesi:
    A) Maschera/sottomaschera che poggiano rispettivamente su Tabella1 e Tabella2.
    B) Maschera che poggia su Tabella2 là dove il campo IDTab1 è una casella combinata.
  • Grazie per le informazioni, un ultima domanda se posso passare da una query invece è possibile? Sconsigliato?
  • Non credo ti serva una query. Se tu esplicitassi i nomi veri delle tabelle, del campo ID, saprei consigliarti la via più adeguata.
  • OsvaldoLaviosa ha scritto:


    Non credo ti serva una query.
    Ma con la maschera non gli tocca aggiornare un record alla volta? Con una query, se riesce ad impostare la WHERE, fa fare tutto ad Access... Almeno, io su Sql Server uso direttamente le query di UPDATE.
  • Si il mio obiettivo sarebbe di evitare la compilazione tramite maschera, preferirei passare dalla query e autonomamente far gestire ad access il collegamento ma non so come intervenire.
    Se necessario posso allegare il database
  • Allora studia .
    Hai due possibilità:
    1) Giochi con la WHERE
    UPDATE Tabella
    SET Campo = "Nuovo valore"
    WHERE AltroCampo = "qualchecosa"
    2) Usi la funzione Switch
    UPDATE Tabella
    SET Campo = SWITCH(espr-1, valore-1 [, espr-2, valore-2 ] ... [, espr-n, valore-n ])
    Ovviamente nulla vieta di combinare i due metodi assieme. Dipende quali sono i criteri di aggiornamento...
    Fa sempre un backup prima!!
  • Campo tabella A

    ID_A Codice articolo Descrizione articolo Materia_Prima Cliente Data reg




    campo tabella B

    ID_B Materiale Descrizione materiale Fornitore ID_A


    in sostanza vorrei una query che copiasse/collegasse il n° ID_A ---> nel campo ID_B
  • ornello ha scritto:


    in sostanza vorrei una query che copiasse/collegasse il n° ID_A ---> nel campo ID_B
    Questa cosa non è molto chiara... Prova tu a scrivere la query, poi si vede di correggerla.

    Nota a margine: Spero vivamente che quelli che hai riportato non siano realmente i nomi dei campi delle tue tabelle. Gli spazi sono sempre una pessima idea (basti pensare che serve un certo impegno a capirli già solo così...)
  • UPDATE (tabella b)
    SET (Id b) = (tabella a).(id a)
    WHERE (Id a) = VALORE REGISTRATO NELLA TABELLA A

    Tralasciando la sintassi, dopo aver letto i link pensavo a questa soluzione.
    ma cosa dovrei mettere nella clausola where
    essendo il termine (Id a) un contatore chiave primaria della tabella a.

    Tradotto in pratica spiccia:
    (Id b) dovrebbe prendere il valore assegnato automaticamente da access al contatore (Id a) presente nella tabella a. Spero di aver chiarito

    WHERE (Id a) = VALORE REGISTRATO NELLA TABELLA A??

    Il codice SQL va poi inserito nella sezione query oppure nella sezione tabella?
  • ornello ha scritto:


    in sostanza vorrei una query che copiasse/collegasse il n° ID_A ---> nel campo ID_B
    Questo concetto è errato. Forse volevi dire "nel campo Tabella2.ID_A"

    ornello ha scritto:


    Campo tabella A

    ID_A Codice articolo Descrizione articolo Materia_Prima Cliente Data reg

    campo tabella B

    ID_B Materiale Descrizione materiale Fornitore ID_A
    Quello che avrei da ridire io è che non si possono nominare le tabelle TabellaA e TabellaB. Cosa rappresentano queste tabelle? I nomi tabelle devono essere coerenti con il loro contenuto. Quindi si parla di Fornitori, Articoli, Ordini...
    Tanti altri ragionamenti, figli della logica della normalizzazione, vanno di conseguenza.
    Secondo me c'è un errore di progettazione che impedisce a ornello di ragionare in maniera corretta...confondendo le idee ai programmatori abituati a vedere i dati in maniera normalizzata.
  • Questo concetto è errato. Forse volevi dire "nel campo Tabella2.ID_A"
    riprendo e confermo quello che hai scritto.

    Tabella 2.ID A è il campo di destinazione finale in cui vorrei copiare il valore di ID proveniente dalla tabella 1.

    per quanto riguarda i nomi delle tabelle sono semplicemente un esempio moltooooo sintetico che rappresentano quello che vorrei ottenere nella pratica.
    Le tabelle sono più complesse, volevo ridurre al massimo il concetto di lavoro che mi serve...
  • Forse Sgrubak ha compreso meglio di me il da farsi.
    Per me, potresti raccontare con un esempio concreto quello che vorresti fare? Perchè non ho capito se devi scrivere record uno alla volta (quindi è giusto l'input manuale) oppure un aggiornamento (o accodamento) massivo...

    Tuttavia nutro ancora dubbi sulla normalizzazione di "quelle" tabelle!
  • ornello ha scritto:


    (Id b) dovrebbe prendere il valore assegnato automaticamente da access al contatore (Id a) presente nella tabella a.
    Come ti ha già fatto notare Osvaldo, questa cosa non ha senso... Quello che vuoi aggiornare è: [TabellaB].[ID_A] = [TabellaA].[ID_A]. Questa cosa di non badare alla sintassi, finirà per darti più grattacapi che altro.

    Ora, quali che siano i vincoli per capire quali record aggiornare lo sai tu. Devi sapere quale dei campi della TabellaB ([ID_B], [Materiale], [Descrizione materiale], [Fornitore], [ID_A]) ti "impone" un certo [ID_A].

    Per passare il valore da una tabella ad un'altra, avrai bisogno di una query tipo:
    UPDATE TabellaB, TabellaA
    SET [TabellaB].[CampoB] = [TabellaA].[CampoA]
    WHERE <condizione>;
  • Ciao riprendo l'argomento,
    cercando la soluzione al problema ho trovato questa istruzione che permette di aggiornare la tabella creata nella query :

    **** UPDATE tabellaB INNER JOIN tabellaA ON tabellaB.[ID A] = TabellaA.[ID A] SET TabellaB.[ID A] = [TabellaA].[ID A];

    chiedo un opinione a riguardo di sgrubak se può rispondere....

    L'istruzione aggiorna la tabella query che vado a creare, la tabella di origine invece non viene aggiornata.

    Chiedo e' corretto il procedimento?

    Grazie in anticipo
Devi accedere o registrarti per scrivere nel forum
26 risposte