Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.31;
Скачать: CL | DM;

Вниз

string conversion error   Найти похожие ветки 

 
Maxim_____   (2004-09-29 11:01) [0]

пишу:
select * from zakazes where (DATASDACHI >= "01.10.2004") and (DATASDACHI <= "31.10.2004")

-всё ок

пишу:
select * from zakazes where (DATASDACHI >= "01.09.2004") and (DATASDACHI <= "31.09.2004")

получаю string conversion error

(и в дельфи м в ibexpert - один результат)


 
Наталия ©   (2004-09-29 11:02) [1]

Потому что нет такого числа 31.09.2004


 
Romkin ©   (2004-09-29 11:03) [2]

И что? Посылают тебя. Ты бы еще 31 февраля заказал...


 
Maxim_____   (2004-09-29 11:33) [3]

ок, т.е для каждого месяца мне надо писать отдельную процедуру?
какое ему дело сколько где дней?

как ещё можно получить все дни месяца?


 
Romkin ©   (2004-09-29 11:35) [4]

А ты параметры используй. params видел?


 
Romkin ©   (2004-09-29 11:36) [5]

А последний день месяца получить легко: взять первый день следующего и вычесть один день. Всегда и везде проходит :))


 
Maxim_____   (2004-09-29 11:39) [6]

я пишу treeView:
mainDb.Open;
   dsOrders.Active := true;
   str := tstringlist.Create;
   dsOrders.First;
   str.Sorted := true;
   str.Duplicates := dupIgnore;

   while not dsOrders.Eof do begin
       DateTimeToString(s, "mm.yyyy", dsOrdersDATASDACHI.Value);
       was := str.Count;
       str.Add(s);
       if str.Count - was = 1 then begin
           currentMY := tv.Items.Add(tv.TopItem, str.strings[str.count - 1]);
           currentMY.ImageIndex := 0;
       end;
       dsOrders.Next;
   end;

   for i := 0 to tv.Items.Count do begin

       if tv.Items[i].Level = 0 then
       begin
           dsOrders.Close;

        MonthYear:=tv.Items[i].Text;
        dsOrders.SelectSQL.text :=" select * from zakazes where (DATASDACHI >= "+QuotedStr("01."+MonthYear)+") and (DATASDACHI <= "+QuotedStr("31."+"09.2004")+")";

           dsOrders.open;
           dsOrders.First;
           while not dsOrders.Eof do begin
               DateTimeToString(s, "dd", dsOrdersDATASDACHI.Value);
               tv.Items.AddChild(tv.Items[i], s);
               dsOrders.Next;
           end;
       end;
   end;

может всё это бред
и есть более простой способ,
с помощью sql сделать всё это?


 
Vlad ©   (2004-09-29 11:47) [7]


> Maxim_____   (29.09.04 11:39) [6]

Еще раз - ты про параметры в SQL запросах слышал?
ну на худой конец пиши не так:
(DATASDACHI <= "+QuotedStr("31."+"09.2004")+.....
а так:
(DATASDACHI < "+QuotedStr("01."+"10.2004")+.....

уж первое-то число у любого месяца существует


 
Maxim_____   (2004-09-29 11:48) [8]

dsOrders.SelectSQL.text :="select * from zakazes where (datasdachi >=" +QuotedStr("01."+ tv.Items[i].Text)
+") and (datasdachi <= "+quotedstr("31." + tv.Items[i].Text)+")";

тут я не неправильную версию бросил, извините,
просто заклинило что-то уже.
всю ночь сижу. и потому забыл про то что в сентябре меньше дней, решил что этоглюк FB


 
stud ©   (2004-09-29 11:49) [9]

а последнее число - daysinmonth - unit datautils
и лучше всетаки как тебе говорят использовать параметры:
DATASDACHI between :d1 and :d2


 
Maxim_____   (2004-09-29 11:51) [10]

слышал краем уха, что это пишется как-то так:  
=:
но что мне толку от них?
объясните пожалуйста.


 
Maxim_____   (2004-09-29 11:55) [11]

Спасибо всем!
Пойду искать по сети
что-нибудь про параметры,
в какие компоненты их сувать,
и т.п.


 
Romkin ©   (2004-09-29 12:50) [12]

А в каталог Demos не судьба глянуть?


 
Maxim_____   (2004-10-01 05:30) [13]

Romkin ©   (29.09.04 12:50) [12]
там очень много всего, куда именно предлагаете заглянуть?
.....
код неправильный и вообще позорный, забудьте про него


 
kaif ©   (2004-10-01 13:15) [14]

Дату следует передавать параметром, чтобы не зависеть от региональных настроек даты. Это правильный путь. Но есть и простой способ, если хочется дату указать явно в тексте запроса:
 select * from zakazes where (DATASDACHI >= "2004-09-01") and (DATASDACHI <= "2004-09-31").
 Однако сдается мне, что такой даты, как 31 сентября не бывает. Поэтому это работать не будет ни при каком подходе. Предлагаю гораздо более простое решение (если в лом разбираться с тем, какие даты бывают, а какие - нет)
 select * from zakazes where (DATASDACHI >= "2004-09-01") and (DATASDACHI < "2004-10-01")
 То есть брать в качестве правой даты не конец месяца, а начало следующего, а вместо "меньше или равно" использовать условие "меньше".



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

Текущий архив: 2004.10.31;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.055 c
1-1097589162
White__
2004-10-12 17:52
2004.10.31
Работа с Excel


9-1088607478
aprm
2004-06-30 18:57
2004.10.31
Свет в OGL API


14-1097499680
Григорьев Антон
2004-10-11 17:01
2004.10.31
Может, кто подскажет? А то наш админ не смог :(


1-1097310723
Kolan
2004-10-09 12:32
2004.10.31
Access violation и chart


14-1097636482
MBo
2004-10-13 07:01
2004.10.31
Delphi2005