2016-09-06 3 views
0

Wir haben den folgenden Code in unserer Anwendung, um einen prozentualen Wert im Zeitverlauf für mehrere Niederlassungen eines Unternehmens anzuzeigen. Die Verzweigungsnamen werden in einem benutzerdefinierten Kontrollkästchen angezeigt, in dem Sie Kontrollkästchen dynamisch hinzufügen können, um eine bestimmte Verzweigung anzuzeigen oder nicht anzuzeigen. Es gibt eine Prozedur auf einen Knopf klicken, um die Abfragen zu öffnen und sollte dann die Reihe auf dem Diagramm anzeigen. Die Serie wird jedoch nicht angezeigt. Die Abfragen geben Daten zurück, und die Achse im Diagramm ändert sich, um den von der Abfrage zurückgegebenen Wertebereich zu berücksichtigen. Dies wurde ursprünglich in Delphi 10 entwickelt, das funktioniert jetzt nicht in Delphi XE7.Delphi XE7 - TDBChart zeigt keine Reihe an

type 
    TBranchItem = class 
    procedure CheckBoxClick(Sender: TObject); 
    private 
    FColour: TColor; 
    public 
    BranchID: integer; 
    Query: TADOQuery; 
    CheckBox: TCheckBox; 
    property Colour: TColor read FColour write FColour; 

    constructor Create(const Connection: TADOConnection); 
    destructor Destroy; 

    end; 

    TfrmGiftAidBranchSummary = class(TfrmBaseMts) 
    Panel1: TPanel; 
    mtsBackButton1: TmtsBackButton; 
    chGAProportion: TDBChart; 
    Q: TADOQuery; 
    cbpBranches: TCheckBoxPanel; 
    Panel2: TPanel; 
    edStartMonth: TEdit; 
    Label1: TLabel; 
    Label2: TLabel; 
    edEndMonth: TEdit; 
    lblStartDate: TLabel; 
    lblEndDate: TLabel; 
    btnDraw: TmtsButton; 
    chkIncluderefunds: TCheckBox; 
    procedure FormShow(Sender: TObject); 
    procedure FormCreate(Sender: TObject); 
    procedure mtsBackButton1Click(Sender: TObject); 
    procedure btnDrawClick(Sender: TObject); 
    procedure edStartMonthChange(Sender: TObject); 
    procedure edEndMonthChange(Sender: TObject); 
    private 
    { Private declarations } 
    FColourArray: array[0..99] of TColor; 
    FBranchItemArray: array of TBranchItem; 

    procedure FillColourArray; 
    procedure DrawGAProportionChart; 
    procedure CreateBranchItems; 
    public 
    { Public declarations } 
    end; 


var 
    frmGiftAidBranchSummary: TfrmGiftAidBranchSummary; 

implementation 

{$R *.dfm} 

{ TfrmGiftAidBranchSummary } 

procedure TfrmGiftAidBranchSummary.btnDrawClick(Sender: TObject); 
begin 
    inherited; 
    Screen.Cursor := crHourGlass; 
    DrawGAProportionChart; 
    Screen.Cursor := crDefault; 
end; 

procedure TfrmGiftAidBranchSummary.CreateBranchItems; 
var 
    Count: integer; 
    LineSeriesArray: array of TChartSeries; 
