新手小白求教点数组有关问题
新手小白求教点数组问题
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可能没有被初始化
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可能没有被初始化