begin  sql:= TStringList.Create;
  sql.Append('SELECT T1.DECL_NO,T1.DECL_REG_NO,DECL_PERSON_CODE,DECL_DATE,ENT_PROPERTY,GOODS_PLACE,SHEET_TYPE_CODES,DECL_TYPE_CODE,VALUES_USD,VALUES_RMB,ENT_DECL_NO,CERT_TYPE_CODES,CONSIGNOR_CNAME ');
  sql.Append('from T_GOODS_DECL@' + dblinkInfo.dblinkName + ' T1, ');
  sql.Append('(select a.DECL_NO,b.DECL_REG_NO from T_CERT_STATUS a,T_DECL_BASE b ');
  sql.Append('where a.DECL_NO=b.DECL_NO and (status=''1'' or status=''0'') and dept_code = ''' + deptInfo.deptCode + ''') T2 ');
  sql.Append('where T1.DECL_REG_NO=T2.DECL_REG_NO and T1.DECL_REG_NO = :P1 ');
  sql.Append('and to_char(T1.DECL_DATE,''yyyy-MM-dd'')=''2005-10-28'' ');
  sql.Append('and T1.DECL_NO<>T2.DECL_NO');  adoQuery.SQL.Clear();
  adoQuery.SQL.Addstrings(sql);
  adoQuery.Parameters.ParamByName('P1').Value:= declRegNo;
  //adoQuery.Parameters.ParamByName('P2').Value:= queryValue;
  declBaseList:= TObjectList.Create(true);
  try
    try
      //showmessage(adoQuery.SQL.Text);
      adoQuery.Open;
      adoQuery.First();
      while not adoQuery.Eof do
      begin
        declBase:= TDeclBase.Create();
        declBase.declNo:= adoQuery.FieldByName('DECL_NO').AsString;
        declBase.declRegNo:= adoQuery.FieldByName('DECL_REG_NO').AsString;
        declBase.declPersonCode:= adoQuery.FieldByName('DECL_PERSON_CODE').AsString;
        declBase.declDate:= adoQuery.FieldByName('DECL_DATE').AsString;
        declBase.entProperty:= adoQuery.FieldByName('ENT_PROPERTY').AsString;
        adoQuery.Next();
      end;
      result:= declBaseList;
    finally
      adoQuery.Close;
    end;
  except
    result:= declBaseList;
  end;
  result:= declBaseList;
end;

我的数据库 语句这里 怎么一点查询 按钮 在
while not adoQuery.Eof do  这句跳出到 finally  adoQuery.Close;到底哪错了??请大家帮我看下
      

解决方案 »

  1.   


    begin  sql:= TStringList.Create;
      sql.Append('SELECT T1.DECL_NO,T1.DECL_REG_NO,DECL_PERSON_CODE,DECL_DATE,ENT_PROPERTY,GOODS_PLACE,SHEET_TYPE_CODES,DECL_TYPE_CODE,VALUES_USD,VALUES_RMB,ENT_DECL_NO,CERT_TYPE_CODES,CONSIGNOR_CNAME ');
      sql.Append('from T_GOODS_DECL@' + dblinkInfo.dblinkName + ' T1, ');
      sql.Append('(select a.DECL_NO,b.DECL_REG_NO from T_CERT_STATUS a,T_DECL_BASE b ');
      sql.Append('where a.DECL_NO=b.DECL_NO and (status=''1'' or status=''0'') and dept_code = ''' + deptInfo.deptCode + ''') T2 ');
      sql.Append('where T1.DECL_REG_NO=T2.DECL_REG_NO and T1.DECL_REG_NO = :P1 ');
      sql.Append('and to_char(T1.DECL_DATE,''yyyy-MM-dd'')=''2005-10-28'' ');
      sql.Append('and T1.DECL_NO<>T2.DECL_NO');  adoQuery.SQL.Clear();
      adoQuery.SQL.Addstrings(sql);
      adoQuery.Parameters.ParamByName('P1').Value:= declRegNo;
      //adoQuery.Parameters.ParamByName('P2').Value:= queryValue;
      declBaseList:= TObjectList.Create(true);
      try
        try
          adoQuery.Open;
          if not AdoQuery.IsEmpty then 
          begin
            adoQuery.First();
            while not adoQuery.Eof do
            begin
              declBase:= TDeclBase.Create();
              declBase.declNo:= adoQuery.FieldByName('DECL_NO').AsString;
              declBase.declRegNo:= adoQuery.FieldByName('DECL_REG_NO').AsString;
              declBase.declPersonCode:= adoQuery.FieldByName('DECL_PERSON_CODE').AsString;
              declBase.declDate:= adoQuery.FieldByName('DECL_DATE').AsString;
              declBase.entProperty:= adoQuery.FieldByName('ENT_PROPERTY').AsString;
              adoQuery.Next();
            end;
          end;
          result:= declBaseList;
        finally
          adoQuery.Close;
        end;
      except
        result:= declBaseList;
      end;
      result:= declBaseList;
    end;
      

  2.   

     我这里是 直接 从while not adoQuery.Eof do  这句跳出到 finally  adoQuery.Close;这个是为什么呢
      

  3.   

    我 用 PLSQL 执行这个 语句 就能查出数据呀~~~