dbchart组件的困惑。为什么出现莫名其妙的错误,高手帮忙啊,送分。

时间:2022-09-20 10:39:31
以下是段用来显示在一个dbchart组件中多个Series的代码,当程序在不同Series中切换时,经常提示“invalid ponter operation”,但有时又不提示,还有时出现“access violation at address ....”之类的错误,并自动将程序关了。始终找不到原因,请高手帮忙。

数据库是MSSQL2000企业版的。

procedure Tsvr_spfxs_je_paihangh_fxt.TutypeClick(Sender: TObject);
  var i:integer;
begin
  for i:=0 to DBChart.SeriesCount-1 do
  begin
   if DBChart.SeriesList.Series[i].Active then DBChart.SeriesList.Series[i].Active:=false;
  end;

    DBChart.SeriesList.Series[TUtype.ItemIndex].Active:=true;
    with DBChart.Series[TUtype.ItemIndex] do
    begin
    DataSource:=ADOQuery1;//绑定数据源
    DBChart.Title.Text.Clear;//标题清空
    DBChart.Title.Text.Add(self.Caption+'-'+SumDuiXiang.Items.Strings[SumDuiXiang.ItemIndex]+'-'+TUtype.Items.Strings[TUtype.ItemIndex]);//重置标题
    XLabelsSource:='caption';//主要这里设置为字段名
    YValues.ValueSource:='lszje';//Y轴字段名
    DBChart.LeftAxis.AutomaticMinimum:=True;
    end;
end;

18 个解决方案

#1


for i:=0 to DBChart.SeriesCount-1 do
  begin
  如果将下面IF这句去掉,不会出现错误,但几个图都显示出来了,如何隐藏其他的Series,且不会出错呢
   if DBChart.SeriesList.Series[i].Active then DBChart.SeriesList.Series[i].Active:=false;
  end;

#2


没人帮我,惨了,,,,

自己UP

#3


for i := stat_DBChart.SeriesCount-1 downto 0 do
    stat_DBChart.Series[i].Free;

#4


谢谢楼上的朋友,有两个问题想再问一下
1.downto 0是什么,我加了,为什么不行呢?
2.由于我是静态已经创建好了多个Series的,不知道free是否会有影响。
我来试一下,如果成功,分全给你了。

#5


哎,还未能解决,能给一下部分示例吗?

#6


不好意思,我的这句 for i:=0 to DBChart.SeriesCount-1 downto 0 do不能通过,不知道为什么?

#7


不是:for i:=0 to DBChart.SeriesCount-1 downto 0

应该是:for i:=DBChart.SeriesCount-1 downto 0

#8


downto 循环是一种降序循环

循环变量是从大到小,依次减1,直到0

#9


由于我是静态已经创建好了多个Series的,free的方法试了,也是不行。Series都没有了。

我该怎么办???

#10


嗯,非常感谢解释了downto的用法,受益。。。。。能再帮解决一下隐藏的问题吗?不知道动态创建Series是否会解决这样一问。

#11


其实你不要用stat_DBChart.Series[i].Free;

应该用:

if DBChart.SeriesList.Series[i].Visible then DBChart.SeriesList.Series[i].Visible :=false;

每一个series都有一个visible属性,如果为false,则隐藏起来看不见了。

如果用free,则释放掉了,是错的,除非你用动态创建起来。

#12


用visible := false; 的方法,隐藏series应该是可以解决你的问题的。

#13


if DBChart.SeriesList.Series[i].Visible then DBChart.SeriesList.Series[i].Visible :=false;

可是我的TDBchart组件的Series没有Visible 属性,真是怪事。

一开始就准备用Visible 属性来试。只有一个相似的:Visiblecount这样的属性,好像是隐藏的总数。

#14


不好意思,我有事要走了,先帮你UP一下,你在自己研究一下。

#15


嗯。真难为你了。你的TDbchart组件Series有Visible 属性吗?

#16


期待你回来。。。。

#17


有正在用TDBchart组件开发程序的朋友吗?可以交流一下吗?我的QQ:14171008
或者能直接在这里帮我一把,感谢感谢。

#18


请问楼上的兄弟:dbchart和dbchart1后面的点的内容是不相同.他们有什么区别呀?

#1


for i:=0 to DBChart.SeriesCount-1 do
  begin
  如果将下面IF这句去掉,不会出现错误,但几个图都显示出来了,如何隐藏其他的Series,且不会出错呢
   if DBChart.SeriesList.Series[i].Active then DBChart.SeriesList.Series[i].Active:=false;
  end;

#2


没人帮我,惨了,,,,

自己UP

#3


for i := stat_DBChart.SeriesCount-1 downto 0 do
    stat_DBChart.Series[i].Free;

#4


谢谢楼上的朋友,有两个问题想再问一下
1.downto 0是什么,我加了,为什么不行呢?
2.由于我是静态已经创建好了多个Series的,不知道free是否会有影响。
我来试一下,如果成功,分全给你了。

#5


哎,还未能解决,能给一下部分示例吗?

#6


不好意思,我的这句 for i:=0 to DBChart.SeriesCount-1 downto 0 do不能通过,不知道为什么?

#7


不是:for i:=0 to DBChart.SeriesCount-1 downto 0

应该是:for i:=DBChart.SeriesCount-1 downto 0

#8


downto 循环是一种降序循环

循环变量是从大到小,依次减1,直到0

#9


由于我是静态已经创建好了多个Series的,free的方法试了,也是不行。Series都没有了。

我该怎么办???

#10


嗯,非常感谢解释了downto的用法,受益。。。。。能再帮解决一下隐藏的问题吗?不知道动态创建Series是否会解决这样一问。

#11


其实你不要用stat_DBChart.Series[i].Free;

应该用:

if DBChart.SeriesList.Series[i].Visible then DBChart.SeriesList.Series[i].Visible :=false;

每一个series都有一个visible属性,如果为false,则隐藏起来看不见了。

如果用free,则释放掉了,是错的,除非你用动态创建起来。

#12


用visible := false; 的方法,隐藏series应该是可以解决你的问题的。

#13


if DBChart.SeriesList.Series[i].Visible then DBChart.SeriesList.Series[i].Visible :=false;

可是我的TDBchart组件的Series没有Visible 属性,真是怪事。

一开始就准备用Visible 属性来试。只有一个相似的:Visiblecount这样的属性,好像是隐藏的总数。

#14


不好意思,我有事要走了,先帮你UP一下,你在自己研究一下。

#15


嗯。真难为你了。你的TDbchart组件Series有Visible 属性吗?

#16


期待你回来。。。。

#17


有正在用TDBchart组件开发程序的朋友吗?可以交流一下吗?我的QQ:14171008
或者能直接在这里帮我一把,感谢感谢。

#18


请问楼上的兄弟:dbchart和dbchart1后面的点的内容是不相同.他们有什么区别呀?