问题描述
我在Informix 4gl中有一个代码,该代码创建并写入.4gl文件。简而言之,是生成新程序的代码。它可以在Informix中完美运行:**
let p_output = p_prog clipped,".4gl"
start report rpt1 to p_output
output to report rpt1()
finish report rpt1
let run_stmt = "fglpc ",p_prog clipped
run run_stmt returning p_status
if p_status != 0 then
error " Program Compilation Failed "
sleep 1
end if
end if
我正在尝试将代码转换为Genero以创建并写入.4gl文件。
let p_output = "vi ",p_prog clipped,".4gl"
let p_binoutput = p_prog clipped,".4gl"
LET ch_in = base.Channel.create()
CALL ch_in.openFile(p_binoutput,"w")
start report rpt1 TO p_output
output to report rpt1()
finish report rpt1
--let run_stmt = "fglpc ",p_prog clipped
let run_stmt = "fglcomp ",p_prog clipped
run run_stmt returning p_status
if p_status != 0 then
error " Program Compilation Failed "
sleep 1
end IF
CALL ch_in.close()
end if
p_prog.4gl: Permission denied.
或
vi p_prog.4gl: Permission denied
我该如何解决?
解决方法
从Informix-4gl更改为Genero所需的唯一代码就是该行
let run_stmt = "fglpc ",p_prog clipped
到
let run_stmt = "fglcomp ",p_prog clipped
以便您的程序在生成时使用Genero编译器,而不是Informix 4gl编译器。
无需引入使用base.Channel方法。这是继续读取/写入文件的首选方式,尤其是在具有非页面输出的情况下,但是旧式的START REPORT ...保持不变,并且应该像以前一样起作用。
您看到的错误消息告诉您包装盒上的内容。我可以通过删除对p_prog.4gl的写访问权限来获得它,因此请检查文件是否存在以及您的用户是否具有写权限。
关于当前工作目录,另一个可能的陷阱,fglcomp,fglrun函数与它们的Informix等效项相同,并且在同一目录中混合源和已编译对象。如果使用Genero Studio,则默认情况下它会将源对象和编译后的对象保留在不同的目录中,因此请更改TargetDirectory以不使用bin,或者要知道在获得许可权,文件位置等后,您可能会在运行时位于bin目录中。 / p>