Duplicazione campi

di il
4 risposte

Duplicazione campi

Buongiorno,

come posso duplicare N volte tutti i campi di una tabella di uno specifico id?

Grazie

4 Risposte

  • Re: Duplicazione campi

    Dovresti spiegare meglio quello che vorresti realizzare: vuoi duplicare i campi di una tabella (che sarebbero le colonne) o i singoli valori di un solo record? 

    In entrambi i casi quale sarebbe l'utilita'? Se devi duplicare un record per velocizzare la compilazione e' una cosa, ma N volte e' contro le regole di normalizzazione dei DB…

  • Re: Duplicazione campi

    Di una specifico Id, Tutti i campi della tabella (tutte le colonne), per N volte, è per velocizzare l'inserimento dei dati contrattuali che si ripetono N volte.

  • Re: Duplicazione campi

    Quindi, se ho capito bene, vuoi duplicare un record per velocizzare la compilazione senza dovere ogni volta reinserire tutti i dati.

    Immagino inoltre che la duplicazione avviene una alla volta: ovvero inserisci il primo record, lo duplichi, modifichi il record duplicato, e cosi' per N volte, ho capito bene?

    Oppure vuoi inserire un record, creare n copie tutte assieme e poi vai a modificarle una alla volta? In questo caso non ne vedo la praticita'….

    Chiedo inoltre: i records da dove li inserisci in tabella? Da una maschera?

    P.S.Che conoscenze hai di Access? Mi viene il dubbio che tu abbia confuso la tabella di Access con un foglio di lavoro di excel: anche se le strutture sembrano simili, sono due cose completamente diverse che lavorano in modo totalmente differente. Non puoi fare come in excel copia ed incolla della riga n volte…

  • Re: Duplicazione campi

    Apri un Recordset in sola Lettura con il Record da Duplicare, fai un CICLO  1 TO N, ed all'interno inserisci tutti i campi… esclusa la PK ovviamente…

    Una cosa simile buttata giù a mano senza controllare…

    Function DuplicateID(pID As Long, pDuplicates As Integer) As Boolean
        On Error GoTo Err_Handler
        Dim rsRead  As DAO.Recordset
        Dim rsWrite As DAO.Recordset
        Dim fld     As DAO.Field
        Dim i       As Integer
        
        Set rsRead = DBEngine(0)(0).OpenRecordset("SELECT * FROM TuaTab WHERE NomeID=" & pID, dbOpenSnapshot, dbReadOnly)
        Set rsWrite = DBEngine(0)(0).OpenRecordset("SELECT * FROM TuaTab WHERE 1=0")
        
        For i = 1 To pDuplicates
            rsWrite.AddNew
            For Each fld In rsRead.Fields
                If fld.Name <> "NomeCampoPK" Then rsWrite.Fields(fld.Name) = fld.Value
            Next
            rsWrite.Update
        Next
        DuplicateID=true
    Exit_Here:
        On Error Resume Next
        rsWrite.Close
        rsRead.Close
        Set rsWrite = Nothing
        Set rsRead = Nothing
        Exit Function
    
    Err_Handler:
        MsgBox Err.Number & " " & Err.Description
        Resume Exit_Here
    End Function

    La gestione errori verifica se implementare delle opzioni o meno…

    Da richiamare così:

    DuplicateID TuoID_daDuplicare,127

    Ovviamente 127 è il numero di ripetizioni…

    Non è ottimizzato si può migliorare ma se l'inserimento è al massimo qualche centinaio va benissimo.

Devi accedere o registrarti per scrivere nel forum
4 risposte