delphi 中StringList中遇到的坑

代码如下:

const
   cSql = 'select * from [%s$]';
var FileName : string;
    flag : Boolean;
    _TableList,AData: TStringList;
    _TableName,str1 : string;
    arr1 : array of string;
    _Index,k,i : Integer;
begin
  dlgOpen1.Create(nil);
  //指定默认打开路径
  dlgOpen1.InitialDir:='C:\Users\Administrator\桌面';
  dlgOpen1.Filter:='Excel文件|*.xls';
  flag:=dlgOpen1.Execute;
    if not flag then
    begin
      dlgOpen1.Free;
    end;
  FileName:=dlgOpen1.FileName;
  conn := TADOConnection.Create(nil);
  conn.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+FileName+';Extended Properties=excel 8.0;Persist Security Info=False';
  conn.LoginPrompt := False;
  conn.Connected := True;
  _TableList := TStringList.Create;
  conn.GetTableNames(_TableList);
  //SetLength(arr1,9);
  AData := TStringList.Create;
  if _TableList.Count > 0 then
  begin
    _TableName := StringReplace(_TableList.Strings[0], '$', '', [rfReplaceAll]); //+'$'
    qry1.Connection := conn;
    qry1.Close;
    qry1.sql.Text := Format(cSql,[_TableName]);
    qry1.Open;
    DSXLS.DataSet := qry1;
    //GridXLS.Datasource :=DSXLS;
  end;
  k := 0;i := 0;
  if qry1.RecordCount>0 then
  begin
    while not qry1.Eof do
    begin
      AData.Add(qry1.Fields[0].AsString);
      str1 := AData.Strings[0];
      AData.Add(qry1.Fields[1].AsString);
      AData.Add(qry1.Fields[2].AsString);
      AData.Add(qry1.Fields[3].AsString);
      AData.Add(qry1.Fields[4].AsString);
      AData.Add(qry1.Fields[5].AsString);
      AData.Add(qry1.Fields[6].AsString);
      AData.Add(qry1.Fields[7].AsString);
      AData.Add(qry1.Fields[8].AsString);
//      arr1[0] := qry1.Fields[0].Value;
//      arr1[1] := qry1.Fields[1].Value;
//      arr1[2] := qry1.Fields[2].Value;
//      arr1[3] := qry1.Fields[3].Value;
//      arr1[4] := qry1.Fields[4].Value;
//      arr1[5] := qry1.Fields[5].Value;
//      arr1[6] := qry1.Fields[6].Value;
//      arr1[7] := qry1.Fields[7].Value;
//      arr1[8] := qry1.Fields[8].Value;

      if (AData.Strings[0]<>'合计1')and(AData.Strings[0]<>'总计2')and(AData.Strings[0]<>'总计3') then
      begin
        _Index := cxgrdtblvw1.DataController.AppendRecord;
        cxgrdtblvw1.DataController.Values[_Index,0] := AData.Strings[0];
        cxgrdtblvw1.DataController.Values[_Index,1] := AData.Strings[1];
        cxgrdtblvw1.DataController.Values[_Index,2] := AData.Strings[2];
        cxgrdtblvw1.DataController.Values[_Index,3] := AData.Strings[3];
        cxgrdtblvw1.DataController.Values[_Index,4] := AData.Strings[4];
        cxgrdtblvw1.DataController.Values[_Index,5] := AData.Strings[5];
        cxgrdtblvw1.DataController.Values[_Index,6] := AData.Strings[6];
        cxgrdtblvw1.DataController.Values[_Index,7] := AData.Strings[7];
        cxgrdtblvw1.DataController.Values[_Index,8] := AData.Strings[8];
        AData.Clear;
        k := k+1;
        Application.ProcessMessages;
        cxgrdtblvw1.DataController.Post;
      end
      else
      begin
        if Trim(str1)='合计1' then
        ShowMessage('1');
      end;
      qry1.Next;
    end;
  cxgrdtblvw1.DataController.Post;
  showMessage(inttostr(k));
  end;
end;

这是一段通过ADO加载Execl在cxGrid显示的代码。其中第一行是‘合计1’‘总计2’‘总计3’的数据不导入,而我这段代码的问题在于我依旧在cxGrid中看到导出结果有‘合计1’‘总计2’‘总计3’的数据,打了断点也看到值一样没有差错。

最后想到了原来是StringList中的String是有空格的。所以debug的时候’合计1’<>’合计1’的结果是true,实际上是’合计1 ‘<>’合计1’.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值