这是讨论的跟进:
从 Libreoffice Basic 访问 SQL 数组元素
我有几乎相同的问题。我正在按照上面提到的代码进行操作,但出现错误。这是我所做的:
CREATE TABLE temp.table2
(
names character varying[],
names2 text[]
);
insert into temp.table2(names, names2) values (ARRAY['a','b','c','d','e'], ARRAY['a','b','c','d','e']);
insert into temp.table2(names, names2) values (ARRAY['1','2','3','4','5'], ARRAY['1','2','3','4','5']);
insert into temp.table2(names, names2) values (ARRAY['e','d','c','b','a'], ARRAY['e','d','c','b','a']);
Sub Main
If isnull(ThisDatabaseDocument.currentcontroller.activeconnection) Then
ThisDatabaseDocument.currentcontroller.connect("root", "root")
End if
pgCon=ThisDatabaseDocument.currentcontroller.activeconnection
stmt = pgCon.createStatement()
rs = stmt.executeQuery("select names,names2 from temp.table2")
rs2 = rs.getMetadata()
While rs.Next
dar = rs.getString(1).getArray(Null)
Wend
End Sub
在线
dar = rs.getString(1).getArray(Null)
错误出现:
BASIC runtime error.
Object variable not set.
看来我做的一切都是正确的;但是,我得到一个错误。
然而,这不是我的目标。我想按以下方式使用 XArray:
create or replace function temp.f_iu7YttW(dname text[]) returns void as $$
declare
counter integer = 1;
begin
while counter<=50 loop
insert into temp.table1(name) values(dname[counter]);
counter=counter+1;
end loop;
end; $$ language plpgsql;
Sub Main
Dim stmt As Object
Dim rs As Object
Dim sql As String
Dim a As Variant
Dim x As Long
If isnull(ThisDatabaseDocument.currentcontroller.activeconnection) Then
ThisDatabaseDocument.currentcontroller.connect("root", "root")
End if
pgCon=ThisDatabaseDocument.currentcontroller.activeconnection
executeDDLPg("drop function if exists temp.f_iu7YttW(text[])")
myDict= getScriptForgeDictionary()
x=0
a= Array(x & "")
SF_Array.Append(a)
For x = 1 To 50
a=SF_Array.Append(a,x & "")
Next x
max = ubound(a)
sql ="drop function if exists temp.f_iu7YttW(text[]);" & _
"create or replace function temp.f_iu7YttW(dname text[]) returns void as $$ " & _
"declare " & _
"counter integer = 1; " & _
"begin " & _
" while counter<" & max & " loop " & _
" insert into temp.table1(name) values(dname[counter]); " & _
" counter=counter+1; " & _
" end loop; " & _
"end; $$ language plpgsql;" ' & _
executeDDLPg(sql)
sql="select temp.f_iu7YttW(?);\n" ' & _
stmt = pgCon.prepareStatement(sql)
stmt.setString(1,a)
stmt.executeUpdate()
stmt.clearParameters()
closeDbObject(stmt)
executeDDLPg("drop function temp.f_iu7YttW(text[])")
End Sub
此代码无效。如果我将
stmt.setString(1,a)
替换为 stmt.setArray(1,a)
然后 LO crashes.