将字符串传递给4D中的方法CREATE RECORD

时间:2017-03-28 21:36:46

标签: 4d-database

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

2 个答案:

答案 0 :(得分: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建议的内容(我不知道该命令),我会做这样的事情(虽然在实际代码中我创建了一个返回指向表的指针的方法而不是运行Create Record in If语句)。其中$ 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 

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

答案 1 :(得分:0)

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

的表
$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->)

...