Am Mittwoch, den 16.05.2007, 20:04 +0200 schrieb Alex Thurgood: > > I used this approach for copying a record in a form as template for e > > new one (excliding the primary key field). > > Now I have exactly this problem, you wouldn't have some macro code lying > around somewhere that you'd be willing to share by any chance ?
It's "Code-giving day" today. ;) Please post any additions you make, not all possible cases are catched by the code! Have fun, too. Marc <snip> ' Copies the value currently shown in the form ' as a template to a new record. This new record only ' is displayed for editing, not stored yet. ' Only some control types are checked here, please ' add missing types needing special treatment. ' The programmer or user has to take care of adding a ' new primary key into the corresponding field control. ' event binding sub sub copyToNewEvent(evt as object) copyRecordToNewRecord(thisComponent) end sub sub copyRecordToNewRecord(oDoc as object, optional sKeyfieldname as string) dim aVal as Variant dim ccount as integer dim i as integer if IsMissing(sKeyfieldname) then sKeyfieldname = "ID" oForm = oDoc.Drawpage.Forms(0) ccount = oForm.count redim aVal(ccount) ' Step 1 --> get the current fields content (excluding key field for auto values) ' loop over all controls for i=0 to ccount-1 aControl = oForm.getByIndex(i) ' only get controls storing database values if HasUNOInterfaces(aControl, "com.sun.star.form.XBoundComponent") then ' read currently shown value n = aControl.name ' exclude primary key field if (InStr(sKeyfieldname, n)=0) then if aControl.supportsService("com.sun.star.awt.UnoControlDateFieldModel") then aVal(i) = aControl.Date elseif aControl.supportsService("com.sun.star.awt.UnoControlTimeFieldModel") then aVal(i) = aControl.Time elseif aControl.supportsService("com.sun.star.awt.UnoControlListBoxModel") then aVal(i) = oDoc.currentController.getControl(aControl).SelectedItemPos elseif aControl.supportsService("com.sun.star.awt.UnoControlFormattedFieldModel") then aVal(i) = aControl.EffectiveValue else aVal(i) = aControl.Text end if end if end if next i ' Step 2 --> make a new record in the form (only) oForm.moveToInsertRow() ' Step 3 --> copy in saved values ' loop over controls again for i=0 to ccount-1 aControl = oForm.getByIndex(i) if HasUNOInterfaces(aControl, "com.sun.star.form.XBoundComponent") then ' get the value to set n = aControl.name ' exclude primary key field if (InStr(sKeyfieldname, n)=0) then if aControl.supportsService("com.sun.star.awt.UnoControlDateFieldModel") then aControl.Date = aVal(i) elseif aControl.supportsService("com.sun.star.awt.UnoControlTimeFieldModel") then aControl.Time = aVal(i) elseif aControl.supportsService("com.sun.star.awt.UnoControlListBoxModel") then oDoc.currentController.getControl(aControl).SelectedItemPos(aVal(i)) elseif aControl.supportsService("com.sun.star.awt.UnoControlFormattedFieldModel") then oDoc.currentController.getControl(aControl).setText(aVal(i)) else ' an EditField aControl.Text = aVal(i) end if ' let the control store it's value into the bound field model aControl.commit() end if end if next i end sub ' --- EOF </snip> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]