2017-03-28 42 views
0

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

回答

0

你可以用指针来做到这一点。任何地方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语句中运行创建记录)。其中$ 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 

我更喜欢使用Execute Formula,因为它处理文本变量中表名不是数据库中有效表名的情况。

+0

仍然没有工作!我所做的是我从一个帖子http方法得到一个json对象,我把我想用在一个字符串变量的表的名称,以便该变量应该是我想用于4D方法,如创建记录 –

+0

看@ TomB的代码。它应该给你你需要将文本字符串转换为指向表的指针。 –

+0

它对我来说我不得不做的EXECUTE FORMULA(“$ ptr:= - > [”+ name +“]”)然后把指针放在方法中谢谢! –

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->) 

...