Can i pass a string variable to the 4D CREATE RECORD method ? or any other method i just need to set the name table as a variable. I already tried to pass a string variable but as the method only accepts table object i can't find any way to do that
You can do this with a pointer. Anywhere 4D expects a table you can use a dereferenced pointer to a table.
You can get a pointer to a table in a few ways:
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->)
Depending on how you are choosing the variable table name you may need some code to tie the text to the table or table number. A method that took the text and set a pointer to the table would do the trick.
Update: Incorporating what @TomB suggested (I wasn't aware of that command), I would do something like this (though in real code I'd create a method that returned a pointer to the table rather than running Create Record in the If statement). Where $tSomeTableName is the string variable you are working with.
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
I prefer this to Execute Formula because it handles cases where the table name in the text variable is not a valid table name in the database.