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

LibreOffice在ODT内创建嵌入式数据库报错及宏访问问题

错误原因

你通过向导创建数据库表时,没给表添加任何有效字段(列),或者字段配置不规范(比如没设置数据类型),导致生成的Tasks表没有可查询的列,执行SELECT * FROM "Tasks"时触发报错,后续操作按钮也因表结构无效被禁用。

正确创建ODT内嵌数据库表的步骤
  • 打开目标ODT文档,点击View -> Data sources打开数据源面板。
  • 在面板里右键点击Tables,选择Use Wizard to Create Table。
  • 到字段选择步骤时:
    • 要么从左侧可用字段列表选需要的添加到右侧,要么点New Field手动建字段。
    • 每个字段必须设置数据类型(比如Text、Integer这类),主键字段要勾选Primary Key。
    • 至少得加1个有效字段,不能建空表。
  • 完成字段配置后点Next,设置表名(比如Tasks),确认主键设置。
  • 最后选Add data now,就能正常进入数据录入界面,不会再报错。
用Visual Basic宏访问内嵌数据库数据的示例

以下代码可以读取Tasks表中的数据:

Sub AccessEmbeddedDB()
    Dim oContext As Object
    Dim oDataSource As Object
    Dim oConnection As Object
    Dim oStatement As Object
    Dim oResultSet As Object
    
    ' 获取数据库上下文服务
    oContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
    ' 连接当前文档的内嵌数据库,替换成你的ODT文档名(不要加.odt后缀)
    oDataSource = oContext.getByName("你的文档名")
    oConnection = oDataSource.getConnection("", "") ' 内嵌数据库无需账号密码
    
    ' 执行查询语句
    oStatement = oConnection.createStatement()
    oResultSet = oStatement.executeQuery("SELECT * FROM ""Tasks""") ' 表名需用双引号转义
    
    ' 遍历结果并输出(这里以打印到控制台为例)
    While oResultSet.next()
        ' 获取第一列数据,索引从1开始,可根据字段类型用对应方法(比如getInt、getDate)
        Print oResultSet.getString(1)
    Wend
    
    ' 释放资源
    oResultSet.close()
    oStatement.close()
    oConnection.close()
End Sub

注意:

  • 把代码里的你的文档名换成实际的ODT文档名称(不含.odt)。
  • 不同类型的字段要用对应方法读取,比如整数用getInt(),日期用getDate()。
  • 执行宏前要确保内嵌数据库已经正确创建且有数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:32:26