现在我用的计算字段中有查询语句因此在数据量超过500条的时候就打开的很慢了.而我发现在计算字段在很多条件下都会触发计算,而且计算都是重新计算一次的,我怎样才可以让计算字段只计算当前操作的记录不去计算所有的记录
我在计算字段中的语句为:用的是BDE
procedure TfrmSettlement.qyDetailsCalcFields(DataSet: TDataSet);
var str: string;
mQuery: TQuery;
begin
if FCalculated = true then exit;
if (qyDetails.State in [dsedit, dsinsert]) then Exit;
mQuery := gObjFactory.CreateQuery(GetDB);//建立query
str := 'select InvoiceNo, PolicyNo ,OldSettle, SettleAmount,Currency,Amount from T_ApInvoice where ';
str := str + ' InvoiceNo=''' + qyDetails.fieldbyname('InvoiceNo').AsString + '''';
with mQuery do
begin
close;
sql.Clear;
sql.Add(str);
open;
end;
DataSet.FieldByName('CAmount').AsCurrency := mQuery.fieldbyname('Amount').AsCurrency;
DataSet.FieldByName('CSettleAmount').AsCurrency := mQuery.fieldbyname('SettleAmount').AsCurrency;
DataSet.FieldByName('CPolicyNo').asstring := mQuery.fieldbyname('PolicyNo').asstring;
DataSet.FieldByName('Coldsettle').AsCurrency := mQuery.fieldbyname('oldsettle').AsCurrency;
DataSet.FieldByName('Ccurrency').asstring := mQuery.fieldbyname('currency').asstring;
if (copy(qyDetails.fieldbyname('InvoiceNo').AsString, 1, 3) = 'DIN') or (copy(qyDetails.fieldbyname('InvoiceNo').AsString, 1, 3) = 'CIN') then
begin
DataSet.FieldByName('CalcuOutstanding').AsCurrency :=
DataSet.FieldByName('CAmount').AsCurrency -
DataSet.FieldByName('CSettleAmount').AsCurrency -
DataSet.FieldByName('Coldsettle').AsCurrency; DataSet.FieldByName('CalcuADJustment').AsCurrency :=
DataSet.FieldByName('PaymentAmount').AsCurrency -
DataSet.FieldByName('Exchange').AsCurrency -
DataSet.FieldByName('SettleAmount').AsCurrency;
end;
mQuery.Close;
mQuery.Free;
end;
我在计算字段中的语句为:用的是BDE
procedure TfrmSettlement.qyDetailsCalcFields(DataSet: TDataSet);
var str: string;
mQuery: TQuery;
begin
if FCalculated = true then exit;
if (qyDetails.State in [dsedit, dsinsert]) then Exit;
mQuery := gObjFactory.CreateQuery(GetDB);//建立query
str := 'select InvoiceNo, PolicyNo ,OldSettle, SettleAmount,Currency,Amount from T_ApInvoice where ';
str := str + ' InvoiceNo=''' + qyDetails.fieldbyname('InvoiceNo').AsString + '''';
with mQuery do
begin
close;
sql.Clear;
sql.Add(str);
open;
end;
DataSet.FieldByName('CAmount').AsCurrency := mQuery.fieldbyname('Amount').AsCurrency;
DataSet.FieldByName('CSettleAmount').AsCurrency := mQuery.fieldbyname('SettleAmount').AsCurrency;
DataSet.FieldByName('CPolicyNo').asstring := mQuery.fieldbyname('PolicyNo').asstring;
DataSet.FieldByName('Coldsettle').AsCurrency := mQuery.fieldbyname('oldsettle').AsCurrency;
DataSet.FieldByName('Ccurrency').asstring := mQuery.fieldbyname('currency').asstring;
if (copy(qyDetails.fieldbyname('InvoiceNo').AsString, 1, 3) = 'DIN') or (copy(qyDetails.fieldbyname('InvoiceNo').AsString, 1, 3) = 'CIN') then
begin
DataSet.FieldByName('CalcuOutstanding').AsCurrency :=
DataSet.FieldByName('CAmount').AsCurrency -
DataSet.FieldByName('CSettleAmount').AsCurrency -
DataSet.FieldByName('Coldsettle').AsCurrency; DataSet.FieldByName('CalcuADJustment').AsCurrency :=
DataSet.FieldByName('PaymentAmount').AsCurrency -
DataSet.FieldByName('Exchange').AsCurrency -
DataSet.FieldByName('SettleAmount').AsCurrency;
end;
mQuery.Close;
mQuery.Free;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货