|
这个问题已经有了一个解决方案:
1、建一个自动递增编码表,记录不同的表中的最新编号
[B]我这里:协同数据库--协同数据库下已有该表,但无值,请问还需建么?[/B]
2、有几个需要自动编号的表,就建几个业务参数,且填充OnGetValue事件,如下:
procedure TPublicParamGroup.ParamOAAutoCodeBizParamGetValue(Sender: TObject; var Value: Variant);
begin
Value := TCommonUserUtils.GetAutoIncreaseID(TBizParam(Sender).ID, TBizParam(Sender).DisplayName);
{ 可根据需要定制Value的格式 }
Value := TCommonUserUtils.StrToRightLenStr(Variants.VarToStr(Value), '0', 10);
end;
[B]这段代码除了StrToRightLenStr中最后两个参数,其他不需改动吧?[/B]
3、到相应模块中编写代码,如下:
{
功能:返回定长字符串,在S左边加上系列字符C,产生长度为Len的字符串。
例如 s = '1', C = '0', Len = 10, 则Result = ‘0000000001’
}
static function TCommonUserUtils.StrToRightLenStr(S: string;C: Char;Len: Integer): string;
var
i: Integer;
begin
Result := S;
i := Length(S);
if i >= Len then Exit
else Result := StringOfChar(C, Len - i)+ S;
end;
{
功能:根据传入的编码获得自动递增的值
参数:
ACodeID:编码ID
ACodeRemark:编码说明
Result:编码值(字符串)
用法:例如,在业务参数的OnGetValue事件中
procedure ParamAutoIncreaseParamGetValue(Sender: TObject; var Value: Variant);
begin
Value := CommonUserUtils.TCommonUserUtils.GetAutoIncreaseID(Self.Context,
TBizParam(Sender).ID, TBizParam(Sender).DisplayName);
// 设置参数字符串格式
Value := CommonUserUtils.TCommonUserUtils.StrToRightLenStr(Value.ToString,
'0', 10);
end;
}
static function TCommonUserUtils.GetAutoIncreaseID(ACUser, ACRemark: string): string;
const
SQLText = 'SELECT * FROM AutoCode WHERE (ACUser = :ACUser)';
UpdateSQLText = 'UPDATE AutoCode SET ACContent = :ACContent where (ACUser = :ACUser)';
InsertSQLText = 'INSERT INTO AutoCode (ACUser, ACContent, ACRemark) VALUES (:ACUser, :ACContent, :ACRemark)';
ACUSERFIELD = 'ACUser';
ACCONTENTFIELD = 'ACContent';
ACREMARKFIELD = 'ACRemark';
var
lQuery: Business.Data.TQuery;
begin
lQuery := Business.Data.TQuery.Create(nil);
with lQuery do
try
ConnectionString := 'DATABASEURL=Biz:\CSEPDI_MIS\COMMONSPACE\CEDataBase.Database';
Close;
CommandText := SQLText; // 从通用编码表中取出当前编号的数据
Params.ParamByName(ACUSERFIELD).AsString := ACUser;
Open;
if (not lQuery.IsEmpty) then
begin
Result := SysUtils.IntToStr(lQuery.FieldByName(ACCONTENTFIELD).ASInteger + 1); // 设置编码的自增量
Close;
CommandText := UpdateSQLText;
Params.ParamByName(ACCONTENTFIELD).AsString := Result;
Params.ParamByName(ACUSERFIELD).AsString := ACUser;
Execute;
end else
begin
Result := '1'; // 设置编码的初始值
Close;
CommandText := InsertSQLText;
Params.ParamByName(ACUSERFIELD).AsString := ACUser;
Params.ParamByName(ACCONTENTFIELD).AsString := Result;
Params.ParamByName(ACREMARKFIELD).AsString := ACRemark;
Execute;
end;
finally
lQuery.Free;
end;
end;
[B]这个是在什么地方写,功能?系统中没有默认写好么?是否可以通过引入不写这些?如果写,有哪些需要改动呢?[/B] |
|