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