procedure TForm1.BitBtn2Click(Sender: TObject);
var
  str: string;
  _queueNUM: integer;
  _queueTime: string;
  MOC_NO: string;  starttime, endtime: string;
  temp1, temp2: string;
  Data: Tstringlist;
  i, j, k: integer;
  Ppeopleflow1, Ppeopleflowtemp1: Ppeopleflow;
  Flag: integer;
  temp: string;
begin  Series1.Clear;
  Series2.Clear;
  Series3.Clear;
  Series4.Clear;
  Series5.Clear;
  ClearData;
  CleartempData;  Data := Tstringlist.Create;
  try
    str := 'select  distinct moc_no  as MOC_NO  from  t_fundsflow  ';
    if ADOQuery3.Active then ADOQuery3.Close;
    ADOQuery3.SQL.Text := str;
    ADOQuery3.Open;
    if ADOQuery3.RecordCount > 0 then
    begin
      ADOQuery3.First;
      while not ADOQuery3.Eof do
      begin
        MOC_NO := ADOQuery3.FieldByName('MOC_NO').AsString;
        Data.Add(MOC_NO);
        ADOQuery3.Next;
      end;
    end;    try
      str := 'select MOC_NO,concat(SUBSTRING(localdatetime, 1, 15),''0:00'') as ''时间'',  count(*) as ''数量'' ' +
        ' from   t_fundsflow ' +
        ' where actionFLAG=''-'' and  consumeDate=''%S'' and  consumeTime<''%s'' and consumetime>''%s'' ' +
        ' group by SUBSTRING(localdatetime, 1, 15) ,MOC_NO';      if ADOQuery3.Active then ADOQuery3.Close;
      //ADOQuery3.SQL.Text := str;
      ADOQuery3.SQL.Text := Format(str, [datetimetostr(DateTimePicker1.Date), timetostr(DateTimePicker4.DateTime), timetostr(DateTimePicker3.DateTime)]);
      ADOQuery3.Open;
      Series1.Clear;
      if ADOQuery3.RecordCount > 0 then
      begin
        ADOQuery3.First;
        while not ADOQuery3.Eof do
        begin          MOC_NO := ADOQuery3.FieldByName('MOC_NO').AsString;          _queueNUM := ADOQuery3.FieldByName('数量').AsInteger;          _queueTime := ADOQuery3.FieldByName('时间').AsString;          AddData(MOC_NO, _queueTime, _queueNUM);          ADOQuery3.Next;
        end;
      end;
    except
    end;
    try
      temp1 := copy(datetimetostr(DateTimePicker3.date), pos(' ', datetimetostr(DateTimePicker3.date)) + 1, length(datetimetostr(DateTimePicker3.date)));
      starttime := datetimetostr(DateTimePicker1.Date) + ' ' + Copy(temp1, 1, 4) + '0:00';      temp2 := copy(datetimetostr(DateTimePicker4.date), pos(' ', datetimetostr(DateTimePicker4.date)) + 1, length(datetimetostr(DateTimePicker4.date)));
      endtime := datetimetostr(DateTimePicker1.Date) + ' ' + Copy(temp2, 1, 4) + '0:00';      for j := 0 to Data.Count - 1 do
      begin
        while (starttime <= endtime) do
        begin
          FLAG := 2;
          for i := 0 to DataList.Count - 1 do
          begin
            Ppeopleflow1 := DataList.Items[i];
            if ((Ppeopleflow1.machineNO = Data.Strings[j]) and (Ppeopleflow1.consumeDate = starttime)) then
            begin
              Flag := 1;
               // break;
            end;
          end;
          if FLAG = 2 then
          begin
            AddData(Data.Strings[j], starttime, 0);
          end;
          for k := 0 to Data.Count - 1 do
          begin
            AddtempData(Data.Strings[k], starttime, 0);
          end;
          starttime := datetimetostr(IncSecond(strtodatetime(starttime), 600));
        end;
      end;
    except
    end;    for i := 0 to tempdatalist.Count - 1 do
    begin
      Ppeopleflowtemp1 := tempdatalist.Items[i];      for j := 0 to datalist.Count - 1 do
      begin
        Ppeopleflow1 := datalist.Items[j];        if (Ppeopleflowtemp1.consumeDate = Ppeopleflow1.consumeDate) and (Ppeopleflowtemp1.machineNO=Ppeopleflow1.machineNO) then
        begin          //Ppeopleflowtemp1.machineNO := Ppeopleflow1.machineNO;
          Ppeopleflowtemp1.num := Ppeopleflow1.num;
        end;
      end;
    end;   for i := 0 to tempdatalist.Count - 1 do
    begin
      Ppeopleflow1 := tempdatalist.Items[i];      if Ppeopleflow1.machineNO = '0001' then
      begin
        temp := Ppeopleflow1.consumeDate;
        //Series0001.Add(Ppeopleflow1.num,copy(temp,pos(' ',temp)+1,length(temp)),clRed);
        Series1.Add(Ppeopleflow1.num, copy(temp, pos(' ', temp) + 1, length(temp)));
      end;
      if Ppeopleflow1.machineNO = '0002' then
      begin
        temp := Ppeopleflow1.consumeDate;
        Series2.Add(Ppeopleflow1.num, copy(temp, pos(' ', temp) + 1, length(temp)));
      end;      if Ppeopleflow1.machineNO = '0003' then
      begin
        temp := Ppeopleflow1.consumeDate;
        Series3.Add(Ppeopleflow1.num, copy(temp, pos(' ', temp) + 1, length(temp)));
      end;      if Ppeopleflow1.machineNO = '0004' then
      begin
        temp := Ppeopleflow1.consumeDate;
        Series4.Add(Ppeopleflow1.num, copy(temp, pos(' ', temp) + 1, length(temp)));
      end;      if Ppeopleflow1.machineNO = 'coffee1' then
      begin
        temp := Ppeopleflow1.consumeDate;
        Series5.Add(Ppeopleflow1.num, copy(temp, pos(' ', temp) + 1, length(temp)));
      end;
    end;
        if (ADOQuery3.Active=False) or (ADOQuery3.RecordCount=0)
then
 begin
     showmessage('无数据 条件是否输入正确')
  end;  finally
    Data.Free;  end;
end;

解决方案 »

  1.   

    因为你的sql中涉及到了日期的转换,可能有的机器日期格式不符合,导致你查不到数据,所以显示不出来
    比如正常是 2010-01-01,可能某些机器转换后为2010/01/01
      

  2.   

    我在代码的后面 加了这么一句话
     if (ADOQuery3.Active=False) or (ADOQuery3.RecordCount=0)
    then
     begin
      showmessage('无数据 条件是否输入正确')
      end;
    就是说如果ADOQuery3如果没数据的 应该是会出提示的 但我查后并没有出提示 所以我才认为数据是有的