如何从基本 libreOffice 中的表单中获取字段值?

How to get the field values from the forms in base libreOffice?

部分代码

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

当我运行宏时,运行弹出时间错误

property or method not found: getByName

我整天都在寻找解决方案。我遇到了连接到 xray 工具或加载 access2base 库等建议,但我无法做到。但我不知道,为什么这是一项如此艰巨的任务。

我是 LibreOffice Basic 编程和一般数据库的新手。

以下代码仅获取表单文档定义,而不是打开的表单,如 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()

正确的解决方案取决于调用宏的方式。例如,这里有一些代码可以在打开任何窗体之前从主屏幕调用。部分代码来自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/ 所述。

比从控件获取值更优雅的方法是从表单记录集中读取列,如

中所述

But I do not know, why this is such a difficult task.

数据库无论如何都很难使用,学习编写 LibreOffice Base 宏是出了名的困难。然而,只要付出足够的努力,Base 就能让很多事情成为可能。

I came across suggestions like connecting to xray tool.

是的,在开发 LibreOffice 宏时,像 XrayTool 或 MRI 这样的内省工具是必不可少的。