首页 > 解决方案 > 将 Informix 4gl 转换为 Genero 以创建并写入 .4gl - 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

我怎样才能解决这个问题?

标签: informix4glgenero

解决方案


从 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 目录中。


推荐阅读