首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

新手小白求教点数组有关问题

2012-02-06 
新手小白求教点数组问题procedure TForm1.quzhi2()varASource,BU: stringiio: IntegerAA,subB:Integer

新手小白求教点数组问题
procedure TForm1.quzhi2();
  var
  ASource,BU: string;
  iio: Integer;
  AA,subB: Integer;
  AStrings: TStringList;
  Delimiter: Char; // 分隔符
begin
  try
  ASource := Edit2.Text;
  subB:=0;
  Delimiter := '+';
  AStrings := TStringList.Create;
  AStrings.Delimiter := Delimiter;
  AStrings.DelimitedText := PChar(ASource);
  for iio := 1 to AStrings.Count - 1 do
  begin
  BU:=AStrings.Strings[iio];
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add('select 角钢 from zhongliangbiao WHERE 材料名称='+BU+'');
  ADOQuery2.Open;
  AA:=strtoint(ADOQuery2.Fieldbyname('角钢').AsString);
  subB:=subB+AA;
  end;
  zhi2:=IntToStr(subB);
  finally
  AStrings.Free;
  end;
以上代码在运行的时候提示我Astrings没有初始化,我看上面那不已经创建了一个数组了吗,怎么会没有初始化呢

[解决办法]
try放错地方了,要放在Create后面

AStrings := TStringList.Create;
try
...
finally
 AStrings.free;
end;

[解决办法]
正确的应当是:
AStrings := TStringList.Create;
try
...
finally
AStrings.Free;
end;

如果把“AStrings := TStringList.Create;”放在try之后,比如:
try
Abort;
AStrings := TStringList.Create;
finally
AStrings.Free;
end;
在执行Abort之后,就不会执行“AStrings := TStringList.Create;”,而直接转去执行AStrings.Free;

所以编译器会警告AStrings可能没有被初始化

热点排行