1

次のコードを使用して、動的に一連のTDBChartを作成しました。MS-AccessとTADOQueryコンポーネントを使用しました。ボタンのコードクリックイベント。

var
qryData: TADOQuery;
intCnt: integer;
strlstField: TStringList;

begin
strlstField := TStringList.Create();
qryData := TADOQuery.Create(nil);
qryData.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + ExtractFilePath(Application.ExeName) + 'data.mdb';
qryData.SQL.Add('SELECT dept_name,2005 as [2005],2006 as [2006],2007 as [2007],'+
               '2008 as [2008],2009 as [2009],2010 as [2010], 2011 as [2211] FROM SALES');
qryData.Active := True;

DBChart1.Title.Text.Clear;
DBChart1.Title.Text.Add('Department Wise Sales Report');
DBChart1.Title.Font.Size := 14;
DBChart1.LeftAxis.Title.Font.Size := 12;   
DBChart1.LeftAxis.Title.Caption := 'Sales in Rs.';
DBChart1.BottomAxis.Title.Font.Size := 12;
DBChart1.BottomAxis.Title.Caption := 'Department Name';

//Charting Series
   //To Remove Old Series
for intCnt := DBChart1.SeriesCount -1 downto 0 do
   DBChart1.Series[intCnt].Free;
   //To Add New Series
for intCnt := 1 to qryData.FieldCount - 1 do begin
   strlstField.Add(qryData.FieldList[intCnt].FieldName);
   DBChart1.AddSeries(TBarSeries.Create(nil));
end;
   //To set source for Series
for intCnt:= 0 to DBChart1.SeriesCount -1 do begin
   with  DBChart1 do begin
      Series[intCnt].Clear;
      Series[intCnt].Title := strlstField[intCnt];
      Series[intCnt].ParentChart := DBChart1;
      Series[intCnt].DataSource := qryData;
      Series[intCnt].XLabelsSource := 'dept_name';
      Series[intCnt].YValues.ValueSource := strlstField[intCnt];
   end;
end;

問題:DATABASEのデータを変更して再実行しても、アプリケーションチャートは同じままです。チャートシリーズでは反映は行われません。上記のコードに間違いがありましたか? ここに画像の説明を入力してください

もう1つの問題は、写真では系列が2000の値になっていることですが、データベースに20,000を超えるすべての値を追加しています。

4

1 に答える 1

1

SELECTステートメントは、フィールド名ではなく整数を渡します。これが、すべてが約2,000である理由です。これは、整数としての年の値であるためです。

あなたのフィールドは実際に2005などと呼ばれていますか?その場合、フィールド名を角かっこで囲んで、整数ではなくフィールド名のように扱われるようにする必要があります。

qryData.SQL.Add('SELECT dept_name, [2005] as [2005], [2006] as [2006], [2007] as [2007], ' +
    '[2008] as [2008], [2009] as [2009], [2010] as [2010], [2011] as [2011] FROM SALES');

2011誤ってエイリアシングしていることにも注意してください2211(上記の私の修正済み)。

于 2012-11-06T07:00:58.750 に答える