Duplicare gruppo di records nella stessa tabella

di il
7 risposte

Duplicare gruppo di records nella stessa tabella

Ciao a tutti,

ho due tabelle:
Tabella1 che ha i seguenti campi (non sto qui ad elencarli tutti perché sono tanti)
-Codice (contatore chiave)
-Società

Persons (senza chiave primaria)
-Codice
-Nome

Hanno una relazione 1 a molti.

In una maschera di inserimento ho la necessità di creare un tasto duplica, che nel momento in cui viene cliccato va a duplicare nella tabella1 il campo società con un nuovo codice, mentre nella tabella Persons dovrebbe duplicare tutti i Nomi che erano associati a quel Codice associandoli al nuovo Codice

Riesco a duplicare i record in Tabella1 ma non riesco a gestire la copia dei record in Persons ho provato vari modi, ecco il mio attuale codice
    Dim rsSource    As dao.Recordset
    Dim fld         As dao.Field

   
    Set rsSource = DBEngine(0)(0).OpenRecordset("SELECT * FROM Tabella1 WHERE Cod = " & Me.Cod, dbOpenSnapshot, dbReadOnly)
    Set rsSource1 = DBEngine(0)(0).OpenRecordset("SELECT * FROM Persons WHERE Cod = " & Me.Cod, dbOpenSnapshot, dbReadOnly)
    
        
        'Duplica records tabella1
        Me.RecordsetClone.AddNew
        For Each fld In rsSource.Fields
            If Not fld.Name = "Cod" Then
                Me.RecordsetClone.Fields(fld.Name) = fld.Value
            End If
        Next
        Me.RecordsetClone.Update
        

Form_NewContract.Refresh
        TabCtl0.Value = 0
        
        'Duplica records persons
          Me.RecordsetClone.AddNew
        For Each fld In rsSource.Fields
         Me.RecordsetClone.Fields(Cod) = Me.Cod
            If Not fld.Name = "Cod" Then
                Me.RecordsetClone.Fields(fld.Name) = fld.Value
            End If
        Next
        Me.RecordsetClone.Update
        
        
        MsgBox ("Contract Copy Done")

