将字符串传递给 4D 中的 CREATE RECORD 方法
Pass a string to method CREATE RECORD in 4D
我可以将字符串变量传递给 4D CREATE RECORD 方法吗?或任何其他方法,我只需要将名称 table 设置为变量。
我已经尝试传递一个字符串变量,但由于该方法只接受 table 对象,我找不到任何方法来做到这一点
你可以用指针来做到这一点。在 4D 需要 table 的任何地方,您都可以使用指向 table.
的解引用指针
您可以通过以下几种方式获取指向 table 的指针:
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->)
根据您选择变量 table 名称的方式,您可能需要一些代码将文本与 table 或 table 数字联系起来。获取文本并将指针设置为 table 的方法就可以解决问题。
更新:
结合@TomB 的建议(我不知道该命令),我会做这样的事情(尽管在实际代码中我会创建一个返回指向 table 而不是 [=34= 的指针的方法) ] 在 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
我更喜欢这个而不是执行公式,因为它处理文本变量中的 table 名称在数据库中不是有效 table 名称的情况。
如果要指定 table 的名称,则必须先查找它,因为无法通过名称调用它。因此要访问名为 "myTableName" 的 table:
$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->)
...
我可以将字符串变量传递给 4D CREATE RECORD 方法吗?或任何其他方法,我只需要将名称 table 设置为变量。 我已经尝试传递一个字符串变量,但由于该方法只接受 table 对象,我找不到任何方法来做到这一点
你可以用指针来做到这一点。在 4D 需要 table 的任何地方,您都可以使用指向 table.
的解引用指针您可以通过以下几种方式获取指向 table 的指针:
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->)
根据您选择变量 table 名称的方式,您可能需要一些代码将文本与 table 或 table 数字联系起来。获取文本并将指针设置为 table 的方法就可以解决问题。
更新: 结合@TomB 的建议(我不知道该命令),我会做这样的事情(尽管在实际代码中我会创建一个返回指向 table 而不是 [=34= 的指针的方法) ] 在 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
我更喜欢这个而不是执行公式,因为它处理文本变量中的 table 名称在数据库中不是有效 table 名称的情况。
如果要指定 table 的名称,则必须先查找它,因为无法通过名称调用它。因此要访问名为 "myTableName" 的 table:
$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->)
...