先编写几个通用函数:
function G_GetFieldValue(const DataSet: TDataSet; fieldName: string): Variant;
var
retValue: Variant;
begin
Result := Unassigned;
if DataSet.State=dsInactive then Exit;
retValue := DataSet[fieldName];
if retValue <> NULL then Result := retValue;
end;
假定处理领料的后台类是 TOutStorage。
function TOutStorage.DoSave(const mDS,sDS: TDataSet): boolean;
var
i: integer;
strSql: string;
begin
result := false;
//启动事务
//处理主表
strSql := 'insert tableName(领料单号, 领料日期,...) values('''+G_GetFieldValue(mDS,'领料单号')+''','''+G_GetFieldValue(mDS,'领料日期')+''',...)';
//执行SQL,如果失败,需要回滚等并退出操作。
//处理细表
sDS.First;
for i:=1 to sDS.RecordCount do
begin
strSql := 'insert tableName(领料单号, 产品名称,...) values('''+G_GetFieldValue(sDS,'领料单号')+ ''','''+G_GetFieldValue(sDS,'产品名称')+''',...)';
//执行SQL,如果失败,需要回滚等并退出操作。
sDS.Next;
end;
//主细表全部写入成功,则提交事务...
result := true;
end;