代码的一部分
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编程和数据库的新手。
答案 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这样的内省工具是必不可少的。