Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Фильтрация dw по полю тип DATE / 7 сообщений из 7, страница 1 из 1
16.08.2004, 15:04
    #32651086
f45f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация dw по полю тип DATE
Код: plaintext
1.
2.
3.
date d 
d=dw_1.GetItemDate( 1 ,"datenach")
dw_1.SetFilter("trndoc_date="+string(d))
dw_1.Filter( )
После SetFilter выдает ошибку
"Types of expression must mutch"

C полями другого типа работает нормально.
...
Рейтинг: 0 / 0
16.08.2004, 15:10
    #32651100
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация dw по полю тип DATE
f45fdate d
d=dw_1.GetItemDate(1,"datenach")
dw_1.SetFilter("trndoc_date="+string(d))
dw_1.Filter( )
После SetFilter выдает ошибку
"Types of expression must mutch"
C полями другого типа работает нормально.
Ошибочная строка выделена красным.
Правильно будет так:
dw_1.SetFilter("trndoc_date=' " + string(d) + " ' ")
Иначе (в Вашем варианте) string(d) воспринимается не как строка.
---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
16.08.2004, 15:14
    #32651104
Winnie-the-Pooh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация dw по полю тип DATE
Можно, например, сделать так:
Код: plaintext
1.
2.
3.
4.
date ld_2filter
string ls_2filter,ls_filter
ls_2filter = string(d)
ls_sfilter = "date_criteria = date('"+ls_2filter+"')"
dw.setfilter(ls_sfilter)
Приведенного вами сообщения вы точно не получите... ;-))
...
Рейтинг: 0 / 0
16.08.2004, 15:59
    #32651243
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация dw по полю тип DATE
2 Winnie-the-Pooh:
Да, это Вы верно подметили! :) А я и не обратил внимания, что там идет обработка даты - ошибка со строкой сразу в газа бросилась. Для даты Ваш пример - как раз то, что доктор прописал...
---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
16.08.2004, 16:49
    #32651416
f45f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация dw по полю тип DATE
Да, спасибо, я разобрался. Хотя не понимаю, почему тогда для поля тип integer, такого синтаксиса не требуется.
...
Рейтинг: 0 / 0
16.08.2004, 17:39
    #32651540
Ikar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация dw по полю тип DATE
f45fДа, спасибо, я разобрался. Хотя не понимаю, почему тогда для поля тип integer, такого синтаксиса не требуется .
Хм, даже не знаю, как и объяснить, так что не обессудьте, если невнятно...

Рассмотрите выражение, которое Вы передаете методу SetFilter() в каестве строки внутри скобок. А потом уберите кавычки (только внешние). То, что Вы получите дожно быть правильным выражением языка PowerScript. Т.е. если тип поля дя поиска Integer , то выражение внутри кавычек будет
Код: plaintext
column_name =  10 
чего Вы добиваетесь преобразуя синтаксис в
Код: plaintext
"column_name=" + String( 10 )
Теперь вспомните, как осуществляется операция присваивания для объекта строкового типа:
Код: plaintext
1.
2.
String something
something = 'qwerty' // или
something = "qwerty"
Обратите внимание, что присваиваемая строка заключена в кавычки.
Тогда дя строкового поля преобразование синтаксиса должно включать подставление кавычек
Код: plaintext
1.
2.
3.
"srt_column=_'_" + String(something) + "_'_" // знаки подчеркивания
                                  //использованы для
                                  //визуального выделения
                                  //одинарных кавычек
А теперь рассмотрим (преобразуем) Ваш первый вариант
Код: plaintext
dw_1.SetFilter("trndoc_date="+string(d))
Мы помним, что trndoc_date имеет тип данных Date (еще раз сорри за мой первый ответ, когда я подумал, что это String). Тогда, при преобразовании мы получим выражение
Код: plaintext
1.
 /*Date*/  trndoc_date = 'yyyy-mm-dd' // не привожу конкретню дату,
                      // а заменяю ее маской формата
при попытке выполнить эту операцию возникнет ошибка несоответствия данных, т.к. мы пытаемся присвоить дате строку. Правильным вариантом будет выражение такого типа
Код: plaintext
1.
2.
String ddt
ddt = 'yyyy-mm-dd' // не привожу конкретню дату, а заменяю ее маской формата
trndoc_date = date(ddt)
что для синтаксиса присвоения значения фильтра преобразуется в
Код: plaintext
"trndoc_date = date('" + string(d) + "')"
Заметьте, что для оператора Date() вставка String(d) , а точнее результат ее выполнения, в результате преобразования будет заключена в одинарные кавычки.

Теперь понятно? ;-)

---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
16.08.2004, 17:44
    #32651557
f45f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация dw по полю тип DATE
Спасибо, теперь у меня в голове полный порядок :)
Блин, мог бы и сам додуматься.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Фильтрация dw по полю тип DATE / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]