Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.023 c
14-1097235368
Brenagwynn
2004-10-08 15:36
2004.10.31
A call to an OS function failed


14-1097489212
Holy
2004-10-11 14:06
2004.10.31
Белгородская сходка.


14-1097499654
Gepard
2004-10-11 17:00
2004.10.31
"Точка входа в процедуру ... не найдена в trl60.bpl"


4-1095950229
Асякин
2004-09-23 18:37
2004.10.31
Чтение в памяти


4-1096123510
XProger
2004-09-25 18:45
2004.10.31
Panel на Win API




   Наверх