while not adodataset1.Eof do
      begin
        for i:=0 to adodataset1.FieldCount-1 do
          sheet.cells[row,i+1]:= adodataset1.Fields[i].AsString;
        inc(row);
        adodataset1.Next; 
      end;其中有一个日期型字段,输出到excel 后日期乱了!怎么办????

解决方案 »

  1.   

    while not adodataset1.Eof do
          begin
            for i:=0 to adodataset1.FieldCount-1 do
            begin
              if adodataset1.Fields[i] is TDateTimeField then
              sheet.cells[row,i+1]:= formatdatetime('yyyy-MM-dd',adodataset1.Fields[i].asdatetime)
             else
               sheet.cells[row,i+1]:= adodataset1.Fields[i].AsString;   
            inc(row);
            adodataset1.Next; 
          end;
      

  2.   

    用decode(adodataset1.Fields[i].asdatetime,year,month,day)试试
      

  3.   

    你的代码可以这样处理:
       while not adodataset1.Eof do
            Application.ProcessMessages;
          begin
            for i:=0 to adodataset1.FieldCount-1 do
              Application.ProcessMessages;
              sheet.cells[row,i+1]:= formatedatetime('yyyy-m-d',adodataset1.Fields[i].Asdatetime);
            inc(row);
            adodataset1.Next; 
          end;
      

  4.   

    我觉得这样应该最好,上面的代码我改了一下:
    while not adodataset1.Eof do
            Application.ProcessMessages;
          begin
            for i:=0 to adodataset1.FieldCount-1 do
              Application.ProcessMessages;
              if ADOQuery1.Fields[i].DataType= ftdatetime then
              sheet.cells[row,i+1]:= formatedatetime('yyyy-m-d',adodataset1.Fields[i].Asdatetime)
              else
                  sheet.cells[row,i+1]:= adodataset1.Fields[i].Asstring;
            inc(row);
            adodataset1.Next; 
          end;
      

  5.   

    你系统的时间格式设置有问题,要么在前台FormatDateTime()要么在后台convert()
      

  6.   

    在 SQLServer 中加入自定义函数:CREATE FUNCTION dbo.Date_To_Str( @sourceDate AS DATETIME )
    RETURNS VARCHAR(20)
    AS
    BEGIN
      RETURN CAST( YEAR( @sourceDate ) AS VARCHAR(4) ) + '年' + CAST( MONTH( @sourceDate ) AS VARCHAR(2) ) + '月'+ CAST( DAY( @sourceDate ) AS VARCHAR(2) ) + '日' 
    END然后在查询时用以下语句实现:SELECT dbo.Date_To_Str( BirthDay ) AS TestDateTime FROM TestTable