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
相关产品推荐
相关产品推荐

