搞不懂为什么这样的返回值为空?!!(50分)

  • 主题发起人 主题发起人 ericmm
  • 开始时间 开始时间
E

ericmm

Unregistered / Unconfirmed
GUEST, unregistred user!
我在编写以下程序的时候:
procedure TForm1.OvalButton2Click(Sender: TObject);
var
week,ke,i,j:integer;
temps:string;
begin
Query1.sql.Text:='delete * from classtb';
Query1.ExecSQL;
Query1.close;
Query1.sql.Text:='insert into classtb(xinqi,keci,kecheng,jiaoshi) values(:a,:b,:c,:d)';
for i:=1 to 65 do
if ((i mod 13)<10)and ((i mod 13)>0) then
begin
week:=(i div 13)+1;
ke:=(i mod 13);
with Query1 do
begin
Parambyname('a').AsString:=IntToStr(week);
Parambyname('b').AsString:=IntToStr(ke);
temps:=TEdit(FindComponent('Edit'+IntToStr(i))).Text;
Parambyname('c').AsString:=temps;
case ke of
1,2: j:=10;
3,4: j:=11;
5,6,7: j:=12;
8,9: j:=13;
end;
showmessage(TEdit(FindComponent('Edit'+IntToStr(j+(i div 13)))).Text);
temps:=TEdit(FindComponent('Edit'+IntToStr(j+(i div 13)))).Text;
Parambyname('d').AsString:=temps;
end;
Query1.ExecSQL;
Query1.Close;
end;
end;

不知道是怎么回事,temps的值老是为空,但是TEdit(FindComponent('Edit'+IntToStr(j+(i div 13)))).Text的值不为空啊.这是怎么
回事啊?!!
 
i:=1;
j:=1;
temps:=TEdit(FindComponent('Edit'+IntToStr(i+j))).Text;
showmessage(temps);


我这样试过后,发现结果正确,不知你的i,j运算是否正确?
 
我认为是 FindComponent的问题,单步执行以下。
 
To anzhiping:
没错,我按你的那个做了一下,结果没有错.我的i,j的运算在
单步运行的情况下没有错误,哎,真的不知道是什么地方出的错.

To zhangc:
我已经单步执行过了,好像不关FindComponent的事.
 
你是说:
showmessage(TEdit(FindComponent('Edit'+IntToStr(j+(i div 13)))).Text);
temps:=TEdit(FindComponent('Edit'+IntToStr(j+(i div 13)))).Text;
前面showmessage能Show出来,但不能赋值给temps吗??
 
先再加一个tempEdit= xxxx;
temps=tempEdit.text,看看问题是不是能隔离?
 
TO 柳五公子:
是呀,
TEdit(FindComponent('Edit'+IntToStr(j+(i div 13)))).Text;,明明有值啊,
可是就是不能传到temps里.
TO 曹晓钢:
这个行啊,可是那个还是不行.唉!
 
这就怪了?!给你瞎出点子:
var
tempc :array [0..255] of char;
begin
...
strpcopy(tempc,TEdit(FindComponent('Edit'+IntToStr(j+(i div 13)))).Text);
temps := tempc;
...
你试一下这样行吗??
 
with query1 do
begin
.....

....FindComponent('Edit'+IntToStr(j+(i div 13)))....
end;

hehe, 这个相当于
query1.findcomponent('Edit'+....)...

query1中当然没有什么edit...

showmessage正常我认为是编译器的功劳.
 
刚刚做过试验,
如果像Another_eYes所说的情况,两次的都是空。
 
至少我对了一半?
呵呵.
我发觉with ... do有很多不可理解的地方. 我遇到过好多次,
with bitmap1.Canvas do
begin
.....
TextOut(x, y, text);
end;

with bitmap1.Canvas do
begin
....
SetClipRgn(....); // api
......
TextOut(x, y, text); // ???
end;
照理两个TextOut应该都是Canvas.TextOut吧?
实际不是, 第二个编译时通不过, 编译器解释这个TextOut为Api调用!
而且不是每次都如此, SetClipRgn和TextOut中间的"....."代码如果不同有时又会解释正确.

:(
 
感谢Another_eYes提了个醒,的确是with....do 的原因,我把那句
with...do的去掉,将Parambyname改成Query1.Parambyname,呵呵,
就行了!!深感各位的帮助!!!

----ericmm三鞠躬!!!
 
呵呵,第一次给人分配,不好意思,不知道怎么分,胡乱了些,
对不住了!
 
后退
顶部