Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2011, 10:25   #1
ГОСЕАН
Форумчанин
 
Аватар для ГОСЕАН
 
Регистрация: 03.05.2007
Сообщений: 247
По умолчанию вместе параметры не работают

Код:
SELECT nvd, DataDok, NDok, N_dok, FIO, sod, Expr1, datadisp, mes, den, JurnDok, DATEDIFF(DAY, GETDATE(), datadisp) as asd
FROM dbo.ispoln Dbo_ispoln
Where  (DataDok=:iDataDok) and (nvd= :invd)
вместе параметры не работают, а отдельно DataDok=:iDataDok или nvd= :invd работает...что не хватает?

Последний раз редактировалось Serge_Bliznykov; 08.11.2011 в 10:35.
ГОСЕАН вне форума Ответить с цитированием
Старый 08.11.2011, 10:37   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

что значит - "не работают"?!
Запрос возвращает НОЛЬ записей?!
Ну значит, в таблице нет записей, где одновременно дата документа равна :iDataDok и номер вида документа nvd был равен :invd
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.11.2011, 10:57   #3
ГОСЕАН
Форумчанин
 
Аватар для ГОСЕАН
 
Регистрация: 03.05.2007
Сообщений: 247
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
что значит - "не работают"?!
Запрос возвращает НОЛЬ записей?!
Ну значит, в таблице нет записей, где одновременно дата документа равна :iDataDok и номер вида документа nvd был равен :invd
есть записи
Изображения
Тип файла: jpg 11.JPG (12.7 Кб, 16 просмотров)
ГОСЕАН вне форума Ответить с цитированием
Старый 08.11.2011, 11:06   #4
ГОСЕАН
Форумчанин
 
Аватар для ГОСЕАН
 
Регистрация: 03.05.2007
Сообщений: 247
По умолчанию

Код:
procedure TForm1.DBLookupComboBox2Click(Sender: TObject);
begin
  Query3.Close;
  Query3.Prepare;
  Query3.ParamByName('iDataDok').AsDate:=DateTimePicker1.Date;
  Query3.ParamByName('invd').AsString:=DBEdit4.Field.AsString;
  Query3.Open;
end;
это обработчик
ГОСЕАН вне форума Ответить с цитированием
Старый 08.11.2011, 11:12   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

истинно говорю Вам, или Вы значение параметров другое даёте, или нет документов, где оба параметра сопдают!

теперь приведите, пример двух результатов, где
Цитата:
отдельно DataDok=:iDataDok или nvd= :invd работает

А ещё ОЧЕНЬ большая странность..
Вы же в датапикере выбираете ДАТУ?!
Цитата:
Код:
Query3.ParamByName('iDataDok').AsDate:=DateTimePicker1.Date;
а БД у Вас хранится ДАТА + ВРЕМЯ.
Каким образом происходит отбор?!!

Последний раз редактировалось Serge_Bliznykov; 08.11.2011 в 11:14.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.11.2011, 11:58   #6
ГОСЕАН
Форумчанин
 
Аватар для ГОСЕАН
 
Регистрация: 03.05.2007
Сообщений: 247
По умолчанию

вы правы
Код:
Query3.ParamByName('iDataDok').AsDateTime:=DateTimePicker1.DateTime;
не срабатывает
и в чем ошибка?
ГОСЕАН вне форума Ответить с цитированием
Старый 08.11.2011, 12:00   #7
ГОСЕАН
Форумчанин
 
Аватар для ГОСЕАН
 
Регистрация: 03.05.2007
Сообщений: 247
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
истинно говорю Вам, или Вы значение параметров другое даёте, или нет документов, где оба параметра сопдают!

теперь приведите, пример двух результатов, где



А ещё ОЧЕНЬ большая странность..
Вы же в датапикере выбираете ДАТУ?!

а БД у Вас хранится ДАТА + ВРЕМЯ.
Каким образом происходит отбор?!!
ДАТА + ВРЕМЯ.
ГОСЕАН вне форума Ответить с цитированием
Старый 09.11.2011, 03:35   #8
ГОСЕАН
Форумчанин
 
Аватар для ГОСЕАН
 
Регистрация: 03.05.2007
Сообщений: 247
По умолчанию

