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没有初始化,我看上面那不已经创建了一个数组了吗,怎么会没有初始化呢
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没有初始化,我看上面那不已经创建了一个数组了吗,怎么会没有初始化呢
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 := ASource;
Memo1.Lines.Clear;
for iio := 0 to AStrings.Count - 1 do
begin
BU:=AStrings.Strings[iio]; Memo1.Lines.Add(BU); end; finally
AStrings.Free;
end;
end;
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可能没有被初始化