从 Libreoffice Basic 访问 SQL 数组元素

Accessing SQL array element from Libreoffice Basic

我有一个包含程序数据的 postgresql 数据库。在 Libreoffice Calc 中,我有与 postgresql 数据库交互并使用 Calc 作为用户客户端的 Basic 宏。其中一个 postgresql tables 有一个数组,我无法直接从 Basic 索引到该数组。

这是 table 设置,如 pgAdmin 中所示:

  sq_num integer,
  year_start integer,
  id serial NOT NULL,
  "roleArray" text[]

说我想要 SELECT roleArray[50]。我从 Basic 中执行此操作的每一次尝试都会导致整个数组被传递。我当然可以自己拆分数组并获得我想要的元素,但我使用 SQL 数组来帮助自动化这些东西。

我的 Basic 代码使用 Libreoffice Base 文件连接到 postgresql 数据库。转到基本文件,我无法创建将 select 单个元素而不是 return 整个数组的查询,除非我 select 按钮 "Run SQL command directly" 和 运行 这个查询:

SELECT "roleArray"['50'] FROM myTableThatHasArrays

然后我按预期从每条记录中获取元素 50。

我相信有一个错误报告对此进行了描述,其中 Base 命令解析器无法处理数组索引。我的问题是克服这个问题的最佳方法是什么?

最好的方案是能够直接从 Basic 索引 SQL 数组中的元素。

听起来你用过 XRow.getString, which (sensibly enough) retrieves the array as a single large string. Instead, use XRow.getArray and then XArray.getArray。这是一个工作示例:

sSQL = "SELECT id, ""roleArray""[2] FROM mytablethathasarrays;"
oResult = oStatement.executeQuery(sSQL)
s = ""
Do While oResult.next()
    sql_array = oResult.getArray(2)
    basic_array = sql_array.getArray(Null)
    s = s & oResult.getInt(1) & " " & basic_array(1) & CHR$(10)
Loop
MsgBox s