Pagina 1 di 1

[Base][Macro] Duplicare il record corrente

Inviato: giovedì 6 agosto 2020, 15:11
da charlie
In un formulario di compilazione può essere comodo duplicare un record esistente e modificarlo parzialmente piuttosto che scriverlo per intero.
Questa macro, suggeritami nel forum inglese, svolge appunto questo compito.
Basta posizionarsi sul record da duplicare e premere il pulsante.
Funziona con qualsiasi numero di campi e riconosce automaticamente il tipo fra: testo, Intero, Ora, Data, Decimale.

Codice: Seleziona tutto

Sub CopyRecord_F3K
    oForm = thisComponent.drawpage.forms.MainForm
    oColumns = oForm.Columns
    dim aData (1,oColumns.count - 1) as Variant
    for i = 1 to oColumns.count - 1 'Inizia con Column 1 perchè Column 0 è la chiave primaria con autoincreneto, porterebbe ad un errore
        oColumn = oColumns(i)
        select case oColumn.TypeName
            case "VARCHAR"
                value = oColumn.getstring
            case "INTEGER"
                value = oColumn.getInt
            case "TIME"
                value = oColumn.getTime
            case "DATE"
                value = oColumn.getDate
            case "DECIMAL"
                value = oColumn.getDouble
        end select
       aData(0,i) = value
       aData(1,i) = oColumn.wasNull
    next i
    oForm.movetoInsertRow
    for i = 1 to oColumns.count - 1
        oColumn = oColumns(i)
        if aData(1,i) = true then    'la colonna fosse vuota
            oColumn.updateNull
        else
        select case oColumn.TypeName
           case "VARCHAR"
               oColumn.updatestring(aData(0,i))
           case "INTEGER"
               oColumn.updateInt(aData(0,i))
           case "TIME"
               oColumn.updateTime(aData(0,i))
           case "DATE"
               oColumn.updateDate(aData(0,i))
           case "DECIMAL"
               oColumn.updateDouble(aData(0,i))
       end select
       endif
    next i
    oForm.InsertRow
End Sub