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

时间:2018-06-11 16:48:09

标签: database base libreoffice-basic

代码的一部分

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 :(得分:1)

以下代码仅获取表单文档定义,而不是开放表单,如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工具的建议。

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