各位,我是Delphi新手,但工作(写程序)两年了。
公司最近要我写一个功能,要使用到TChart(我只做了修改添加功能),所以必须使用Delphi,但我发现,Delphi在开始运行的时候他就把系统在运行中会被操作的过程都先做了一遍了,比如:我用一个300多万条记录的表,我用一个数据控件(在一个要打开才运行的窗口上)来获得表的数据,可在开始运行的时候,还没有操作他就先拿数据了,而且真的要打开窗口的时候又要拿数据,大家可以想一想300多万条的记录又多慢!!!为什么该死的Delphi会先拿数据(或者说先把所有的代码运行一遍),我在代码里(打开运行没有操作到的)加了showmessage()可是都出现了。而且最不可以理解的就是---------为什么if....else.........判断正确不必运行了但还运行~~~~~~~~~~`比如
While not Query.Eof do
begin
  name := Query.FieldByName('name').AsString;
  Query2.close;
  Query2.Params.ParamByName('code').Value := code;
  Query2.Open;
  Query2.First;
  if Query2.RecordCount =0 then continue;
  {
  // 在这里可以判断到是0了,但continue后还会运行以后的操作。不可理解啊
   }
  。//代码我随手写的,不必讨论代码写的对错,只讨论逻辑的东西。
   Query.Next;
end;在我的使用中Delphi出现了简单的逻辑错误。if then 是废物来的。
为什么啊~~~~~~~~~~~我好痛苦啊
Delphi不可理解~~~~~~~~~~~

解决方案 »

  1.   

    if Query2.RecordCount =0 then
    begin
        Query.Next;
        continue;
    end;
      

  2.   

    if <表达示>
        then
           begin
        
           end;
    好象是这中的格式不是VB中的那中格式。
      

  3.   

    to  jacket008(§优国优民§) ( ) if Query2.RecordCount =0 then
    begin
        Query.Next;//这个我知道,不然在这里会死循环,然后和内存说“拜拜”的。不是这里
        continue;
    end;
      

  4.   

    谁能告诉我,怎样能“让Delphi在该运行的时候只运行逻辑上正确的代码”!!
      

  5.   

    编译程序前没有关闭数据源,还怪delphi
      

  6.   

    同志,delphi是不会在这些地方出现错误的。
    如果说错,只能说是你的逻辑错了。或者用了错误的指令。
    还有性能问题体现了你系统的设计好坏。打开数据是由客户决定的,不然是不会开的。
    所以你说你不想打开却还是打开了,多半是你的设计问题。
    好好检查一下吧
      

  7.   

    to podianliangshui(泼点凉水) 
    "编译程序前没有关闭数据源,还怪delphi"请问这一句话怎么理解呢?我诚恳的请问。
      

  8.   

    把你的数据源的dataset的active属性false掉
      

  9.   

    本来就是False的,所以我有些奇怪。
    谢谢大家的帮忙。
    不知道怎么去搞,因为if else这么的逻辑都有问题就麻烦了。哎~~~~~~~
      

  10.   

    你Continue之后又会继续执行Query中的内容,当然没用了。
    至于重复读入数据的问题,一定是你这段代码放错位置,被重复调用了。
      

  11.   

    if else没有什么问题啊
    if Query2.RecordCount =0 then
    不如换成while not query2.eof do
            begin
            end;
      

  12.   

    continue只是结束本次循环,并不退出循环,只要not Query.eof,程序还会执行那段循环的。
      

  13.   

    While not Query.Eof do
    begin
      name := Query.FieldByName('name').AsString;
      Query2.close;
      Query2.Params.ParamByName('code').Value := code;
      Query2.Open;
      Query2.First;
      if Query2.RecordCount =0 then continue如果 Query2.RecordCount =0 整一个死循环,还是功力问题,多学点把
      

  14.   

    如果 Query2.RecordCount =0 整一个死循环,还是功力问题,多学点把
    ------------------------------------------------------------------呵呵。都说了,我随手写的。当然有注意不到的地方!要是这一点都理解不了还怎么在软件公司混两年的??问题我自己解决了,有一个方法就和 ln521(*逃课小王子*) 说的一样,RecordCount的属性总不搞不请的。所以就改掉了不过真的有两个初级问题要问你们了。
    得到帮助后就马上结帖,因为我是初级用户所以就只能给大家100分。不能加分给大家了问题一:
    TQuery中的属性RequestLive设置成True/False有什么区别(我搞了很久了)
    问题二:
    使用TChart显示数据,当只有一个Series列的时候会显示很多具体的数据,我只想要显示Series的Title属性,我改怎么改!谢谢大家.......
      

  15.   

    帮忙啊.........问题一:
    TQuery中的属性RequestLive设置成True/False有什么区别(我搞了很久了)
    问题二:
    使用TChart显示数据,当只有一个Series列的时候会显示很多具体的数据,我只想要显示Series的Title属性,我改怎么改!谢谢大家.......
      

  16.   

    RequestLive=true时候 query返回的数据集是可操作 false时是只读 只限DBE 并且你要保证你的SQL返回的数据集是让你操作的(添加修改删除),否则会异常