将 Informix 4gl 转换为 Genero 以创建和写入 .4gl - Permission denied to write to .4gl 错误

Convert Informix 4gl to Genero to create and write to .4gl - error of Permission denied to write to .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方法的使用。这是转向 read/write 文件的首选方式,尤其是非分页输出,但老式的 START REPORT ... 没有改变,应该像以前一样运行。

您看到的错误消息告诉您盒子上的内容。我可以通过删除对 p_prog.4gl 的写入权限来获取它,因此请检查该文件是否存在以及您的用户是否具有写入权限。

另一个可能的陷阱,fglcomp,fglrun 的功能与其 Informix 等价物相同,涉及当前工作目录,并且在同一目录中混合源和编译对象。如果使用 Genero Studio,它默认将源代码和编译对象保存在不同的目录中,因此要么将 TargetDirectory 更改为不使用 bin,要么请注意,根据您的权限、文件位置等,在运行时您可能位于 bin 目录中。