Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 21.01.2009, 15:49
Serval Serval вне форума
Прохожий
 
Регистрация: 20.01.2009
Сообщения: 18
Репутация: 30
По умолчанию SQL запрос - проблема с датой

В QueryAnalyser запрос выглядит так

Код:
SELECT     AVG(Val)
FROM         Temp
WHERE     (Id = 18) AND (DT BETWEEN '11.03.2008 0:00:00' AND '11.03.2008 00:59:59')

мне нужно его выполнить в дельфи так чтобы вместо '11.03.2008 0:00:00'
вставить переменные - как не пробовал все ругаеться на дату и время.
Ответить с цитированием
  #2  
Старый 21.01.2009, 18:17
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
SELECT     AVG(Val)
FROM         Temp
WHERE     (Id = 18) AND (DT BETWEEN :D1 AND :D2)

Так не пробовал? А из кода обращаться к параметрам D1 и D2 через AsDateTime
Ответить с цитированием
  #3  
Старый 22.01.2009, 19:33
Serval Serval вне форума
Прохожий
 
Регистрация: 20.01.2009
Сообщения: 18
Репутация: 30
По умолчанию

Код:
procedure TForm3.BitBtn2Click(Sender: TObject);
var   I : Integer;
  D : TDateTime;
  dd: TDateTime;
  dat : Integer;
  SL1: TStringList;
begin
edit1.Text:=datetostr(datetimepicker1.Date);//
edit2.Text:=datetostr(datetimepicker2.Date);//это для проверки пока код неотлажен
if datetimepicker1.Date>datetimepicker2.Date then showmessage ('Конечная дата неможет быть больше начальной');
dd:= trunc(DateTimePicker2.Date-DateTimePicker1.Date);
D := DateTimePicker1.DateTime;
StringGrid1.RowCount:=trunc(dd+1);
  For I := 1 To trunc(dd+1) Do
    Begin
        for dat:= 0 to 23 do
        begin
          try
            while form3.query1.Active do
              Application.ProcessMessages;
            with form3.query1 do
            try
              Close;
              Query1.ParamByName('D1').AsDateTime:=D;
              Query1.ParamByName('D2').AsDateTime:=D+(1/24);
              Open;
              StringGrid1.RowCount:=dat+1;
              StringGrid1.ColCount:=i;
              StringGrid1.Cells[i-1,dat]:=FieldByName('val').AsString;
             while not Eof do
              begin
                 SL1:= TStringList.Create;
                 SL1.Add(FieldByName('val').AsString);
                 memo1.Lines.Add(FieldByName('val').AsString); //для проверки что оно вообще выдаст
                 Next;
              end;
            except

            end;
            finally
              form3.query1.Close;
            end;
         end;
      D := D + 1;
      showmessage('');
    End;
end;

оно мне выдает пустые значения - запрос сделал как посоветовали - немогу понять что нетак опять делаю
обращаться и как AsString и как AsDateTime пробовал
Ответить с цитированием
  #4  
Старый 22.01.2009, 19:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Перепиши все-таки запрос на больше-меньше.

Код:
SELECT     AVG(Val)
FROM         Temp
WHERE     (Id = 18) AND ((DT >= :D1 AND DT <= :D2))

Да, в зависимости от БД может потребоваться вставить конвертацию.
Ответить с цитированием
  #5  
Старый 22.01.2009, 19:35
Serval Serval вне форума
Прохожий
 
Регистрация: 20.01.2009
Сообщения: 18
Репутация: 30
По умолчанию

спасибо, попробую
использую MS SQL server 2000
запросы BDE
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:55.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025