我有一组表,我需要整数键,我希望能够将它们中的任何一个传递到一个表中,并获得该键的下一个值。
我相信RecordRef是这样做的方法,但到目前为止代码似乎并不合适。
我正在尝试构建一个函数,该函数将获取一个表记录,然后返回一个整数值,该整数值将成为主键的下一个记录。 IE:如果最后一个记录的密钥是62825,则该函数将返回62826。
FunctionA
BEGIN
Id := GetNextId(SalesRecord); //Assignment not allowed
END;
FunctionB
BEGIN
Id := GetNextId(CreditMemoRecord); //Assignment not allowed
END;
GetNextId(pTableReference: RecordRef) rNextId : Integer
BEGIN
CASE pTableReference.NUMBER OF
DATABASE::SalesRecord: BEGIN
//Find last Record
pTableReference.FINDLAST;
lFieldRef := pTableReference.FIELD(1); //Set to the PK field
END;
DATABASE::CreditMemoRecord: BEGIN
//Find last Record
pTableReference.FINDLAST;
lFieldRef := pTableReference.FIELD(10); //Set to the PK field
END;
... //do more here
END; //CASE
EVALUATE(rNextId,FORMAT(lFieldRef.VALUE)); //Get the integer value from FieldRef
rNextId := rNextId + 1; //Add one for the next value
EXIT(rNextId); //return the value
END;
使用此代码我收到错误“此变量不允许分配”。关于对GetNextId的函数调用
表结构的想法:
Table - SalesRecord
FieldId, Fieldname, Type, Description
1 id integer PK
2 text1 text(30)
3 text2 text(30)
4 dec1 decimal
5 dec2 decmial
Table - CreditMemoRecord
FieldId, Fieldname, Type, Description
10 id integer PK
20 text1 text(30)
30 text2 text(30)
40 dec1 decmial
50 dec2 decmial
答案 0 :(得分:1)
你的意思是" GetNextValue"得到下一个记录?我不太了解你的用例。
如果要传递通用记录,那么您将要使用VARIANT数据类型。这是一个通配符类型,它将接受来自任何表的记录,并允许您从任何表返回记录。
这是未经测试的,但希望能让您了解它们的工作原理;
LOCAL NextRecord(VAR RecVariant : Variant)
IF RecVariant.ISRECORD THEN BEGIN
RecRef.GETTABLE(RecVariant);
// RecRef.NUMBER is useful for Database::"Customer" style comparisons
RecRef.NEXT;
RecRef.SETTABLE(RecVariant); // Might not be necessary
END;
答案 1 :(得分:1)
只需将这样的函数放在两个表中
GetNextId() rNextId : Integer
BEGIN
RESET;
FINDLAST;
EXIT(id+1);
END;
然后从记录变量
中调用它FunctionA
BEGIN
Id := SalesRecord.GetNextId();
END;
FunctionB
BEGIN
Id := CreditMemoRecord.GetNextId();
END;
这是我认为的常见做法。