Форум: "Начинающим";
Текущий архив: 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.046 c