Как вытащить значение из БД в Excel

Avatar
  • обновлен
Можно ли используя функцию StreamReadFromDatabase вытащить значения тэгов за определенный период в Excel? Если да, то не могли бы вы дать пример как это сделать? И при записи в EXCEL мы не знаем сколько значений из базы туда упадет, поэтому как решить вопрос с требуемым количеством ячеек?
Avatar
Lexand

Доброго всем дня.

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

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

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


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
SIMP Tech (Сергей)
Добрый день!

А можно пример выложить для всеобщего обозрения ?
Решаю аналогичную задачу.


<a href="/s/attachments/19809/1/0/af387cd1d203e9524d37867816d76425.zip" class="i_item_file"><i class="icon-file"></i> example.zip</a>
example.zip
Avatar
Добрый день!

А можно пример выложить для всеобщего обозрения ?
Решаю аналогичную задачу.

С уважением, Кондратенко Анатолий
Новочеркасск
Avatar
Rashid
Если можете скиньте результаты на Rashid29@mail.ru
Avatar
SIMP Tech (Сергей)
Добрый вечер

Можно ли используя функцию StreamReadFromDatabase вытащить значения тэгов за определенный период в Excel? Если да, то не могли бы вы дать пример как это сделать? И при записи в EXCEL мы не знаем сколько значений из базы туда упадет, поэтому как решить вопрос с требуемым количеством ячеек?

Прошу прошения за задержку с ответом, все заняты выходом бета версии. Попробую накидать пример, скажите адрес куда скинуть результат.