begin 
    Q.Close; 
    Q.SQL.Clear; 
    Q.SQL.Add('SELECT BranchID, Name FROM BranchTransfer'); 
    Q.SQL.Add('WHERE Webshop = 0 AND BranchController = 0'); 
    Q.SQL.Add('AND BranchID > 0'); 
    Q.SQL.Add('ORDER BY BranchID'); 
    Q.Open; 

    Count := 0; 

    SetLength(FBranchItemArray, Q.RecordCount); 
    SetLength(LineSeriesArray, Q.RecordCount); 

    while not Q.Eof do 
    begin 
    FBranchItemArray[Count] := TBranchItem.Create(dmMainDataModule.dbMTS); 
    FBranchItemArray[Count].BranchID := Q.FieldByName('BranchID').AsInteger; 
    FBranchItemArray[Count].Colour := FColourArray[Count]; 
    FBranchItemArray[Count].CheckBox := cbpBranches.AddCheckBox(Q.FieldByName('Name').AsString, True, FBranchItemArray[Count].Colour); 
    FBranchItemArray[Count].CheckBox.OnClick := FBranchItemArray[Count].CheckBoxClick; 

    FBranchItemArray[Count].Query.Close; 
    FBranchItemArray[Count].Query.SQL.Clear; 
    FBranchItemArray[Count].Query.SQL.Add('SELECT A.BranchID, DonatedValue, GiftAidValue, A.month_no,'); 
    FBranchItemArray[Count].Query.SQL.Add('CASE WHEN DonatedValue = 0 THEN 0 ELSE (GiftAidValue/DonatedValue) * 100 END AS GAProportion'); 
    FBranchItemArray[Count].Query.SQL.Add('FROM'); 
    FBranchItemArray[Count].Query.SQL.Add('(SELECT branchid, SUM(value) AS DonatedValue, month_no from audit'); 
    FBranchItemArray[Count].Query.SQL.Add('WHERE trans_type in (''CS'', ''CRS'', ''VS'')'); 
    FBranchItemArray[Count].Query.SQL.Add('AND stock_type = ''G'''); 
    FBranchItemArray[Count].Query.SQL.Add('AND BranchID = ' + IntToStr(FBranchItemArray[Count].BranchID)); 
    FBranchItemArray[Count].Query.SQL.Add('AND Month_no >= ' + edStartMonth.Text); 
    FBranchItemArray[Count].Query.SQL.Add('AND Month_no <= ' + edEndMonth.Text); 
    FBranchItemArray[Count].Query.SQL.Add('AND Qty > 0'); 
    FBranchItemArray[Count].Query.SQL.Add('GROUP BY BranchID, month_no) A'); 
    FBranchItemArray[Count].Query.SQL.Add('LEFT Join'); 
    FBranchItemArray[Count].Query.SQL.Add('(SELECT branchid, SUM(value) AS GiftAidValue, month_no from audit'); 
    FBranchItemArray[Count].Query.SQL.Add('WHERE trans_type in (''CS'', ''CRS'', ''VS'')'); 
    FBranchItemArray[Count].Query.SQL.Add('AND stock_type = ''G'''); 
    FBranchItemArray[Count].Query.SQL.Add('AND Month_no >= ' + edStartMonth.Text); 
    FBranchItemArray[Count].Query.SQL.Add('AND Month_no <= ' + edEndMonth.Text); 
    FBranchItemArray[Count].Query.SQL.Add('AND Qty > 0'); 
    FBranchItemArray[Count].Query.SQL.Add('AND DonorAccountID IN (SELECT Account_id FROM customer WHERE GiftAid <> 0)'); 
    FBranchItemArray[Count].Query.SQL.Add('AND BranchID = ' + IntToStr(FBranchItemArray[Count].BranchID)); 
    FBranchItemArray[Count].Query.SQL.Add('GROUP BY BranchID, month_no) G'); 
    FBranchItemArray[Count].Query.SQL.Add('ON A.BranchID = G.BranchID'); 
    FBranchItemArray[Count].Query.SQL.Add('and A.month_no = G.month_no'); 
    FBranchItemArray[Count].Query.SQL.Add('ORDER BY month_no, BranchID'); 

    LineSeriesArray[Count] := TChartSeries.Create(chGAProportion); 
    LineSeriesArray[Count].ParentChart := chGAProportion; 
    LineSeriesArray[Count].DataSource := FBranchItemArray[Count].Query; 
    LineSeriesArray[Count].CheckDatasource; 
    LineSeriesArray[Count].YValues.ValueSource := 'GAProportion'; 
    LineSeriesArray[Count].XValues.ValueSource := 'Month_no'; 
    LineSeriesArray[Count].XLabelsSource := 'Month_no'; 
    LineSeriesArray[Count].SeriesColor := FColourArray[Count]; 
    LineSeriesArray[Count].Pen.Width := 2; 

    SetChecked(FBranchItemArray[Count].CheckBox, True); 

    Inc(Count); 
    Q.Next; 
    end; 

    chGAProportion.AddSeries(LineSeriesArray); 
end; 

procedure TfrmGiftAidBranchSummary.DrawGAProportionChart; 
var 
    i: Integer; 
