[Base][Macro] Duplicare il record corrente

Regole del forum
Non inserire domande qui, utilizzare le altre sezioni con un link all'argomento di interesse
Bloccato
Avatar utente
charlie
Site Admin
Site Admin
Messaggi: 8786
Iscritto il: mercoledì 19 dicembre 2012, 10:50
Contatta:

[Base][Macro] Duplicare il record corrente

Messaggio 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
charlie
macOS 14.3 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org