麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

在Delphi中自己建立交叉表

2019-11-18 18:06:02
字體:
供稿:網(wǎng)友
 

經(jīng)常在CSDN上查閱名位大俠的文章,得益不少,近期因做一個(gè)項(xiàng)目,需要用到交叉表,報(bào)表上倒是有,但客戶要求在Grid上能操作,沒有辦法,只好自己寫了一段代碼用于普通查詢到交叉表的實(shí)現(xiàn),不敢獨(dú)享,故上傳,望能拋磚引玉,請名位大俠不吝指教。


function CreateTmptab(const AFieldDefs:TFieldDefs):TDataSet;
var
TempTable:TatClientDataSet;
begin
TempTable:=nil;
Result:=nil;
if AFieldDefs<>nil then
begin
    try
        TempTable:=TatClientDataSet.Create(application);
        TempTable.FieldDefs.Assign(AFieldDefs);
        TempTable.CreateDataSet;
        Result:=(TempTable as TDataSet);
    Except
    if TempTable<>nil then
        TempTable.Free;
        Result:=nil;
        raise;
    end
end;
end;
{
SouDataset源數(shù)據(jù)集
ColField交叉表動(dòng)態(tài)列字段
RowField交叉表行字段
DataField數(shù)據(jù)字段
}
function GenCrossTable(SouDataset:tdataset;ColField,RowField,DataField:string):tdataset;
var
Vdataset:tdataset;
tmpdataset:tatclientdataset;
DataSource:tdatasource;
tmpstrs:tstrings;
rowval,colval,dataval:string;
i,j:integer;
datatype:TFieldType;
DataSize:integer;
begin
result:=nil;
if (ColField='') or(RowField='')or(DataField='') then
  showmessage('All Field not be NULL!')
else
begin
  if (ColField=RowField)
      or(ColField=DataField)
      or(RowField=DataField) then
    showmessage('All Field not be Equ!')
  else
  if (self.SouDataSet.FieldByName(ColField).DataType=ftString)
    or (self.SouDataSet.FieldByName(ColField).DataType<>ftWideString)
    or (self.SouDataSet.FieldByName(ColField).DataType<>ftFixedChar)
    or (self.SouDataSet.FieldByName(ColField).DataType<>ftMemo)
    or (self.SouDataSet.FieldByName(ColField).DataType<>ftFmtMemo)  then
  begin
  try
    tmpstrs:=tstringlist.Create;
    Vdataset:=SouDataSet;
    Vdataset.First;
    for i:=0 to Vdataset.RecordCount-1 do
    begin
      if (varisnull(SouDataSet.FieldValues[colfield])=false) and (SouDataSet.FieldValues[colfield]<>'') then
        if tmpstrs.IndexOf(SouDataSet.FieldValues[colfield])=-1 then
        begin
          tmpstrs.Add(SouDataSet.FieldValues[colfield]);
        end;
      Vdataset.Next;
    end;
    //生成動(dòng)態(tài)列標(biāo)題
    tmpdataset:=TClientDataSet.Create(Self);
    tmpdataset.FieldDefs.Add(rowfield,ftstring,50,False);
    for i:=0 to tmpstrs.Count-1 do
    begin
      with tmpdataset.FieldDefs do
      begin
        Add(tmpstrs.Strings[i],ftInteger,0,False);
      end;
    end;
    tmpdataset.FieldDefs.Add('Sum',ftInteger,0,False);
    DataSource:=tdatasource.Create(self);
    DataSource.DataSet:=tmpdataset;
    with DataSource do
    begin
      dataset:=Createtmptab(tmpdataset.FieldDefs);
      dataset.Open;
    end;
    //建立臨時(shí)表
    Vdataset.First;
    for i:=0 to Vdataset.RecordCount-1 do
    begin
      rowval:=SouDataSet.fieldbyname(rowfield).AsString;
      colval:=SouDataSet.fieldbyname(colfield).AsString;
      dataval:=SouDataSet.fieldbyname(datafield).AsString;
      if dataval='' then dataval:='0';
      if DataSource.DataSet.Locate(rowfield,rowval,[loPartialKey]) then
      begin
        DataSource.DataSet.Edit;
        DataSource.DataSet.FieldByName(colval).AsString:=dataval;
        DataSource.DataSet.FieldByName('Sum').AsInteger:=
          DataSource.DataSet.FieldByName('Sum').AsInteger+strtoint(dataval);
        DataSource.DataSet.Post;
      end
      else
      begin
        DataSource.DataSet.Append;
        DataSource.DataSet.FieldByName(rowfield).AsString:=rowval;
        for j:=1 to DataSource.DataSet.Fields.Count-1 do
          DataSource.DataSet.Fields[j].AsCurrency:=0;
        DataSource.DataSet.FieldByName(colval).AsString:=dataval;
        DataSource.DataSet.FieldByName('Sum').AsString:=dataval;
        DataSource.DataSet.Post;
      end;
      Vdataset.Next;
    end;
    result:=DataSource.DataSet;
    //生成交叉表數(shù)據(jù)集
    tmpstrs.Free;
  except
  end;
  end
  else
    showmessage('ColField Must be of Type String!') ;
end;
end;


上一篇:綁架窗體之Delphi版

下一篇:用Delphi制作DLL小結(jié)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 亚洲午夜精品视频 | 国产毛片网站 | 国产精品久久久久久久久久大牛 | 成人nv在线观看 | 粉嫩粉嫩一区二区三区在线播放 | 成人免费福利视频 | 成人在线观看免费高清 | 久久男| 在线播放91 | 亚洲aⅴ免费在线观看 | 思思久而久而蕉人 | 曰韩一二三区 | 91精品国产乱码久久久久久久久 | 香蕉久草视频 | 欧美一级美国一级 | 欧美日韩国产综合网 | 国产韩国精品一区二区三区久久 | av之家在线观看 | 北原夏美av| 成人在线第一页 | 成人做爰高潮片免费视频韩国 | 黄色7777| 91精品国产91久久久久久不卞 | 最新在线黄色网址 | 免费一区二区三区 | 国产精品一区二区手机在线观看 | 亚洲欧美国产精品va在线观看 | 中文字幕亚洲欧美 | 粉嫩av一区二区三区四区在线观看 | 午夜视频在线免费观看 | 凹凸成人精品亚洲精品密奴 | 精精国产xxxx视频在线野外 | 欧美三级欧美成人高清www | 一级在线观看 | 2019天天干夜夜操 | 日本一区二区高清不卡 | 国产久草视频在线 | 99国产精品国产免费观看 | 日本成人一区二区 | 国产一区二区三区在线观看视频 | 精品一区二区亚洲 |