0

我可以将字符串变量传递给 4D CREATE RECORD 方法吗?或任何其他方法我只需要将名称表设置为变量。我已经尝试传递一个字符串变量,但由于该方法只接受表对象,我找不到任何方法来做到这一点

4

2 回答 2

0

您可以使用指针来执行此操作。Anywhere 4D 需要一个表,您可以使用指向表的取消引用指针。

您可以通过以下几种方式获取指向表的指针:

C_Pointer($pTable)
$pTable:=Table(4) // where 4 is the table number; command returns a pointer to the table
// -OR-
$pTable:=->[SomeTable] // directly setting a pointer to the table

CREATE RECORD($pTable->) // dereferenced pointer as parameter
// do some work here, setting field values
SAVE RECORD($pTable->)

根据您选择变量表名称的方式,您可能需要一些代码将文本与表或表编号联系起来。采用文本并设置指向表的指针的方法可以解决问题。

更新: 结合@TomB 的建议(我不知道那个命令),我会做这样的事情(尽管在实际代码中我会创建一个返回指向表的指针的方法,而不是在 If 中运行 Create Record陈述)。其中 $tSomeTableName 是您正在使用的字符串变量。

ARRAY TEXT($atTableNames;0)
ARRAY LONGINT($aLTableNumbers;0)
GET TABLE TITLES($atTableNames;$aLTableNumbers)

C_LONGINT($LFind)
$LFind:=Find in array($atTableNames;$tSomeTableName)

C_POINTER($pTable)
If ($LFind>0)
    $pTable:=Table($aLTableNumbers{$LFind})

    CREATE RECORD($pTable->)
      // do some work
    SAVE RECORD($pTable->)

Else 
    ALERT("Table name "+$tSomeTableName+" not recognized.")
End if 

我更喜欢执行公式,因为它处理文本变量中的表名不是数据库中的有效表名的情况。

于 2017-03-29T03:06:56.103 回答
0

如果要按名称指定表,则必须先查找它,因为无法按名称调用它。因此要访问名为“myTableName”的表:

$vT_tablename:="myTableName"
GET TABLE TITLES(aT_TableTitles;aL_TableNums)
$vL_MyTable_idx:=find in array(aT_TableTitles;$vT_tablename)
$vL_MyTable_Num:=aL_TableNums{$vL_MyTable_idx}
$vP_MyTable:=table($vL_MyTable_Num)
CREATE RECORD(vP_MyTable->)

...

于 2017-03-29T15:18:03.810 回答