奇怪的问题!(100)

  • 主题发起人 主题发起人 小毛孩
  • 开始时间 开始时间

小毛孩

Unregistered / Unconfirmed
GUEST, unregistred user!
我需要把listbox的数据与dbgrid中的每一个数据进行比较,采用最笨的方法,即先取listbox中的第一个数据从dbgrid的第一行逐列比较,接着第二行直至最后,然后取listbox中第二个、第三个。。。数据直至最后一个。编写的代码如下:for nf :=1 to LB2.Items.Capacity do begin for n :=1 to 15 do begin with ADOQuery1 do begin if FieldByName('property_1').AsString = LB2.Items.Strings[nf-1] then begin arrayexample[n]:=arrayexample[n]+1; end; if FieldByName('property_2').AsString = LB2.Items.Strings[nf-1] then arrayexample[n]:=arrayexample[n]+1; if FieldByName('property_3').AsString = LB2.Items.Strings[nf-1] then arrayexample[n]:=arrayexample[n]+1; if FieldByName('property_4').AsString = LB2.Items.Strings[nf-1] then arrayexample[n]:=arrayexample[n]+1; if FieldByName('property_5').AsString = LB2.Items.Strings[nf-1] then arrayexample[n]:=arrayexample[n]+1; if FieldByName('condition').AsString = IntToStr(arrayexample[n]) then flag[n]:=1; if nf=1 then Label5.Caption:=LB2.Items.Strings[nf-1]; if nf=2 then Label6.Caption:=LB2.Items.Strings[nf-1]; if nf=3 then Label7.Caption:=LB2.Items.Strings[nf-1]; end; ADOQuery1.Next ; end; end;其中,最后三个if是用于测试用的,结果表明:1、最后的三个if语句得到运行;2、前面的五个if语句没能得到运行(即使条件满足时,也不能);3、如果把前面五个if语句中的nf改成具体的数值,则该五句语句均能运行奇怪!纳闷中!请高人指点!如果有其他好的方法,也希望不吝赐教!谢谢!
 
很简单,编译优化的结果。
 
对apiao: sorry,没能明白你的意思,烦请解释一下!谢谢!
 
试试trim一下,看看是不是有空格在内.
 
应该不是,因为我把nf-1改成具体数字,则能够正常执行。
 
你的代码实在不注意缩进等格式,试试下面的代码:procedure TForm1.btn1Click(Sender: TObject);begin for nf := 1 to LB2.Items.Count - 1 do begin with ADOQuery1 do begin First; while not Eof do begin if Trim(FieldByName('property_1').AsString) = Trim(LB2.Items.Strings[nf - 1]) then arrayexample[nf] := Inc(arrayexample[nf]); ...; Next; end; end; end;end;祝你好运。另外,你可以把内容赋到变量里进行调试看看。
 
谢谢你,虽然我还没试试,就你的建议也应该谢谢你的提醒!
 
经过大家的指点,我已于昨晚搞定。总结原因有如下几点:1、程序的流程不清晰;2、没养成良好的编程思维;3、尚缺乏练习等等。我把改后的程序公布如下:for k :=1 to LB2.Items.Capacity dobegin fact := LB2.Items.Strings[k-1]; ADOQuery1.First; for n :=1 to 15 do begin with ADOQuery1 do begin p1 := FieldByName('property_1').AsString; p2 := FieldByName('property_2').AsString; p3 := FieldByName('property_3').AsString; p4 := FieldByName('property_4').AsString; p5 := FieldByName('property_5').AsString; if p1 = fact then arrayexample[n]:=arrayexample[n]+1; if p2 = fact then arrayexample[n]:=arrayexample[n]+1; if p3 = fact then arrayexample[n]:=arrayexample[n]+1; if p4 = fact then arrayexample[n]:=arrayexample[n]+1; if p5 = fact then arrayexample[n]:=arrayexample[n]+1; end; ADOQuery1.Next ; end;end;另外,我还有个问题想问问,就是我程序DBGrid中的排序跟数据库中顺序不一致,即使我使用了oeder排序也不行。恳请大家赐教!谢谢!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
896
SUNSTONE的Delphi笔记
S
S
回复
0
查看
873
SUNSTONE的Delphi笔记
S
后退
顶部