You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LibreBase v7.5.4中如何自动填充采购子表单的Title字段?

LibreBase v7.5.4 采购管理系统自动填充Title字段解决方案

报错原因分析

你遇到的SQL Status: S0022, Error code: -28错误,本质是带空格的字段名未正确转义:SQL解析器会把AcqEnt.Accession No拆成AcqEnt.Accession和No两个独立字段,自然找不到目标列。


修正ListBox实现方式

如果坚持用ListBox联动,需要在SQL语句中对带空格的字段名用双引号包裹,示例SQL如下:

SELECT "BooksDB"."Accession No", "BooksDB"."Title" 
FROM "BooksDB" 
WHERE "BooksDB"."Accession No" = "AcqEnt"."Accession No"

同时调整ListBox的属性:

  • 设置Bound field为1(因为SELECT结果中Title是第2个字段,索引从0开始)
  • 将子表单中Accession No字段的「失去焦点」事件绑定到ListBox的refresh动作,确保输入后自动触发匹配。

更高效的实现:表单事件+宏

直接通过宏监听Accession No的输入动作,自动查询并填充Title,步骤如下:

  1. 打开子表单AcqEnt的编辑模式,选中Accession No文本框。
  2. 在右侧属性面板的「事件」标签中,找到「失去焦点」事件,点击「...」选择「宏」→「编辑」。
  3. 粘贴以下LibreOffice Basic代码:
Sub FillTitle(oEvent As Object)
    Dim oForm As Object, oAccessionNo As Object, oTitle As Object
    Dim sAccessionNo As String, sSQL As String
    Dim oStatement As Object, oResultSet As Object
    
    ' 获取表单及控件对象
    oForm = oEvent.Source.Model.Parent
    oAccessionNo = oForm.getByName("Accession No")
    oTitle = oForm.getByName("Title")
    
    sAccessionNo = oAccessionNo.Text
    If sAccessionNo = "" Then
        oTitle.Text = ""
        Exit Sub
    End If
    
    ' 构造查询语句,注意转义带空格的字段
    sSQL = "SELECT ""Title"" FROM ""BooksDB"" WHERE ""Accession No"" = '" & sAccessionNo & "'"
    
    ' 执行查询并填充Title
    oStatement = oForm.ActiveConnection.createStatement()
    oResultSet = oStatement.executeQuery(sSQL)
    
    If oResultSet.Next() Then
        oTitle.Text = oResultSet.getString(1)
    Else
        oTitle.Text = ""
    End If
    
    ' 释放资源
    oResultSet.close()
    oStatement.close()
End Sub
  1. 保存宏后返回表单,测试输入Accession No并切换焦点,Title字段会自动匹配填充。

补充注意事项

  • 确保BooksDB表的Accession No字段是唯一约束,避免多条匹配导致填充异常。
  • 若不需要修改Title字段,可直接创建关联查询将BooksDB.Title作为计算字段添加到子表单,实现只读联动,无需宏。

内容的提问来源于stack exchange,提问作者Keshav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:55:22