//手动创建TClientDataset及字段,此方法可清空原表数据,
//emptydataset操作无效,原因不详.
procedure TForm1.FlushData(ttype:integer);
var
i,j:integer;
tado:TADODataSet;
ss,sn:Currency;
cd:Tclientdataset;
tFF:TFloatField;
tSF:TStringField;
tIF:TintegerField;
begin
case ttype of //grid隐藏无效列
0:
begin
tado:=dsMX;
self.DBGridEh1.Columns.Grid.FieldColumns['月份'].Visible:=true;
self.DBGridEh1.Columns.Grid.FieldColumns['团号'].Visible:=true;
self.DBGridEh1.Columns.Grid.FieldColumns['组团社'].Visible:=true;
self.DBGridEh1.Columns.Grid.FieldColumns['季度'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['半年度'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['年度'].Visible:=false;
end;
1:
begin
tado:=dsYF;
self.DBGridEh1.Columns.Grid.FieldColumns['月份'].Visible:=true;
self.DBGridEh1.Columns.Grid.FieldColumns['团号'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['组团社'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['季度'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['半年度'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['年度'].Visible:=false;
end;
2:
begin
tado:=dsJD;
self.DBGridEh1.Columns.Grid.FieldColumns['季度'].Visible:=true;
self.DBGridEh1.Columns.Grid.FieldColumns['月份'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['团号'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['组团社'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['半年度'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['年度'].Visible:=false;
end;
3:
begin
tado:=dsBND;
self.DBGridEh1.Columns.Grid.FieldColumns['半年度'].Visible:=true;
self.DBGridEh1.Columns.Grid.FieldColumns['月份'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['团号'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['组团社'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['季度'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['年度'].Visible:=false;
end;
4:
begin
tado:=dsND;
self.DBGridEh1.Columns.Grid.FieldColumns['年度'].Visible:=true;
self.DBGridEh1.Columns.Grid.FieldColumns['月份'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['团号'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['组团社'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['季度'].Visible:=false;
self.DBGridEh1.Columns.Grid.FieldColumns['半年度'].Visible:=false;
end;
end;
tado.close;
tado.open;
if cd<>nil then
begin
//TCDS.EmptyDataSet;
datasource1.DataSet:=nil;//此处不可省,否则会导致指针错误
cd.free;
end;
cd:=Tclientdataset.Create(self);
with cd do
begin
data:=null;
fielddefs.Clear;
//创建字段
for i:=0 to tado.FieldCount-1 do
begin
if tado.Fields[i].DataType=ftinteger then
begin
// with TIntegerField.Create(Self) do
// begin
// FieldName:=tado.Fields[i].FieldName;
// DataSet :=cd;
// end;
with FieldDefs.AddFieldDef do
begin
Name:=tado.Fields[i].FieldName;
DataType:=ftInteger;
tIF:=CreateField(cd) as TIntegerField;
end;
end
else if tado.Fields[i].DataType=ftfloat then
begin
// with TFloatField.Create(Self) do
// begin
// FieldName:=tado.Fields[i].FieldName;
// DataSet :=cd;
// end;
with FieldDefs.AddFieldDef do
begin
Name:=tado.Fields[i].FieldName;
DataType:=ftFloat;
tFF:=CreateField(cd) as TFloatField;
end;
end
else
begin
// with TStringField.Create(Self) do
// begin
// FieldName:=tado.Fields[i].FieldName;
// Size:=tado.Fields[i].size;
// //Required:=True;
// DataSet :=cd;
// end;
with FieldDefs.AddFieldDef do
begin
Name:=tado.Fields[i].FieldName;
DataType:=ftString;
tSF:=CreateField(cd) as TStringField;
end;
end
end;
with FieldDefs.AddFieldDef do
begin
Name:='合计';
DataType:=ftFloat;
tFF:=CreateField(cd) as TFloatField;
// tFF.MinValue:=0;
// tFF.MaxValue:=150;
end;
with FieldDefs.AddFieldDef do
begin
Name:='人均';
DataType:=ftFloat;
tFF:=CreateField(cd) as TFloatField;
end;
with FieldDefs.AddFieldDef do
begin
Name:='人均达标等级';
DataType:=ftString;
tSF:=CreateField(cd) as TStringField;
end;
close;
//EmptyDataSet;
CreateDataSet;
open;
edit;
while not tado.Eof do
begin
append; //post前加append,否则出错
//j:=0;
for i:=0 to tado.FieldCount-1 do
begin
Fields[i].Value:=tado.Fields[i].Value;
// case ttype of //字段处理
// 0: //明细
// begin
// if i in [4,5,6] then
// begin
// Fields[i].Value:='';
// Continue;
// end;
// end;
// 1: //月份
// begin
// if i in [2,3,4,5,6] then
// begin
// Fields[i].Value:='0';
// Continue;
// end;
// end;
// 2: //季度
// begin
// if i in [1,2,3,5,6] then
// begin
// Fields[i].Value:='0';
// Continue;
// end;
// end;
// 3: //半年度
// begin
// if i in [1,2,3,4,6] then
// begin
// Fields[i].Value:='0';
// Continue;
// end;
// end;
// 4:
// begin
// if i in [1,2,3,4,5] then
// begin
// Fields[i].Value:='0';
// Continue;
// end;
// end;
// end;
//ShowMessage(IntToStr(j));
//ShowMessage(tado.Fields[j].FieldName);
// if not tado.Fields[j].IsNull then Fields[i].Value:=tado.Fields[j].Value else Fields[i].Value:='';
// j:=j+1;
end;
//合计
for i:=0 to Qty_Class-1 do
begin
ss:=ss+fieldbyname('类'+inttostr(i+1)).value;
end;
fieldbyname('合计').Value:=ss;
//人均
fieldbyname('人均').Value:=StrToCurr(formatfloat('0.00',(fieldbyname('合计').asfloat/fieldbyname('人数').asfloat)));
sn:=fieldbyname('人均').Value;
if (length(TLs)>0) and (sn>0) then // 计算等级
begin
for i:=0 to length(tls)-1 do
begin
fieldbyname('人均达标等级').Value:='无'; //防止空
if (sn>=tls[i].mini) and (sn<=tls[i].maxi) then
begin
fieldbyname('人均达标等级').Value:=tls[i].name;
break;
end;
end;
end
else fieldbyname('人均达标等级').Value:='无';
post;
tado.Next;
end;
First;
end;
datasource1.DataSet:=cd;
// with cds do
// begin
// close;
// //EmptyDataSet;
// CreateDataSet;
// open;
// edit;
//
// while not tado.Eof do
// begin
// append; //post前加append,否则出错
// j:=0;
// for i:=0 to FieldCount-4 do
// begin
// case ttype of //字段处理
// 0: //明细
// begin
// if i in [4,5,6] then
// begin
// Fields[i].Value:='';
// Continue;
// end;
// end;
// 1: //月份
// begin
// if i in [2,3,4,5,6] then
// begin
// Fields[i].Value:='0';
// Continue;
// end;
// end;
// 2: //季度
// begin
// if i in [1,2,3,5,6] then
// begin
// Fields[i].Value:='0';
// Continue;
// end;
// end;
// 3: //半年度
// begin
// if i in [1,2,3,4,6] then
// begin
// Fields[i].Value:='0';
// Continue;
// end;
// end;
// 4:
// begin
// if i in [1,2,3,4,5] then
// begin
// Fields[i].Value:='0';
// Continue;
// end;
// end;
// end;
// //ShowMessage(IntToStr(j));
// //ShowMessage(tado.Fields[j].FieldName);
// if not tado.Fields[j].IsNull then Fields[i].Value:=tado.Fields[j].Value else Fields[i].Value:='';
// j:=j+1;
// end;
//
// //合计
// for i:=0 to Qty_Class-1 do
// begin
// ss:=ss+fieldbyname('类'+inttostr(i+1)).value;
// end;
// Fields[18].Value:=ss;
// //人均
// Fields[19].Value:=StrToCurr(formatfloat('0.00',(Fields[18].asfloat/Fields[7].asfloat)));
//
// sn:=Fields[19].Value;
// if (length(TLs)>0) and (sn>0) then // 计算等级
// begin
// for i:=0 to length(tls)-1 do
// begin
// Fields[20].Value:='无'; //防止空
// if (sn>=tls[i].mini) and (sn<=tls[i].maxi) then
// begin
// Fields[20].Value:=tls[i].name;
// break;
// end;
// end;
// end
// else Fields[20].Value:='无';
//
// post;
// tado.Next;
// end;
// First;
// end;
end;