Torry de gezerken gördüm. Sütunları toplamasada özet tablo veriyor. Belki birilerinin işine yarar.
simplepivot.pas isminde bir dosya açıp içeriğini bu şekilde değiştirin.
Kod: Tümünü seç
unit SimplePivot;
interface
uses DB;
function CreateSimplePivot(VerticalFieldName,
HorizontalFieldName,
ValueFieldName:String;
Query:TDataSet;
MemoryTable:TDataSet):Boolean;
implementation
function CreateSimplePivot(VerticalFieldName,
HorizontalFieldName,
ValueFieldName:String;
Query:TDataSet;
MemoryTable:TDataSet):Boolean;
var Temp1, Temp2:String;
Value, idx:integer;
begin
Query.DisableControls;
memoryTable.DisableControls;
MemoryTable.Close;
MemoryTable.FieldDefs.Clear;
if not Query.Active then Query.Open;
{need to check for exception here}
Query.First;
MemoryTable.FieldDefs.Add(VerticalFieldName, ftString, 50);
while not Query.EOF do
begin
Temp2 := Query.FieldByName(HorizontalFieldName).asString;
if MemoryTable.FieldDefs.IndexOf(Temp2) = -1 then
MemoryTable.FieldDefs.Add(Temp2, ftInteger);
Query.Next;
end;
MemoryTable.Open;
Query.First;
while not Query.EOF do
begin
Temp1 := Query.FieldByName(VerticalFieldName).asString;
Temp2 := Query.FieldByName(HorizontalFieldName).asString;
Value := Query.FieldByName(ValueFieldName).asInteger;
if MemoryTable.Locate(VerticalFieldName,temp1,[locaseinsensitive])
then begin
MemoryTable.Edit;
MemoryTable.FieldByName(Temp2).AsInteger := Value;
MemoryTable.Post;
end
else begin
MemoryTable.Append;
MemoryTable.FieldByName(VerticalFieldName).asString := Temp1;
for idx := 1 to MemoryTable.Fields.Count - 1 do
MemoryTable.Fields[idx].AsInteger := 0;
MemoryTable.FieldByName(Temp2).asInteger := Value;
MemoryTable.Post;
end;
Query.Next;
end;
memoryTable.First;
memoryTable.EnableControls;
Query.First;
Query.EnableControls;
end;
end.
Oluşan pas dosyasını projenize ekleyin.
Kullanımı :
Kod: Tümünü seç
CreateSimplePivot('dikey sütunlar','yatay sütunlar','özettabloalınacakalanadı',Query1,MemoryData1);
Query veritabanına bağlı olan bildigimiz query, memorydata ise herhangi bir memory table bileşeni. Ben JEDİ içindeki memory table nesnesini kullandım.