begin 
    for i := 0 to Length(FBranchItemArray) - 1 do 
    begin 
    FBranchItemArray[i].Query.Close; 

    FBranchItemArray[i].Query.SQL[7] := 'AND Month_no >= ' + edStartMonth.Text; 
    FBranchItemArray[i].Query.SQL[8] := 'AND Month_no <= ' + edEndMonth.Text; 
    FBranchItemArray[i].Query.SQL[15] := 'AND Month_no >= ' + edStartMonth.Text; 
    FBranchItemArray[i].Query.SQL[16] := 'AND Month_no <= ' + edEndMonth.Text; 


    if chkIncluderefunds.Checked then 
    begin 
     FBranchItemArray[i].Query.SQL[9] := ''; 
     FBranchItemArray[i].Query.SQL[17] := ''; 
    end 
    else 
    begin 
     FBranchItemArray[i].Query.SQL[9] := 'AND Qty > 0'; 
     FBranchItemArray[i].Query.SQL[17] := 'AND Qty > 0'; 
    end; 

    if FBranchItemArray[i].CheckBox.Checked then 
     FBranchItemArray[i].Query.Open; 
    end; 

end; 

procedure TfrmGiftAidBranchSummary.edEndMonthChange(Sender: TObject); 
begin 
    inherited; 
    Q.Close; 
    Q.SQL.Clear; 
    Q.SQL.Add('SELECT MAX(trans_date) AS trans_date FROM audit WHERE Month_no = ' + edEndMonth.Text); 
    Q.Open; 

    if not (Q.Bof and Q.Eof) then 
    lblEndDate.Caption := FormatDateTime('dd/mm/yy', Q.FieldByName('trans_date').AsDateTime) 
    else 
    lblEndDate.Caption := 'Not Found'; 
end; 

procedure TfrmGiftAidBranchSummary.edStartMonthChange(Sender: TObject); 
begin 
    inherited; 
    Q.Close; 
    Q.SQL.Clear; 
    Q.SQL.Add('SELECT MIN(trans_date) AS trans_date FROM audit WHERE Month_no = ' + edStartMonth.Text); 
    Q.Open; 

    if not (Q.Bof and Q.Eof) then 
    lblStartDate.Caption := FormatDateTime('dd/mm/yy', Q.FieldByName('trans_date').AsDateTime) 
    else 
    lblStartDate.Caption := 'Not Found'; 
end; 

{ TBranchItem } 

procedure TBranchItem.CheckBoxClick(Sender: TObject); 
begin 
    if Checkbox.Checked then 
    Query.Open 
    else 
    Query.Close; 
end; 

constructor TBranchItem.Create(const Connection: TADOConnection); 
begin 
    Query := TADOQuery.Create(nil); 
    Query.Connection := Connection; 
end; 

destructor TBranchItem.Destroy; 
begin 
    Query.Free; 
end; 

