将Informix 4gl转换为Genero以创建和写入.4gl-拒绝写入.4gl的权限错误

问题描述

我在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

但是我在sqlca.sqlerrm中不断收到错误消息:

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>