как тогда правильней сделать, чтобы была фильтрация по дате?
ГОСЕАН вне форума Ответить с цитированием
Старый 09.11.2011, 08:29   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
как тогда правильней сделать, чтобы была фильтрация по дате?
ну, банально - нужно привести дату к такой форме, чтобы в ней осталась только (исключительно) дата. (причём как в запросе, так и на клиенте!

к сожалению, функции работы с датой не входят в стандарт SQL, поэтому в разных СУБД это можно сделать по разному.

Судя по префиксу dbo. у Вас MS SQL ?
Тогда попробуйте такой запрос:
Код:
SELECT nvd, DataDok, NDok, N_dok, FIO, sod, Expr1, datadisp, mes, den, JurnDok, DATEDIFF(DAY, GETDATE(), datadisp) as asd
FROM dbo.ispoln Dbo_ispoln
Where  convert(datetime, Str(DatePart(Day, DataDok)) + '.' + 
       Str(DatePart(Month, DataDok)) + '.' + Str(DatePart(Year, DataDok)), 104) = :iDataDok .......
ну и при заполнении параметра лучше обрезать дату:
Код:
Query3.ParamByName('iDataDok').AsDateTime:= trunc(DateTimePicker1.DateTime);
впрочем, можно попробовать и начальный вариант:
Код:
Query3.ParamByName('iDataDok').AsDate:=DateTimePicker1.Date;
ведь, судя по всему, тут параметер тоже фигурирует исключительно как дата (без времени).


p.s. если есть возможность и желание, то удобно создать хранимую функцию на сервере, которая обрезает время у даты.
вот таким скриптом:
Код:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[TruncTime]
(@pdate datetime)
RETURNS datetime
AS
BEGIN
  return convert(datetime, Str(DatePart(Day, @pdate)) + '.' + Str(DatePart(Month, @pdate)) + '.' + Str(DatePart(Year, @pdate)), 104)
END
в этом случае в запросе можно написать
Where dbo.TruncTime(DataDok) = :iDataDok


успехов.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.11.2011, 11:26   #10
ГОСЕАН
Форумчанин
 
Аватар для ГОСЕАН
 
Регистрация: 03.05.2007
Сообщений: 247
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну, банально - нужно привести дату к такой форме, чтобы в ней осталась только (исключительно) дата. (причём как в запросе, так и на клиенте!

к сожалению, функции работы с датой не входят в стандарт SQL, поэтому в разных СУБД это можно сделать по разному.

Судя по префиксу dbo. у Вас MS SQL ?
Тогда попробуйте такой запрос:
Код:
SELECT nvd, DataDok, NDok, N_dok, FIO, sod, Expr1, datadisp, mes, den, JurnDok, DATEDIFF(DAY, GETDATE(), datadisp) as asd
FROM dbo.ispoln Dbo_ispoln
Where  convert(datetime, Str(DatePart(Day, DataDok)) + '.' + 
       Str(DatePart(Month, DataDok)) + '.' + Str(DatePart(Year, DataDok)), 104) = :iDataDok .......
ну и при заполнении параметра лучше обрезать дату:
Код:
Query3.ParamByName('iDataDok').AsDateTime:= trunc(DateTimePicker1.DateTime);
впрочем, можно попробовать и начальный вариант:
Код:
Query3.ParamByName('iDataDok').AsDate:=DateTimePicker1.Date;
ведь, судя по всему, тут параметер тоже фигурирует исключительно как дата (без времени).


p.s. если есть возможность и желание, то удобно создать хранимую функцию на сервере, которая обрезает время у даты.
вот таким скриптом:
Код:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[TruncTime]
(@pdate datetime)
RETURNS datetime
AS
BEGIN
  return convert(datetime, Str(DatePart(Day, @pdate)) + '.' + Str(DatePart(Month, @pdate)) + '.' + Str(DatePart(Year, @pdate)), 104)
END
в этом случае в запросе можно написать
Where dbo.TruncTime(DataDok) = :iDataDok


успехов.
Спасибо огромное...помогло!
ГОСЕАН вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параметры запуcка. как обрабатывать параметры вида -somecmd "?" Человек_Борща Общие вопросы Delphi 1 15.01.2011 15:48
ПАРАМЕТРЫ-КОНСТАНТЫ, НЕТИПИЗИРОВАННЫЕ ПАРАМЕТРЫ ПОДПРОГРАММ, МАССИВЫ И СТРОКИ ОТКРЫТОГО ТИПА Kira09 Паскаль, Turbo Pascal, PascalABC.NET 0 19.12.2010 17:28
Не работают вместе.. Лия92 Помощь студентам 0 13.12.2010 20:23
Как передать в поток параметры? И как из потока параметры достать? Anekdot Общие вопросы Delphi 2 19.02.2010 22:40
Загрузить библиотеку вместе сразу вместе с программой Anekdot Общие вопросы Delphi 4 26.01.2010 23:14