Как получить значения полей из форм в базе libreOffice? - PullRequest
0 голосов
/ 11 июня 2018

часть кода

dim oMainForm   as object
dim oColumnList as object 
dim theValue    as variant


oMainForm = ThisDatabaseDocument.FormDocuments.getByName("update_rform")
oColumnList = oMainForm.getByName("rid")  #rid is the name of the field from which I need to get the value
theValue=oColumnList.getCurrentValue()
rid=theValue

При запуске макроса появляется ошибка времени выполнения

свойство или метод не найдены: getByName

Я искал решение целый день.Я сталкивался с такими предложениями, как подключение к утилите xray или загрузка библиотеки access2base, но я не смог этого сделать.Но я не знаю, почему это такая сложная задача.

Я новичок в программировании LibreOffice Basic и базах данных в целом.

1 Ответ

0 голосов
/ 12 июня 2018

Следующий код получает только определение документа формы, а не открытую форму, как объяснено в https://ask.libreoffice.org/en/question/63260/how-to-access-to-the-controls-of-a-base-form-with-basic/?answer=63280#post-id-63280.

ThisDatabaseDocument.FormDocuments.getByName()

Правильное решение зависит от того, как вызывается макрос.Например, здесь приведен код, который можно вызвать с основного экрана Base перед открытием любой формы.Часть кода взята из https://ask.libreoffice.org/en/question/7555/open-form-via-macro-in-libreoffice-base/.

Sub getFormVal
    form_container = ThisDatabaseDocument.FormDocuments.getByName("update_rform")
    form_container.open()
    Wait 500
    oMainForm = form_container.Component.getDrawPage().getForms().getByIndex(0)
    oControl = oMainForm.getByName("rid")
    theValue = oControl.getCurrentValue()
    MsgBox theValue
End Sub

Чтобы ThisDatabaseDocument работал, код должен находиться в документе, а не в разделе Мои макросы, как описано в https://ask.libreoffice.org/en/question/94670/thisdatabasedocument-vs-thiscomponent/.

Более элегантный подход, чем получение значений из элементов управления, заключается в чтении столбцов из набора записей формы, как описано в https://stackoverflow.com/a/39770933/5100564

Но я не знаю, почему это такая трудная задача.

В любом случае с базами данных может быть сложно работать, а научиться писать макросы LibreOffice Base общеизвестно сложно.Однако, прилагая достаточные усилия, Base делает много вещей возможным.

Я натолкнулся на предложения, такие как подключение к инструменту xray.

Да, инструмент самоанализа, такой как XrayTool или MRI, необходимпри разработке макросов LibreOffice.

...