Значение из БД в Excel

Avatar
  • обновлен
  • На рассмотрении

Доброго дня.

Подскажите пожалуйста, что я делаю не так?

Взял пример "Как вытащить значение из БД в Excel"

и пытаюсь добавить ещё пару каналов, но значения берутся всё равно из одного канала, ткните пальцем в ошибки.

Заранее спасибо.



var
  stream: TMemoryStream;
  error, error1, error2: word;
  reccount: integer;
  begindate, enddate, date: TDateTime;
  value: double;
  cellname_a, cellname_b, cellname_c, cellname_d: string;
  cellindex: word;
const
  FORMAT_CELL_NAME_A = 'A%d';
  FORMAT_CELL_NAME_B = 'B%d';
  FORMAT_CELL_NAME_C = 'C%d';
  FORMAT_CELL_NAME_D = 'D%d';
begin
  stream := TMemoryStream.Create;
  try
    // error code
    // DB_READ_OK = 0
    // DB_DATE_ERROR = 1
    // DB_MEMORY_OVERFLOW = 2
    // DB_CHANNEL_NOTFOUND = 3

    begindate := StrToDateTime('01.06.18 12:00:00');
    enddate := StrToDateTime('01.06.18 13:00:00');

    error := StreamReadFromDatabase(begindate, enddate, 'Канал 1', stream);
    error1 := StreamReadFromDatabase(begindate, enddate, 'Канал 2', stream);
    error2 := StreamReadFromDatabase(begindate, enddate, 'Канал 3', stream);

    if (error = 0) and (Excel.CreateTemplate = 0) then
    begin
      // Количество записей
      reccount := GetCountRecordToStream(stream);
      cellindex := 2;

      while GetValueFromStream (stream, date, value) do
      begin
        cellname_a := Format(FORMAT_CELL_NAME_A, [cellindex]);
        cellname_b := Format(FORMAT_CELL_NAME_B, [cellindex]);
cellname_c := Format(FORMAT_CELL_NAME_C, [cellindex]);
cellname_d := Format(FORMAT_CELL_NAME_D, [cellindex]);
        Excel.Cell[cellname_a] := DateTimeToStr(date);
        Excel.Cell[cellname_b] := Value;
Excel.Cell[cellname_c] := Value;
Excel.Cell[cellname_d] := Value;

        cellindex := cellindex + 1;
      end;

      Excel.Save('C:\Proba\test.xls');
      Excel.Close;

      ShowMessage('Готово');
    end;
  finally
    stream.free;
  end;
end.


Avatar
СИМП Лайт (тех поддержка)
  • На рассмотрении

День добрый.


Попробуйте по отдельности читать данные из БД ( StreamReadFromDatabase) и заносить их в таблицу эксель. Сейчас Вы вычитываете в один поток данные с трёх каналов.