0

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

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

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

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

我的 Basic 代码使用 Libreoffice Base 文件连接到 postgresql 数据库。转到基本文件,我无法创建将选择单个元素而不返回整个数组的查询,除非我选择“直接运行 SQL 命令”按钮并运行此查询:

SELECT "roleArray"['50'] FROM myTableThatHasArrays

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

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

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

4

1 回答 1

0

听起来您使用了 XRow.getString,它(足够明智)将数组检索为单个大字符串。相反,使用XRow.getArray然后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
于 2016-05-19T22:25:32.687 回答