procedure TfrmGiftAidBranchSummary.FillColourArray; 
begin 
    FColourArray[0] := $008080; 
    FColourArray[1] := $FFB6C1; 
    FColourArray[2] := $00FFFF; 
    FColourArray[3] := $7FFFD4; 
    FColourArray[4] := $000000; 
    FColourArray[5] := $FFEBCD; 
    FColourArray[6] := $0000FF; 
    FColourArray[7] := $8A2BE2; 
    FColourArray[8] := $A52A2A; 
    FColourArray[9] := $DEB887; 
    FColourArray[10] := $5F9EA0; 
    FColourArray[11] := $7FFF00; 
    FColourArray[12] := $D2691E; 
    FColourArray[13] := $6495ED; 
    FColourArray[14] := $DC143C; 
    FColourArray[15] := $00008B; 
    FColourArray[16] := $008B8B; 
    FColourArray[17] := $B8860B; 
    FColourArray[18] := $A9A9A9; 
    FColourArray[19] := $006400; 
    FColourArray[20] := $BDB76B; 
    FColourArray[21] := $8B008B; 
    FColourArray[22] := $556B2F; 
    FColourArray[23] := $FF8C00; 
    FColourArray[24] := $9932CC; 
    FColourArray[25] := $8B0000; 
    FColourArray[26] := $E9967A; 
    FColourArray[27] := $8FBC8F; 
    FColourArray[28] := $483D8B; 
    FColourArray[29] := $2F4F4F; 
    FColourArray[30] := $00CED1; 
    FColourArray[31] := $9400D3; 
    FColourArray[32] := $FF1493; 
    FColourArray[33] := $00BFFF; 
    FColourArray[34] := $696969; 
    FColourArray[35] := $1E90FF; 
    FColourArray[36] := $B22222; 
    FColourArray[37] := $228B22; 
    FColourArray[38] := $FF00FF; 
    FColourArray[39] := $FFD700; 
    FColourArray[40] := $DAA520; 
    FColourArray[41] := $808080; 
    FColourArray[42] := $008000; 
    FColourArray[43] := $FF69B4; 
    FColourArray[44] := $CD5C5C; 
    FColourArray[45] := $4B0082; 
    FColourArray[46] := $7CFC00; 
    FColourArray[47] := $ADD8E6; 
    FColourArray[48] := $F08080; 
    FColourArray[49] := $90EE90; 
    FColourArray[50] := $D3D3D3; 
    FColourArray[51] := $FFA07A; 
    FColourArray[52] := $20B2AA; 
    FColourArray[53] := $87CEFA; 
    FColourArray[54] := $778899; 
    FColourArray[55] := $B0C4DE; 
    FColourArray[56] := $00FF00; 
    FColourArray[57] := $32CD32; 
    FColourArray[58] := $800000; 
    FColourArray[59] := $66CDAA; 
    FColourArray[60] := $0000CD; 
    FColourArray[61] := $BA55D3; 
    FColourArray[62] := $9370DB; 
    FColourArray[63] := $3CB371; 
    FColourArray[64] := $7B68EE; 
    FColourArray[65] := $00FA9A; 
    FColourArray[66] := $48D1CC; 
    FColourArray[67] := $C71585; 
    FColourArray[68] := $191970; 
    FColourArray[69] := $000080; 
    FColourArray[70] := $808000; 
    FColourArray[71] := $6B8E23; 
    FColourArray[72] := $FFA500; 
    FColourArray[73] := $FF4500; 
    FColourArray[74] := $DA70D6; 
    FColourArray[75] := $98FB98; 
    FColourArray[76] := $AFEEEE; 
    FColourArray[77] := $DB7093; 
    FColourArray[78] := $FFDAB9; 
    FColourArray[79] := $CD853F; 
    FColourArray[80] := $FFC0CB; 
    FColourArray[81] := $DDA0DD; 
    FColourArray[82] := $B0E0E6; 
    FColourArray[83] := $800080; 
    FColourArray[84] := $FF0000; 
    FColourArray[85] := $BC8F8F; 
    FColourArray[86] := $4169E1; 
    FColourArray[87] := $8B4513; 
    FColourArray[88] := $FA8072; 
    FColourArray[89] := $F4A460; 
    FColourArray[90] := $2E8B57; 
    FColourArray[91] := $A0522D; 
    FColourArray[92] := $C0C0C0; 
    FColourArray[93] := $87CEEB; 
    FColourArray[94] := $6A5ACD; 
    FColourArray[95] := $708090; 
    FColourArray[96] := $00FF7F; 
    FColourArray[97] := $4682B4; 
    FColourArray[98] := $D2B48C; 
    FColourArray[99] := $008080; 
end; 

procedure TfrmGiftAidBranchSummary.FormCreate(Sender: TObject); 
begin 
    inherited; 
    FillColourArray; 
end; 

procedure TfrmGiftAidBranchSummary.FormShow(Sender: TObject); 
begin 
    inherited; 
    with TADOQuery.Create(nil) do 
    try 
    Connection := dmMainDataModule.dbMTS; 

    Close; 
    SQL.Clear; 
    SQL.Add('SELECT month_no FROM Sequence'); 
    Open; 

    edStartMonth.Text := '1'; 

    if not (Q.Bof and Q.Eof) then 
     edEndMonth.Text := FieldByName('month_no').AsString 
    else 
     edEndMonth.Text := '1'; 
    finally 
    Free; 
    end; 

    CreateBranchItems; 
end; 

procedure TfrmGiftAidBranchSummary.mtsBackButton1Click(Sender: TObject); 
begin 
    inherited; 
    ModalResult := mrOK; 
end; 

Antwort

0

Gelöst. Anstelle von LineSeriesArray[Count] := TChartSeries.Create(chGAProportion); sollte es LineSeriesArray[Count] := TLineSeries.Create(chGAProportion); sein Dies geändert und jetzt gut funktioniert.