使用OpenOffice Base从OCS-NG库创建报告。
由于OOOs Base源编辑器功能不佳(它甚至没有搜索工具!),我更喜欢在MySQL Workbench(Windows和Linux)中开发脚本。删除要复制到OOO的脚本。
直到今天一切正常,包括存储过程和函数。今天我用数据库光标编写了另一个存储函数。在Workbench上,脚本运行得非常完美,可以产生可用的结果。
我将脚本复制到Base,但失败了,错误2013“连接丢失...”。在WB中,脚本执行大约需要3-4秒才能在4Mbit网络连接上返回348行,而在Gbit LAN上则更少。因此超时不会负责。
注释掉存储函数的一部分,我发现失败发生在open cursor_name
语句中。嗯...我可以将WB的脚本输出复制粘贴到电子表格中,但使用一体化办公包更方便。
让我们提醒一下:调用相同功能的相同脚本在WB中起作用。
那么,如果有人使用OOO访问MySQL数据库,你可能有解决方案吗?我在OOO论坛上询问Q并要求TS,但没有得到有用的回复。
编辑:功能开头
DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `get_monitors`(gmhwid int(11)) RETURNS text CHARSET utf8
BEGIN
declare MOV tinytext;
declare RetVal text;
declare NumOfMons, RowNum int;
# CURSOR-related variables
DECLARE done INT DEFAULT FALSE;
declare gmM, gmC, gmD, gmS tinytext charset utf8;
declare MonCursor cursor for select
MANUFACTURER,CAPTION,DESCRIPTION,SERIAL
from ocsweb.monitors
where ocsweb.monitors.hardware_id=gmhwid;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
# If there''s an overrider, use it and return
set MOV=(select Realmonitor from accinfo where hardware_id=gmhwid);
if ((MOV<>'') and (not isnull(MOV))) then
return mov;
end if;
# how many monitors for this computer
set NumOfMons=(select count(*) from monitors where hardware_id=gmhwid);
set RowNum=0;
set RetVal='';
#set @sel:=(select MANUFACTURER,CAPTION,DESCRIPTION,SERIAL from monitors where monitors.hardware_id=gmhwid);
return '-';
open MonCursor;
注意最后两行。用短划线假回来是一个有点断点。有了它,该功能在OOO中工作,但当然不会产生任何可用的结果。然后主循环开始了:
lup: loop
set MOV='';
fetch MonCursor into gmM, gmC, gmD, gmS;
但如果在OOO中执行,执行将永远不会到达lup:
标签。