各位,我是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不可理解~~~~~~~~~~~
公司最近要我写一个功能,要使用到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不可理解~~~~~~~~~~~
begin
Query.Next;
continue;
end;
then
begin
end;
好象是这中的格式不是VB中的那中格式。
begin
Query.Next;//这个我知道,不然在这里会死循环,然后和内存说“拜拜”的。不是这里
continue;
end;
如果说错,只能说是你的逻辑错了。或者用了错误的指令。
还有性能问题体现了你系统的设计好坏。打开数据是由客户决定的,不然是不会开的。
所以你说你不想打开却还是打开了,多半是你的设计问题。
好好检查一下吧
"编译程序前没有关闭数据源,还怪delphi"请问这一句话怎么理解呢?我诚恳的请问。
谢谢大家的帮忙。
不知道怎么去搞,因为if else这么的逻辑都有问题就麻烦了。哎~~~~~~~
至于重复读入数据的问题,一定是你这段代码放错位置,被重复调用了。
if Query2.RecordCount =0 then
不如换成while not query2.eof do
begin
end;
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 整一个死循环,还是功力问题,多学点把
------------------------------------------------------------------呵呵。都说了,我随手写的。当然有注意不到的地方!要是这一点都理解不了还怎么在软件公司混两年的??问题我自己解决了,有一个方法就和 ln521(*逃课小王子*) 说的一样,RecordCount的属性总不搞不请的。所以就改掉了不过真的有两个初级问题要问你们了。
得到帮助后就马上结帖,因为我是初级用户所以就只能给大家100分。不能加分给大家了问题一:
TQuery中的属性RequestLive设置成True/False有什么区别(我搞了很久了)
问题二:
使用TChart显示数据,当只有一个Series列的时候会显示很多具体的数据,我只想要显示Series的Title属性,我改怎么改!谢谢大家.......
TQuery中的属性RequestLive设置成True/False有什么区别(我搞了很久了)
问题二:
使用TChart显示数据,当只有一个Series列的时候会显示很多具体的数据,我只想要显示Series的Title属性,我改怎么改!谢谢大家.......