OpenOffice在打开游标时失去了与MySQL的连接

时间:2016-04-06 14:51:33

标签: mysql openoffice.org openoffice-base

使用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:标签。

0 个答案:

没有答案