Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Условие на дату для DBF / 16 сообщений из 16, страница 1 из 1
03.07.2012, 13:25
    #37864323
DimmaN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
Добрый день!

С помощью функции SyntaxFromSQL создаю код для datastore, в который качаю данные из ДБФ. Не могу наложить в запросе условие на дату.
Вот такой код:

Код: sql
1.
2.
3.
4.
ls_sql = "SELECT " + ls_filedata + ".Value as Weight " + &
" FROM " + ls_filedata + ", " + ls_filetag + " WHERE " + ls_filedata + ".TagIndex = " + ls_filetag + ".TTagIndex AND " + ls_filetag + ".TagName = '" + ls_tagname + "'" + " AND " + ls_filedata + ".[Date] >= {01.01.2000}"

ls_sql = ltr.SyntaxFromSQL (ls_sql, '',  ls_err)



выдает ошибку. Если к строке не подклеивать условие на дату, то все работает.

Подскажите как все-таки наложить это условие? Может преобразовать дату к строке "ггггммдд" и дальше сравнивать строки, но какой функцией делать преобразование?

PB 11.1, драйвер Driver do Microsoft dBase
...
Рейтинг: 0 / 0
03.07.2012, 14:51
    #37864552
Ikir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
DimmaN,

Не знаю причем тут PB, но ошибка в синтаксисе. Проще всего добиться работоспособности SQL-выражения в каком-нибудь commandere и воспроизвести его уже в PB.
Есть подозрения, что
- поле dataaf.[Date] -так не называется
- драйвер скорее всего переварит строковое значение даты '01.01.2000', а не {} и тут нужен формат совпадающий с вашей локалью.
...
Рейтинг: 0 / 0
03.07.2012, 15:08
    #37864598
DimmaN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
IkirDimmaN,

Не знаю причем тут PB, но ошибка в синтаксисе. Проще всего добиться работоспособности SQL-выражения в каком-нибудь commandere и воспроизвести его уже в PB.
Есть подозрения, что
- поле dataaf.[Date] -так не называется

именно так оно и называется. если включить его в выборку, и не накладывать на него условий, то datastore создается, sql выражение работает.
- драйвер скорее всего переварит строковое значение даты '01.01.2000', а не {} и тут нужен формат совпадающий с вашей локалью.

нет, '01.01.2000' он не переваривает, так же, как не переваривает '20000101', '2000-01-01'. Фигурные скобки поставил, т.к. такие скобки прокатывают в дбф-вьюере. Я не настаиваю, что должны быть именно они, т.к. и сам вижу что это не срабатывает.

Какой формат нужно указать - это и был мой вопрос :)
...
Рейтинг: 0 / 0
03.07.2012, 15:23
    #37864651
Ikir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
DimmaN,

Хорошо, в PB в SQL спроси SELECT {Date} FROM dataaf и посмотри что возвращает.
...
Рейтинг: 0 / 0
03.07.2012, 16:18
    #37864783
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
Я помню пришлось долго искать, чтобы выражение как дата воспринималась
Конечно я подобрал выражение, но уплевался весь
После этого делал либо перегонку dbf в excel или access, либо использовал прямой парсинг в dw, а потом уже обработку
...
Рейтинг: 0 / 0
03.07.2012, 16:26
    #37864805
DimmaN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
IkirDimmaN,

Хорошо, в PB в SQL спроси SELECT {Date} FROM dataaf и посмотри что возвращает.

Этот запрос не будет обработан. Зарезервированные слова квотируют так: [Date]. Но это так, не в тему :). Если запрос написать правильно, то при исполнении в ISQLSession возвращаются даты в формате дд.мм.гггг.

spas2001Я помню пришлось долго искать, чтобы выражение как дата воспринималась
Конечно я подобрал выражение, но уплевался весь
После этого делал либо перегонку dbf в excel или access, либо использовал прямой парсинг в dw, а потом уже обработку

И как надо писать, не помните?
...
Рейтинг: 0 / 0
03.07.2012, 17:06
    #37864894
Ikir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
DimmaN,

Если бы он не мог преобразовать строку в дату, то ошибка была бы другая, типа String to date conversion error.

Такой запрос выполняется:
SELECT * FROM dataaf WHERE dataaf.[Date] < today(); ?

а такой

SELECT * FROM dataaf WHERE dataaf.Date < today()


PS По рукам бы разработчикам называющих поля таблиц зарезервированными словами.
...
Рейтинг: 0 / 0
04.07.2012, 10:40
    #37865580
ChV
ChV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
Для работы с dbf пользуюсь описанием usingdbaseexpressions.pdf
Можно поискать в инете.

Там указано :

.....
Date Special numeric value representing a date.
Literal use: {03/10/1999}
....
Function use: DTOS(DATE())
.....
Date Functions:
ACCDATE(<string>)
AGE(<date>)
CTOD(<string>)
DATE()
DAY(<date>)
DOBINDAYS(<date>)
DOW(<date>)
DOY(<date>)
DTOC(<date>)
DTOS(<date>)
MONTH(<date>)
STOD(<string>)
WDATE(<date>, <format>)
YEAR(<date>)

Приложить файл не могу - он больше 150кб ( 680 кб )



Good Luck !
...
Рейтинг: 0 / 0
04.07.2012, 11:54
    #37865763
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
Валерий правильно написал
Кажется использовал date(), но сейчас не помню
...
Рейтинг: 0 / 0
04.07.2012, 16:38
    #37866360
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
>= #01/03/2012#
...
Рейтинг: 0 / 0
04.07.2012, 17:04
    #37866417
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
не, не прокатит
Надо посмотреть через DBF навигатор, точно формат у структуры DBF дата, а то может строка
...
Рейтинг: 0 / 0
04.07.2012, 17:53
    #37866511
ChV
ChV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
Riska>= #01/03/2012#
Почему бы не воспользоваться документацией ?
#01/03/2012#
{01/03/2012}

Good Luck !
...
Рейтинг: 0 / 0
06.07.2012, 10:33
    #37868711
DimmaN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
ChV, спасибо большое. Это именно то, что я хотел найти. Но, к сожалению, не помогло. Видимо, ОДБСи драйвер нужен другой. Не все функции из этого списка поддерживает (см. картинку).

Обошел другим путем, создал датавинду на SQL Select'e с ретрив аргументом, там условие накладывается нормально. Ну и поcкольку мне нужно в запрос разные таблицы подкладывать делаю modify ("DataWindow.Table.Select =........
...
Рейтинг: 0 / 0
06.07.2012, 10:34
    #37868715
DimmaN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
картинку-то зобыл
...
Рейтинг: 0 / 0
06.07.2012, 12:00
    #37868913
ChV
ChV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
DimmaN, из документации :

DTOS(<date>)
Returns a character string (YYYYMMDD format) derived from <date>.
Return type: String
Example
DTOS(Contact2->UDATE)
returns 19981024.

У меня работает ( драйвер PB INTERSOLV OEM 3.11 ) :
...
Рейтинг: 0 / 0
06.07.2012, 12:21
    #37868967
ChV
ChV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие на дату для DBF
DimmaN, согласен, что, возможно, не все функции поддерживаются. Но другого описания не попадалось. Здесь же почти все работает. Могу выслать usingdbaseexpressions.pdf ответным письмом.
Картинку прилагаю.

Good Luck !
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Условие на дату для DBF / 16 сообщений из 16, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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