7 Risposte

  • Re: Duplicare gruppo di records nella stessa tabella

    Innanzitutto avresti dovuto postare la discussione nella sezione "Access": ho inviato segnalazione ai moderatori per spostarla.

    fabionik2004 ha scritto:


    ho due tabelle:
    Tabella1 che ha i seguenti campi (non sto qui ad elencarli tutti perché sono tanti)
    -Codice (contatore chiave)
    -Società

    Persons (senza chiave primaria)
    -Codice
    -Nome

    Hanno una relazione 1 a molti.
    1. Tabella1 potresti chiamarla Società
    2. Perchè Persone non dovrebbe avere un proprio campo chiave primaria IDPersona?
    3. Il campo Codice sarebbe meglio nominarlo esplicitamente CodiceSocietà oppure IDSocietà
    4. Siamo sicuri che la relazione sia Società uno-a-molti Persone? Una Persona potrebbe far parte di più Società?
  • Re: Duplicare gruppo di records nella stessa tabella

    Mi spiace aver sbagliato sezione.
    Certo posso cambiare il nome di tabella1 e Codice.
    Posso anche aggiungere id alla tabella Persons.
    Sono sicuro che la relazione é una a molti.
  • Re: Duplicare gruppo di records nella stessa tabella

    fabionik2004 ha scritto:


    Ho la necessità di creare un tasto duplica, che nel momento in cui viene cliccato va a duplicare nella tabella1 il campo società con un nuovo codice
    La Tabella1 (o Società) non rappresenta tutte le Società? Perchè duplicarne il nome con un IDSocietà diverso?
  • Re: Duplicare gruppo di records nella stessa tabella

    Secondo me stai facendo una cosa sbagliata volendo agire nel RecordsetClone che a livello razionale non puòà CONTENERE entrambe le cose... a meno che non sia una QUERY che estrae i dati in JOIN ma a quel punto è confermato che stai sbagliando metodo.

    Se, [Tab1](Codice 1)<---->(M Codice)[Persons]
    e se devi duplicare in Tab1 il Selezionato con tutti i suoi [Persons]... serve capire se la PK della [Tab1] è un Counter... basta una Query INSERT.
    INSERT INTO Tab1 (SELECT Campo1,Campo2, CampoN FROM Tab1 WHERE Codice=ValoreTuoCodice)
    Escludi dall'elenco dei Campi la PK se Counter, se non è Counter devi generare tu il Valore.
    A quel punto devi recuperare il valore del Codice assegnato al Counter come Inserimento e lo puyoi fare usando IDENTITY.
    Quindi apri un RS in lettura sulla Tabella Persons che filtra per Vecchio Codice, ovvero per quel codice che hai pocanzi duplicato, e, un secondo RS in scrittura in cui cicli i campi del primo andando a sostituire in caso di CODICE quello recuperato nuovo con IDENTITY.

    Sembra cosa difficile sono 5 righe di codice.
  • Re: Duplicare gruppo di records nella stessa tabella

    @Alex ha scritto:


    Secondo me stai facendo una cosa sbagliata volendo agire nel RecordsetClone che a livello razionale non puòà CONTENERE entrambe le cose... a meno che non sia una QUERY che estrae i dati in JOIN ma a quel punto è confermato che stai sbagliando metodo.

    Se, [Tab1](Codice 1)<---->(M Codice)[Persons]
    e se devi duplicare in Tab1 il Selezionato con tutti i suoi [Persons]... serve capire se la PK della [Tab1] è un Counter... basta una Query INSERT.
    INSERT INTO Tab1 (SELECT Campo1,Campo2, CampoN FROM Tab1 WHERE Codice=ValoreTuoCodice)
    Escludi dall'elenco dei Campi la PK se Counter, se non è Counter devi generare tu il Valore.
    A quel punto devi recuperare il valore del Codice assegnato al Counter come Inserimento e lo puyoi fare usando IDENTITY.
    Quindi apri un RS in lettura sulla Tabella Persons che filtra per Vecchio Codice, ovvero per quel codice che hai pocanzi duplicato, e, un secondo RS in scrittura in cui cicli i campi del primo andando a sostituire in caso di CODICE quello recuperato nuovo con IDENTITY.

    Sembra cosa difficile sono 5 righe di codice.
    Ciao é abbastanza Chiaro, in effetti Insert INTO fa al caso mio.
    Il problema che mi è sorto ora è sotituire il COD. ecco cosa ho scritto.

    ho creato una query qTEST che fa quello che ho bisogno infatti se apro solo la query e digito manualmente i due parametri Me.cod e cod 1 funziona:
    SELECT (Me.Cod) AS Cod, Title, Name, Surname, CompanyRole, Address, N, NPA, City, State, Canton, Nationality, PlaceofB, DateOfB, IdCard, Passport, IdNumber, Autority, IdExpirationDate, Signature, Administrator, MainBeneficiary, Beneficiary, Quote
    FROM Persons
    WHERE Cod =cod1;
    il problema é su vba che mi da errore 2 Parametri quando faccio INSERT INTO, non so come passare il parametro Me.Cod da vba alla query
    CurrentDb.Execute "INSERT INTO Persons Select * FROM qTEST WHERE Cod = " & cod1 ";"
  • Re: Duplicare gruppo di records nella stessa tabella

    Devi usare l'Alias e valorizzare il Valore...
    
    "INSERT INTO TDest ..... SELECT Campo1,Campo2, " & NuovoValoreFK & " AS CampoFK, Campo4...."
  • Re: Duplicare gruppo di records nella stessa tabella

    @Alex ha scritto:


    Devi usare l'Alias e valorizzare il Valore...
    
    "INSERT INTO TDest ..... SELECT Campo1,Campo2, " & NuovoValoreFK & " AS CampoFK, Campo4...."
    Quindi se ho capito bene la query no mi serve? Devo fare tutto da VBA?
Devi accedere o registrarti per scrivere nel forum
7 risposte