Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Работа с датами в MS SQL Server   Найти похожие ветки 

 
Kostafey ©   (2006-10-25 01:48) [0]

Приветствую уважаемых мастеров ! Вот ведь проблема не весть какая а справиться не смог. Как обратиться с SQL - запросом к MS SQL Server, таблице с полем тапа smalldatetime ?

Если я пишу с временем, то пишет ошибку incorrect syntax near 10

Result:=Format("select * from ZVK1 where DATE_ZVK1 between %s and %s",
        ["30/03/2006 10:15:00","30/03/2006 10:35:00"]);


Если пишу так (без времени):

Result:=Format("select * from ZVK1 where DATE_ZVK1 between %s and %s",
        ["30/03/2006","11/04/2006"]);

То он мне выдает пустую сетку, в то время как между 30/03 и 11/04 штук 30 записей.

Ну а в таком виде все работает...

Result:=Format("select * from ZVK1",[]);


 
Kostafey ©   (2006-10-25 01:53) [1]

Если написать

Result:=Format("select * from ZVK1 where DATE_ZVK1>=%s and DATE_ZVK1<=%s",
        ["30/03/2006","11/04/2006"]);

то ничего не изменится - сетка остается пустой


 
ЮЮ ©   (2006-10-25 03:43) [2]

А без Format, можно подумать, ну никак не обойтись? Разве апорстрофы после этого остаются? А результат делени 11/04/2006 меньше единицы.

Result:= "select * from ZVK1 where DATE_ZVK1 between ""20060330"" and ""20060411"""";

А ещё лучше параметрический запрос:

Result:= "select * from ZVK1 where DATE_ZVK1 between :DateFrom and :DateTo";


 
Kostafey ©   (2006-10-28 00:38) [3]

Возвращаюсь к теме. К сожалению никак не разобрался.
От куда взялись цифры ?
""20060330"" and ""20060411""""

Я получил совсем другие :

Edit3.Text:=inttostr(ADODataSet1.FieldByName("DATE_ZVK1").AsVariant);
Edit2.Text:=floattostr(ADODataSet1.FieldByName("DATE_ZVK1").AsVariant);

Результат
38806
38806,4270833333

И цифру 38806,4270833333 в SQL запрос не вставишь - ошибка, а 38806 - корень всех зол т.к. (ИМХО) это прото-напросто округленное значение


 
DrPass ©   (2006-10-28 00:47) [4]


> Kostafey ©   (28.10.06 00:38) [3]

Наверное, все-ж таки
> Edit2.Text:=datetostr(ADODataSet1.FieldByName("DATE_ZVK1").
> AsDate);

А вообще, см.

> "select * from ZVK1 where DATE_ZVK1 between :DateFrom and
> :DateTo"

и свойство Parameters


 
Kostafey ©   (2006-10-28 01:01) [5]

> > Edit2.Text:=datetostr(ADODataSet1.FieldByName("DATE_ZVK1")
> .
> > AsDate);

Да, он просто выведет дату (напр. 30.03.2006). Задача-то обратная послать SQL - запрос с датой.
Записать в запрос непосредстванно дату у меня не получилось [0], а преобразование даты сначало в число повлекло другие проблемы.

А как пользоваться этим ?
> "select * from ZVK1 where DATE_ZVK1 between :DateFrom and
> :DateTo"


> и свойство Parameters

Свойство чего ?


 
DrPass ©   (2006-10-28 01:09) [6]


> А как пользоваться этим ?

Это - в CommandText датасета
> Свойство чего ?


А это - свойство датасета, через которое можно подставить соотв. значения в параметры DateFrom и DateTo


 
MsGuns ©   (2006-10-28 01:09) [7]

with ADODataSet do
 begin
  CommandText := "Select * From MyTable where DocDate between :d1 and :d2";
  Parameters[0].Value := StrToDateTime(Edit1.Text);
  Parameters[1].Value := StrToDateTime(Edit2.Text);
  Open;
 end;


 
Anatoly Podgoretsky ©   (2006-10-28 01:12) [8]


> Свойство чего ?

Свойство того, чего используешь.


 
Kostafey ©   (2006-10-28 01:35) [9]

ВСЕМ СПАСИБО ! ВСЕ РАБОТАЕТ !!!

with ADODataSet1 do
begin
 Parameters[0].Value := StrToDateTime("30.03.2006 14:16:00");
 Parameters[1].Value := StrToDateTime("02.04.2006 15:04:00");
 CommandText := "Select DATE_ZVK1 From ZVK1 where DATE_ZVK1 between :d0 and :d1";
 Open;
end;



> Свойство того, чего используешь.

