Как при добавлении записи получить в полях данные из предыдущей записи?

Автор serkondr, 30 ноября 2011, 10:57

0 Пользователи и 1 гость просматривают эту тему.

serkondr

Здравствуйте!

При вводе данных в таблицу через форму мне приходится в каждой добавленной записи вводить в некоторых полях одинаковые значения ("№ накладной", "data_doc", "Затребовал", "Разрешил", Отпустил").

Было бы логичнее при добавлении записи в таблицу иметь в этих полях значение по умолчанию из предшествующей записи. При необходимости изменения можно было бы вводить или оставлять старое значение.

Нигде не нашёл ничего об этом.

Подскажите пожалуйста, а то замучался уже долбить мышью по полям.

Спасибо.

neft


serkondr

Для начала придётся изучить английский язык :(       Ich spreche nur Deutsch.



neft

Вопрос и Ответ по данной теме:
ЦитироватьQuestion:   
How can I copy an existing record to a new one as template?
When typing in data into a database form sometimes many records only differ in a small number of fields.
In this case it is desirable to copy one record to a new, empty one and only change the minor differences by hand.
http://codesnippets.services.openoffice.org/Database/Database.CopyRecordToNew.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