На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS RSS
>  Форум на Исходниках.RU
       Базы данных
         MS SQL Server
msm.ru
! ПРАВИЛА РАЗДЕЛА
Указание базы данных обязательно! Если вопрос связан с программированием, необходимо указание способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.) и среды программирования (VC/VB/Delphi и т.п.).
При невыполнении этих требований вопросы будут удаляться модератором без предупреждения!
Модераторы: Guderian, Bas, MIF
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )   Новое голосование

> Непонятки с датой
.alex
Сообщ. #16, 02.01.05, 11:08

Master
******
Профиль · PM

Рейтинг (т): 37

Цитата (Vit @ 31.12.04, 15:25)
Примерно так: (это лучше чем использование строк)

Я так собственно и сделал, но! Проблема, как выяснилось не решилась - на домашнем компьютере работает, а на чужом нет - вылетает исключение из-за формата даты!
Lavrik
Сообщ. #17, 02.01.05, 11:44

Profi
*****
Профиль · PM

Рейтинг (т): 22

Цитата (.alex,2.01.05, 18:08 @ 07.01.70, 12:22)
на домашнем компьютере работает, а на чужом нет - вылетает исключение из-за формата даты!


глянуть можешь на удаленном компе Язык и региональные стандарты -> Формат даты и сравнить у себя?
___________
концептуальная парадигма коммуникативного модуса в свете парцептуальных субквазитенденций в период имунно-иогенных простраций свидетельствует о недостаточности у индивида метакриптических биоциклоид
.alex
Сообщ. #18, 02.01.05, 12:04

Master
******
Профиль · PM

Рейтинг (т): 37

Цитата (Lavrik,2.01.05, 14:44 @ 07.01.70, 12:23)
глянуть можешь на удаленном компе Язык и региональные стандарты -> Формат даты и сравнить у себя?

Дело в том, что у меня есть доступ только к sql server'y, а про формат даты смогу узнать только числа 10ого :( Неужели нет какого-нибудь универсального способа?
Wizard Bas
Сообщ. #19, 02.01.05, 12:55

Moderator
*********
Профиль · PM

Поощрения: 9 Dgm
Рейтинг (т): 329

Можно установить у себя в проге нужный формат.
DateSeparator='.';
ShortDateFormat="dd.mm.yyyy";

Добавлено 02.01.05, 12:56
Цитата (.alex,2.01.05, 14:04 @ 07.01.70, 12:23)
Неужели нет какого-нибудь универсального способа

Передавать как число.
___________
Цель - ничто , процесс - все.
.alex
Сообщ. #20, 02.01.05, 13:06

Master
******
Профиль · PM

Рейтинг (т): 37

Цитата (Bas,2.01.05, 15:55 @ 07.01.70, 12:24)
Можно установить у себя в проге нужный формат.
DateSeparator='.';
ShortDateFormat="dd.mm.yyyy";

ОК, проверю.
Цитата (Bas,2.01.05, 15:55 @ 07.01.70, 12:24)
Передавать как число.

Это как? Типа тип данных не datetime, а просто целочисленный сделать?
Wizard Bas
Сообщ. #21, 02.01.05, 13:32

Moderator
*********
Профиль · PM

Поощрения: 9 Dgm
Рейтинг (т): 329

Может использовать CONVERT , особое внимание на третий параметр. Нелпа нет так что взглянуть негде :huh:
___________
Цель - ничто , процесс - все.
Kobra
Сообщ. #22, 03.01.05, 07:13
Profi
*****
Профиль · PM

Поощрения: 2 Dgm
Рейтинг (т): 111

тут чтото другое.
когда квери получает дату как параметр, пример из моеи проги
ExpandedWrap disabled
     ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Add('SELECT Gacdena.PerID, VPerson.person, VPerson.gankofileba, Gacdena.DateOn, Gacdena.DateOff, Gacdena.Mizezi, ');
      ADOQuery1.SQL.Add('Gacdena.BNumber, Gacdena.BSeries, Gacdena.BDateOn, Gacdena.BDateOff, Gacdena.Biuletini, Gacdena.Doctor, ');
      ADOQuery1.SQL.Add('Gacdena.Clinic, DATEDIFF(DD, Gacdena.DateOn, Gacdena.DateOff) + 1 AS Interval, Metka.PerID AS PerID1');
      ADOQuery1.SQL.Add('FROM Gacdena INNER JOIN VPerson ON Gacdena.PerID = VPerson.perID LEFT OUTER JOIN Metka ON Gacdena.PerID = Metka.PerID');
      ADOQuery1.SQL.Add('WHERE Gacdena.DateOff IS NOT NULL AND Gacdena.DateOn <= :DTP2 AND Gacdena.DateOff >= :DTP1');
      ADOQuery1.SQL.Add('ORDER BY Metka.PerID DESC, VPerson.person, Gacdena.DateOn');
      ADOQuery1.Parameters.ParamByName('DTP1').Value := DTP1.Date;
      ADOQuery1.Parameters.ParamByName('DTP2').Value := DTP2.Date;
      ADOQuery1.Open
и когда он связан с SQL Server-ом запрос передает так, я скопировал запрос из профаилера
ExpandedWrap disabled
    sp_executesql N'SELECT Gacdena.PerID, VPerson.person, VPerson.gankofileba, Gacdena.DateOn, Gacdena.DateOff, Gacdena.Mizezi,
    Gacdena.BNumber, Gacdena.BSeries, Gacdena.BDateOn, Gacdena.BDateOff, Gacdena.Biuletini, Gacdena.Doctor,
    Gacdena.Clinic, DATEDIFF(DD, Gacdena.DateOn, Gacdena.DateOff) + 1 AS Interval, Metka.PerID AS PerID1
    FROM Gacdena INNER JOIN VPerson ON Gacdena.PerID = VPerson.perID LEFT OUTER JOIN Metka ON Gacdena.PerID = Metka.PerID
    WHERE Gacdena.DateOff IS NOT NULL AND Gacdena.DateOn <= @P1 AND Gacdena.DateOff >= @P2
    ORDER BY Metka.PerID DESC, VPerson.person, Gacdena.DateOn
    ', N'@P1 datetime,@P2 datetime', '20050103 00:00:00:000', '20050101 00:00:00:000'
когда квери получает дату как параметр, если конечно получает коректно, то далше уже система гарантирует правилные переобразования.
исходя из етого, если в программе нписано
ExpandedWrap disabled
    pszSQLQuery.Parameters.ParamByName('D1').Value := dtpBegin.DateTime
проблем не далжно быть, так как dtpBegin.DateTime тоже автоматически генерирует система.
у меня смутные подозрения на счет того, что гдето тип данных не DateTime а чтото другое, и соответственно в том месте не правилно производится конвертация.
.alex устонави на тои, чужои машине делфи, и в пошаговом режиме погляди все переобразования.
___________
Я знаю только то, что ничего не знаю
.alex
Сообщ. #23, 03.01.05, 14:57

Master
******
Профиль · PM

Рейтинг (т): 37

Цитата (Kobra,3.01.05, 10:13 @ 07.01.70, 12:32)
.alex устонави на тои, чужои машине делфи, и в пошаговом режиме погляди все переобразования.

Незя...
Цитата (Kobra,3.01.05, 10:13 @ 07.01.70, 12:32)
проблем не далжно быть, так как dtpBegin.DateTime тоже автоматически генерирует система.
у меня смутные подозрения на счет того, что гдето тип данных не DateTime а чтото другое, и соответственно в том месте не правилно производится конвертация.

Может проблема, в том что я использую свойство DateTime, а не Date у TDateTimePicker'a? Просто когда я переносил базу, я сначала экспортировал её в access'вскую, а потом обратно импортировал в ms sql, может в процессе экспорта/импорта поменялся тип данных поля DateM? У меня сейчас нет возможности проверить, но ваще такое возможно?
Kobra
Сообщ. #24, 04.01.05, 06:47
Profi
*****
Профиль · PM

Поощрения: 2 Dgm
Рейтинг (т): 111

Цитата (.alex,3.01.05, 17:57 @ 07.01.70, 12:39)
Может проблема, в том что я использую свойство DateTime, а не Date у TDateTimePicker'a?

если в своистве Time TDateTimePicker-а стоит "0" то резултат только дата, а если чтото другое - то дата время, так что ета без разницы. протестируи, сам увидиш.

Цитата (.alex,3.01.05, 17:57 @ 07.01.70, 12:39)
У меня сейчас нет возможности проверить, но ваще такое возможно?
с аксесом не знаком, но что значит не могу проверить? кто мешает на своем компе протестировать аналогичную ситуацию?

и вообше, почему
Цитата (.alex,3.01.05, 17:57 @ 07.01.70, 12:39)
Незя...
на том компе установить своии штуки для тестировки? извени, у меня такого ограничения не бывало и не понемаю смысл.
___________
Я знаю только то, что ничего не знаю
.alex
Сообщ. #25, 05.01.05, 10:56

Master
******
Профиль · PM

Рейтинг (т): 37

Цитата (Kobra,4.01.05, 09:47 @ 07.01.70, 12:47)
кто мешает на своем компе протестировать аналогичную ситуацию?

Проверю, просто тогда не мог.
Цитата (Kobra,4.01.05, 09:47 @ 07.01.70, 12:47)
и вообше, почему Цитата (.alex @ 3.01.05 17:57)
на том компе установить своии штуки для тестировки? извени, у меня такого ограничения не бывало и не понемаю смысл.

Я устанавливал свои штуки не на том компе, на котором стоит сервер, а на другом, который находиться с ним в сети, а делфи я на сервере поставить не могу!
Цитата (Kobra,3.01.05, 10:13 @ 07.01.70, 12:32)
и когда он связан с SQL Server-ом запрос передает так, я скопировал запрос из профаилера

Где находится этот профайлер?
Kobra
Сообщ. #26, 05.01.05, 13:26
Profi
*****
Профиль · PM

Поощрения: 2 Dgm
Рейтинг (т): 111

профаилер можно вызвать из ентерпраиз менеджера. ето одна из сервисних програм SQL Server-а. чтото на подобии борландовского SQL Monitor-а.
___________
Я знаю только то, что ничего не знаю
.alex
Сообщ. #27, 05.01.05, 14:01

Master
******
Профиль · PM

Рейтинг (т): 37

Короче профайлер после моего запроса: (где pszCells - это строка вида: CELLId = 1 OR CELLId = 2 OR CELLId = 3, dtpBegin и dtpEnd - это объекты класса TDateTimePicker, а lbCounters - это объект класса TListBox)
ExpandedWrap disabled
    SQL.Add('SELECT val, DateM FROM INTCELL WITH (NOLOCK)');
    SQL.Add('WHERE (DateM >= :D1 AND DateM <= :D2) AND (' + pszCells + ')');
    SQL.Add('AND (CounterId = :P1) ORDER BY DateM ASC');
    Parameters.ParamByName('D1').Value := dtpBegin.DateTime;
    Parameters.ParamByName('D2').Value := dtpEnd.DateTime;
    Parameters.ParamByName('P1').Value := lbCounters.ItemIndex + 1;

показывает следующий запрос:
ExpandedWrap disabled
    exec sp_executesql N'SELECT val, DateM FROM INTCELL WITH (NOLOCK)
    WHERE (DateM >= @P1 AND DateM <= @P2) AND (CELLId = 1 OR CELLId = 2 OR CELLId = 3)
    AND (CounterId = @P3) ORDER BY DateM ASC
    ', N'@P1 datetime,@P2 datetime,@P3 int', 'Dec 17 2004 10:27PM', 'Dec 24 2004 10:27PM', 1

Что-то я не понимаю почему он так извращает дату.
И ещё, почему-то перестало работать условие:
ExpandedWrap disabled
    (DateM >= :D1 AND DateM <= :D2)

Все данные у меня записаны на 18 число декабря 2004г, раньше выборка работала правильно, а теперь только если я ставлю начало интервала, т.е. dtpBegin, на 17 число. :wacko:

Добавлено 05.01.05, 14:04
И исчё! Зачем нужно:
ExpandedWrap disabled
    pszSQLQuery.Parameters.ParseSQL(XXX, true);
Kobra
Сообщ. #28, 05.01.05, 15:06
Profi
*****
Профиль · PM

Поощрения: 2 Dgm
Рейтинг (т): 111

на месте
ExpandedWrap disabled
    dtpBegin.DateTime
напиши
ExpandedWrap disabled
    dtpBegin.Date
и
Цитата (Kobra,4.01.05, 09:47 @ 07.01.70, 12:47)
если в своистве Time TDateTimePicker-а стоит "0" то резултат только дата
а ты передаеш и дату и время, соответственно
'Dec 18 2004 10:27PM' в лубом случае болше 'Dec 18 2004' и выборки нет.

'Dec 17 2004 10:27PM' в лубом случае менше 'Dec 18 2004' и выборки нормалная.

ExpandedWrap disabled
    pszSQLQuery.Parameters.ParseSQL(XXX, true);
ето харошыи тон, лично я почти никогда не пишу так как ета орерация всеравно выполняется.


Цитата (.alex,5.01.05, 17:01 @ 07.01.70, 13:12)
Что-то я не понимаю почему он так извращает дату.
он приводит дату в тот вид, какои нравится на SQL Server-у.
как время убереш, наверняка заработает. вроде запрос правилно передается.
___________
Я знаю только то, что ничего не знаю
.alex
Сообщ. #29, 05.01.05, 15:19

Master
******
Профиль · PM

Рейтинг (т): 37

Цитата (Kobra,5.01.05, 18:06 @ 07.01.70, 13:13)
а ты передаеш и дату и время, соответственно
'Dec 18 2004 10:27PM' в лубом случае болше 'Dec 18 2004' и выборки нет.
'Dec 17 2004 10:27PM' в лубом случае менше 'Dec 18 2004' и выборки нормалная.

Понял.
Цитата (Kobra,5.01.05, 18:06 @ 07.01.70, 13:13)
если в своистве Time TDateTimePicker-а стоит "0" то резултат только дата

Изменил DateTime на Date и поставил в свойстве Time у обоих TDateTimePicker - 0:00:00. Все равно передаётся вместе с датой и время:
ExpandedWrap disabled
    exec sp_executesql N'SELECT val, DateM FROM INTCELL WITH (NOLOCK)
    WHERE (DateM >= @P1 AND DateM <= @P2) AND (CELLId = 1)
    AND (CounterId = @P3) ORDER BY DateM ASC
    ', N'@P1 datetime,@P2 datetime,@P3 int', 'Dec 18 2004 12:00AM', 'Dec 24 2004 12:00AM', 1

Цитата (Kobra,5.01.05, 18:06 @ 07.01.70, 13:13)
ето харошыи тон, лично я почти никогда не пишу так как ета орерация всеравно выполняется.

Я тоже сначала так подумал, но после того как посмотрел в профайлер, решил спросить, ибо когда я ставлю эту строчку:
ExpandedWrap disabled
    SQL.Add('SELECT val, DateM FROM INTCELL WITH (NOLOCK)');
    SQL.Add('WHERE (DateM >= :D1 AND DateM <= :D2) AND (' + pszCells + ')');
    SQL.Add('AND (CounterId = :P1) ORDER BY DateM ASC');
    Parameters.ParseSQL(SQL.Text, TRUE);
    Parameters.ParamByName('D1').Value := dtpBegin.Date;
    Parameters.ParamByName('D2').Value := dtpEnd.Date;
    Parameters.ParamByName('P1').Value := Integer(lbCounters.Items.Objects[lbCounters.ItemIndex]);

дата приводиться к float :wacko:
ExpandedWrap disabled
    exec sp_executesql N'SELECT val, DateM FROM INTCELL WITH (NOLOCK)
    WHERE (DateM >= @P1 AND DateM <= @P2) AND (CELLId = 1)
    AND (CounterId = @P3) ORDER BY DateM ASC
    ', N'@P1 float,@P2 float,@P3 int', 3.833900000000000e+004, 3.834500000000000e+004, 1

Это нормально? :wall:

Сообщение отредактировано: .alex - 05.01.05, 16:23
Kobra
Сообщ. #30, 06.01.05, 07:00
Profi
*****
Профиль · PM

Поощрения: 2 Dgm
Рейтинг (т): 111

'Dec 18 2004 12:00AM' ето настроики такие и потому, если перефразировать получится "18,12,2004 00:00:00" так что ето не страшно.

Цитата (.alex,5.01.05, 18:19 @ 07.01.70, 13:13)
дата приводиться к float
веть дата-время хранится как число, так что система сама определяет в каком виде для него будет удобнее получить данные. ето нормално.

протести такои вариант
ExpandedWrap disabled
    Parameters.ParamByName('D1').Value := StrToDate(datetostr(dtpBegin.Date));
не зависимо от устоновок DateTimePicker-а отсекает время.

Сообщение отредактировано: Kobra - 06.01.05, 07:02
___________
Я знаю только то, что ничего не знаю
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:

> Форум на Исходниках.RU · MS SQL Server

Страницы: (3) 1 [2] 3  все Новое голосование


[ Script Execution time: 0,1811 ]   [ 15 queries used ]   [ Generated: 17.04.14, 07:08 GMT ]  

Rambler's Top100