Ну вооще-то догадался, просто на всякий пожарный переспросил.
Просто там мго всего еще есть ADOCOnnection, например... а то мало ли?


 
sniknik ©   (2006-10-28 01:58) [10]

> ВСЕМ СПАСИБО ! ВСЕ РАБОТАЕТ !!!
это чисто случайно... после того что ты с кодом данным в [7] в [9] сделал... (я бы на его месте обиделся бы... )


 
ЮЮ ©   (2006-10-28 07:49) [11]


> От куда взялись цифры ?
> ""20060330"" and ""20060411""""


""20060330"" === 2006 03 30 === 30 марта 2006
именно такой формат MS SQL понимает однозначно


 
Anatoly Podgoretsky ©   (2006-10-28 11:23) [12]

sniknik ©   (28.10.06 01:58) [10]
Да опасный код, еще по шее получит от системы.


 
Kostafey ©   (2006-10-28 18:03) [13]

> ""20060330"" === 2006 03 30 === 30 марта 2006
> именно такой формат MS SQL понимает однозначно

О! Как просто-то было! И как я не догадался.


> это чисто случайно... после того что ты с кодом данным в
> [7] в [9] сделал... (я бы на его месте обиделся бы... )


> Да опасный код, еще по шее получит от системы.

А чего в нем такого ???
В свойтвах ADODataSet1.Parameters задал 2 параметра (пустых) и все пошло.


 
MsGuns ©   (2006-10-28 18:13) [14]

>Kostafey ©   (28.10.06 18:03) [13]
>А чего в нем такого ???

Сначала поехал, а потом увидел куда..

Рекомендую почитать о свойствах и методах компонент, которыми пользуетесь (в данном случае вы игнорируете способность датасета контекстно регировать на изменение св-ва CommandText). Сейчас прошло (хотя я так и не пойму почему) - завтра вместо шоссе "выедете" в овраг.


 
sniknik ©   (2006-10-28 19:23) [15]

> Сейчас прошло (хотя я так и не пойму почему)
элементарно, там уже был запрос один в один до последнего байта равный вносимому.

procedure TCustomADODataSet.SetCommandText(const Value: WideString);
begin
 if CommandText <> Value then
 begin
   CheckInactive;
   Command.CommandText := Value;
   PropertyChanged;
 end;
end;


если же нет, то надо смотреть как параметры пере-создаются, с уничтожением коллекции старых и созданием новых или с сохранением и сменой имен (сомнительно...), может там тоже есть "щель" в вероятности получить значения заданные раньше создания обьектов их содержащих...


 
Desdechado ©   (2006-10-28 19:28) [16]

> StrToDateTime("30.03.2006 14:16:00");
Чревато спотыками на нестандартных (или нерусских) региональных настройках. Например, кому-то очень понравится / в качестве разделителя, когда в системе точка. Или наоборот. Лучше пикером пользуйся.


 
Kostafey ©   (2006-10-29 00:25) [17]


> Сначала поехал, а потом увидел куда..

Как-то не ожидал получть столько сложностей в стандартном SQL-запросе.
Вот так напишу лучше будет ?

with ADODataSet1 do
begin
 CommandText := "Select DATE_ZVK1 From ZVK1 where DATE_ZVK1 between :DateFrom and :DateTo";
 Parameters.ParamByName("DateFrom").Value:=StrToDateTime("30.03.2006 14:16:00");
 Parameters.ParamByName("DateTo").Value:=StrToDateTime("02.04.2006 15:04:00");
 Open;
end;



> Чревато спотыками на нестандартных (или нерусских) региональных
> настройках. Например, кому-то очень понравится / в качестве
> разделителя, когда в системе точка. Или наоборот. Лучше
> пикером пользуйся.


Полностью согласен. Но как правильно сделать не знаю. Не поскажите что это такое "пикер" ?


 
MsGuns ©   (2006-10-29 01:35) [18]

TDateTimePicker (Win32)


 
Anatoly Podgoretsky ©   (2006-10-29 01:49) [19]

Да хотя бы EncodeDate/EncodeTime использовать, чем такое опасное преобразование



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.045 c
2-1162130694
tmpfolder
2006-10-29 17:04
2006.11.12
Record + PString


15-1161490175
КлЯкСа
2006-10-22 08:09
2006.11.12
Подскажите About Newsgroups! Извините, что пишу сюда.


8-1144571712
Vitaly73
2006-04-09 12:35
2006.11.12
mp3+DirectShow


15-1161717019
XeRoN
2006-10-24 23:10
2006.11.12
Помогите плиз!


1-1159534521
AlexT1000
2006-09-29 16:55
2006.11.12
Можно ли показать ExcelWorkBook на моей форме.?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский