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没有初始化,我看上面那不已经创建了一个数组了吗,怎么会没有初始化呢

解决方案 »

  1.   

    以下代码无措通过呢?我也没搞明白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 := 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;
      

  2.   

    try放错地方了,要放在Create后面AStrings := TStringList.Create;
    try
    ...
    finally
     AStrings.free;
    end;
      

  3.   

    正确的应当是:
    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可能没有被初始化