Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 227

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Передо мной стоит задача создавать посменный отчет из БД SQL 2005
Начало и конец запрос задаются руками из DitaTimePicker. Результат отоброжается в DB Grid а оттуда экспортируется в Excel. Помогите пожалуйста со счетчиком.Никак не могу сделать так чтобы от начальной даты до конечной через каждые 12 часов добавлялась следующая строка.Запрос параметризованный.Помогите пожалуйста кто может

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls, Buttons, Menus, FMTBcd, ADODB, DB, SqlExpr, DBTables,
  8. MXTABLES, ExtDlgs, jpeg, ExtCtrls, ComCtrls, Grids, DBGrids, OleServer,
  9. Excel2000, DBCtrls, CmAdmCtl;
  10.  
  11. type
  12. TForm1 = class(TForm)
  13. BitBtn1: TBitBtn;
  14. DataSource1: TDataSource;
  15. Label2: TLabel;
  16. Label3: TLabel;
  17. DateTimePicker1: TDateTimePicker;
  18. DateTimePicker3: TDateTimePicker;
  19. DateTimePicker2: TDateTimePicker;
  20. DateTimePicker4: TDateTimePicker;
  21. DBGrid1: TDBGrid;
  22. Query1: TQuery;
  23. Button1: TButton;
  24. Query3: TQuery;
  25. Database2: TDatabase;
  26. COMAdminCatalog1: TCOMAdminCatalog;
  27. Query2: TQuery;
  28. Label4: TLabel;
  29. Memo1: TMemo;
  30. procedure BitBtn1Click(Sender: TObject);
  31. procedure Button1Click(Sender: TObject);
  32. private
  33. { Private declarations }
  34. public
  35. { Public declarations }
  36. end;
  37. Type
  38. TMasQuery = array [1..8] of TADOQuery;
  39. var
  40. Form1: TForm1;
  41. MasTagName: array [1..8] of string;
  42. MasTagIndex: array [1..8] of string;
  43. MasQuery: TMasQuery;
  44. i,j,jj,index: Integer;
  45. ExcelApp,sheet: Variant;
  46.  
  47. implementation
  48.  
  49. uses Unit2, Unit3, ComObj;
  50.  
  51. {$R *.dfm}
  52.  
  53.  
  54. procedure TForm1.BitBtn1Click(Sender: TObject);
  55. var k:integer;
  56. var First,Last,Step: string;
  57. begin
  58. Query3.Active:=False;
  59. //Query3.Close;
  60. //Query3.SQL.Clear;
  61. begin
  62. Query3.Params.ParamByName('FirstDate').Value:=FormatDateTime('mm.dd.yyyy', form1.DateTimePicker1.date)+' '+TimeToStr(form1.DateTimePicker3.Time);
  63. Query3.Params.ParamByName('LastDate').Value:=FormatDateTime('mm.dd.yyyy', form1.DateTimePicker2.date)+' '+TimeToStr(form1.DateTimePicker4.Time);
  64. Query3.Params.ParamByName('FirstDate1').Value:=FormatDateTime('mm.dd.yyyy', form1.DateTimePicker1.date)+' '+TimeToStr(form1.DateTimePicker3.Time);
  65. Query3.Params.ParamByName('LastDate1').Value:=FormatDateTime('mm.dd.yyyy', form1.DateTimePicker2.date)+' '+TimeToStr(form1.DateTimePicker4.Time);
  66. Query3.Params.ParamByName('FirstDate2').Value:=FormatDateTime('mm.dd.yyyy', form1.DateTimePicker1.date)+' '+TimeToStr(form1.DateTimePicker3.Time);
  67. Query3.Params.ParamByName('LastDate2').Value:=FormatDateTime('mm.dd.yyyy', form1.DateTimePicker2.date)+' '+TimeToStr(form1.DateTimePicker4.Time);
  68. Query3.Active:=True;
  69. memo1.Lines:=Query3.SQL;
  70. end;
  71.  
  72.  
  73. COMAdminCatalog1.Connect;
  74. ExcelApp := CreateOleObject('Excel.Application');
  75. ExcelApp.Visible := False;
  76. ExcelApp.WorkBooks.Add(-4167);
  77. ExcelApp.WorkBooks[1].WorkSheets[1].name :='Export';
  78. Sheet:=ExcelApp.WorkBooks[1].WorkSheets['Export'];
  79. index:=2;
  80. j:=0;
  81.  
  82. //Ýêñïîðò øàïêè
  83. for jj:=1 to DBGrid1.FieldCount do
  84. if DBGrid1.Columns.Items[jj-1].Visible=true then
  85. begin
  86. j:=j+1;
  87. sheet.cells[1,j]:=DBGrid1.Columns.Items[jj-1].Title.caption;
  88. end;
  89. //Ýêñïîðò äàííûõ
  90. DBGrid1.DataSource.DataSet.First;
  91. for i:=1 to DBGrid1.DataSource.DataSet.RecordCount do
  92. begin
  93. j:=0;
  94. for jj:=1 to DBGrid1.FieldCount do
  95. if DBGrid1.Columns.Items[jj-1].Visible=true then
  96. begin
  97. j:=j+1;
  98. sheet.cells[index,j]:=DBGrid1.fields[jj-1].asstring;
  99. end;
  100.  
  101. inc(index);
  102. DBGrid1.DataSource.DataSet.Next;
  103. end;
  104. //Ïîêàç ïðèëîæåíèÿ Excel
  105. ExcelApp.Visible := true;
  106.  
  107.  
  108. end;
  109.  
  110.  
  111. procedure TForm1.Button1Click(Sender: TObject);
  112. begin
  113. Close();
  114. end;
  115.  
  116.  
  117.  
  118.  
  119.  
  120. SELECT table1.Qkline, table2.Qkek, table3.Proiz
  121. FROM (SELECT Round (AVG(Value),2) AS Qkline
  122. FROM GrafP8
  123. WHERE (TagIndex = 5) AND (DateAndTime > :FirstDate) AND (DateAndTime < :LastDate)) AS table1 CROSS JOIN
  124. (SELECT Round(avg(Value),2) AS Qkek
  125. FROM GrafP8 AS GrafP8_1
  126. WHERE (TagIndex = 6) AND (DateAndTime > :FirstDate1) AND (DateAndTime < :LastDate1)) AS table2 CROSS JOIN
  127.  
  128. (SELECT Round(SUM(Value)/12,2) AS Proiz
  129. FROM GrafP8 AS GrafP8_2
  130. WHERE (TagIndex = 9) AND (DateAndTime > :FirstDate2) AND (DateAndTime < :LastDate2)) AS table3
  131.  


