2017-03-28 41 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->) 

...