不知何故, System.String:Format 存在但似乎不起作用。
DEFINE VARIABLE strValue AS CHARACTER NO-UNDO.
strValue = "Sebastien".
MESSAGE System.String:Format("Hello {0}", strValue) VIEW-AS ALERT-BOX.
Run Code Online (Sandbox Code Playgroud)
结果是“Hello C:\temp\run.p”而不是“Hello Sebastien”。
所以我决定创建一个等效的函数。
如何声明具有不确定数量参数的方法?
例子:
METHOD PUBLIC INTEGER Calculate(
INPUT iMultiply AS INTEGER
,INPUT iInt1 AS INTEGER
,INPUT iInt2 AS INTEGER
...
,INPUT iIntX AS INTEGER):
RETURN iMultiply * (iInt1 + iInt2, ..., iIntX).
END METHOD.
DISPLAY Calculate(10, 1, 2, 3). /* Result: 60 */
DISPLAY Calculate(2, 1, 1, 1, 1, 1). /* Result: 10 */
Run Code Online (Sandbox Code Playgroud)
谢谢!塞巴斯蒂安
我需要一些帮助来理解当前程序之外的程序/程序的事务范围。
假设我有三个程序,程序 A、程序 B 和程序 C。在程序 A 中,我有一个过程,其中有一些行包含在do transaction(非强类型)块中。在那个do transaction块中,它调用另一个程序 B。从程序 B 返回时,有一个撤消,离开命令。在同一个事务块内,它调用程序C并有一个undo,在这个调用之后也离开。
我的问题是,如果在事务块内,程序 B 执行没有错误,但程序 c 返回错误,那么程序 C 调用后的 undo,leave 是否也会撤销程序 B 内部发生的事务?
Procedure do_something:
some processing....
do transaction:
error-message = "".
{run programB.p}
if error-message <> "" then undo, leave.
some further processing...
error-message = "".
{run programC.p}
if error-message <> "" then undo, leave.
end. /* end of do transaction */
end procedure.
Run Code Online (Sandbox Code Playgroud) 我正在 Progress Release 11.6 中使用 appBuilder 和过程编辑器。
正如前面的一些问题中提到的,我经常遇到 appBuilder 的问题,不想打开文件,损坏它们(删除部分源代码),......,现在的原因之一似乎是程序的限制不能超过32K,包含评论。
起初我想“我们回到了石器时代吗? ”,请原谅我的反应。
但现在我开始认为我们完全滥用了整个概念,因此我想表达我对W文件、P文件和I文件的看法,请确认(或更正):
W 文件仅包含 GUI 定义,例如带有一些框架、按钮、填充字段等的表单,任何真正的编程都需要在 P 文件中完成。
P 文件包含真正的智能:其中详细说明了程序和功能,可以由其余 P 文件使用,或者最终由 W 文件使用。
I 文件只是用来包含一般行为。
让我举一个例子:
W 文件:
DEFINE VARIABLE combo_information VIEW-AS COMBOBOX /* with some information on the content, if this is static */
...
ON CHOOSE OF combo_information DO:
RUN very_large_procedure.
END.
...
{about.i} /* see here-after */
...
Run Code Online (Sandbox Code Playgroud)
P 文件:
PROCEDURE very_large_procedure:
DO /* a lot */
END.
Run Code Online (Sandbox Code Playgroud)
I 文件(about.i):
/* Describes the help-about …Run Code Online (Sandbox Code Playgroud) 我是 4GL 的新手。我总是使用下面的查询将临时表中的数据导出为 .csv 文件。为了给出标题标签,我进行了硬编码。是否可以从临时表字段本身获取标签?如果是,请帮助我修改查询。
DEFINE TEMP-TABLE ttdata NO-UNDO
FIELD cCustomerName LIKE Customer.NAME
FIELD cAddress LIKE Customer.Address
.
OUTPUT TO VALUE(SESSION:TEMP-DIRECTORY + "temp.csv").
PUT UNFORMATTED "customer Name,Customer Address" SKIP.
FOR EACH ttdata NO-LOCK:
EXPORT DELIMITER "," ttdata.
END.
OUTPUT CLOSE.
Run Code Online (Sandbox Code Playgroud) 我在实际耗尽磁盘的地方遇到以下错误。这是因为为 srt 文件生成分配的空间不够。所以我们决定改变空间巨大的路径。是否可以通过程序改变它?
系统错误:写入中出现 I/O 错误 0,ret 2048,文件 56(/mfgtmp/tmp/srtE5yybD),地址 77010944。(290)
open query q for each notepad no-lock where notepad.ctrl-code = pCode and (if pE-num = 0 then notepad.k-num = pk-num else notepad.e-num = pe-num)
Run Code Online (Sandbox Code Playgroud)
我的问题是 - where 子句中的 if 条件会导致查询运行缓慢吗?
我是 Open Edge Progress 数据库的初学者。
是否有任何查询来更新/插入数据到进度数据库表中
我的尝试是
ASSIGN
TABLE.COLUMN=DATA
END
Run Code Online (Sandbox Code Playgroud)
它是否正确?
我想为这个值做千分之一100000000.我该怎么做呢?
示例代码
DEFINE VARIABLE mAmount AS DECIMAL NO-UNDO.
ASSIGN mAmount = 100000000.
MESSAGE mAmount VIEW-AS ALERT-BOX INFO BUTTONS OK TITLE "Amount".
Run Code Online (Sandbox Code Playgroud) 我试图让用户插入文件路径,然后将结果输出到该文件路径:
DEFINE VARIABLE outputPath AS CHARACTER FORMAT "x(50)".
UPDATE outputPath.
OUTPUT TO outputPath.
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用.但是,当我这样做时:
OUTPUT TO "C:\temp\test.txt".
Run Code Online (Sandbox Code Playgroud)
它似乎工作.
我写了一个简单的查询,但想在临时表中将空白值显示为整数字段。如您所知,如果整数字段中没有数据,则默认值为0,但我们的客户表示应为空,而不是默认值0。
DEFINE TEMP-TABLE tt_data
FIELD CarColour AS CHARACTER
FIELD Qty AS INTEGER.
FOR EACH <db> NO-LOCK WHERE <db.field> = "White Car" AND <db.field> = "Red Car":
DISPLAY <db.field1> <db.field2>.
END.
/* Note <db.field1> is CHARACTER <db.field2> is INTEGER */
/* DISPLAYED VALUE IS */
WHITE 0 /* There is no qty for this white car so its showing default value 0 */
RED 100
Run Code Online (Sandbox Code Playgroud)
因此,当我将这些数据存储到临时表时,白色汽车数量应为空白而不是0。
注意-我无法更改“临时表”字段类型。