zexxer Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: zexxer (статус: Посетитель)
Вопрос отправлен: 25 мая 2010, 10:46
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 15; последнее сообщение — 25 мая 2010, 17:30; участников в обсуждении: 2.
min@y™

min@y™ (статус: Доктор наук), 25 мая 2010, 10:52 [#1]:

А в чём проблема? Проверить по таймеру, прошло ли 12 часов?
Посмотри модуль DateUtils.pas, там всё есть.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zexxer

zexxer (статус: Посетитель), 25 мая 2010, 10:59 [#2]:

а можно поподробнее?
min@y™

min@y™ (статус: Доктор наук), 25 мая 2010, 11:10 [#3]:

Цитата (zexxer):

а можно поподробнее?

Ты сначала объясни, в чём проблема.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zexxer

zexxer (статус: Посетитель), 25 мая 2010, 12:28 [#4]:

проблема в организации цикла...мне нужен результат в виде таблицы. то есть строки будут номера смен а столбцы значени производительности и другие параметры. у меня не получается осуществить такой цикл чтобы сначала шел список значений первой смены следующая строка-второй.следующая третьей :-( как это сделать?
min@y™

min@y™ (статус: Доктор наук), 25 мая 2010, 14:06 [#5]:

У тебя есть исходные данные - начальная дата/время (НДВ) и конечная дата/время (КДВ). Заведи переменную типа TDateTime и присвой ей НДВ. Это будет 1-я смена. 2-я смена - НДВ + 0.5, 3-я смена - НДВ + 1.0, N-я смена - НДВ + 0.5 * (N - 1) и т.д., пока переменная не станет >= КДВ.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zexxer

zexxer (статус: Посетитель), 25 мая 2010, 15:25 [#6]:

у меня получилось вот так,но что-то программа отказывается работать

procedure TForm1.BitBtn1Click(Sender: TObject);
var First,Last:TdateTime;
k:integer;
Last:=StrToTime('LastDate');
First:=StrToTime('FirstDate');
k:=0;
while k:=First>=Last do
begin
k:=First+0,5*(k-1)
min@y™

min@y™ (статус: Доктор наук), 25 мая 2010, 15:38 [#7]:

Сам-то понял, что написал?
Кошмар какой! Ошибки почти в каждой строке...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zexxer

zexxer (статус: Посетитель), 25 мая 2010, 15:52 [#8]:

:-(
min@y™

min@y™ (статус: Доктор наук), 25 мая 2010, 15:53 [#9]:

Цитата (zexxer):

:-(

Значение смайлика понимаю. Но какое это имеет отношение к делу?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zexxer

zexxer (статус: Посетитель), 25 мая 2010, 15:57 [#10]:

да уже просто запарился с этим циклом...что-то не пойму никак
min@y™

min@y™ (статус: Доктор наук), 25 мая 2010, 16:12 [#11]:

Вот тебе схематический код, однако, судя по твоем знаниям в программировании на паскале, он тебе врядли поможет.

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  Current, Last: TDateTime;
  k: integer;
begin
  Last:= <Конечное время/дата>;
  Current:= <Начальное время/дата>;
  k:= 1; // если нужен номер смены
 
  while Current < Last do
    begin
      // <--- Здесь запись в таблицу времени/даты k-й смены, которая равна Current
      // Затем всё остальное:
      Current:= Current + 0.5;
      Inc(k); // если нужен номер смены
    end;
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zexxer

zexxer (статус: Посетитель), 25 мая 2010, 16:33 [#12]:

спасибо огромное
min@y™

min@y™ (статус: Доктор наук), 25 мая 2010, 16:52 [#13]:

Цитата (zexxer):

спасибо огромное

Блин, столько трудов, а никакой благодарности!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
zexxer

zexxer (статус: Посетитель), 25 мая 2010, 17:04 [#14]:

почему же никакой?
min@y™

min@y™ (статус: Доктор наук), 25 мая 2010, 17:30 [#15]:

Цитата (zexxer):

почему же никакой?

У нас тут благодарность измеряется в оценках, репутации и пиве.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:36
Выполнено за 0.03 сек.