从Libreoffice Basic访问SQL数组元素

时间:2016-05-18 21:55:38

标签: libreoffice-base libreoffice-basic

我有一个包含程序数据的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数组中的元素。

1 个答案:

答案 0 :(得分: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