Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как правильно написать в where "date > 01/01/2007"? / 12 сообщений из 12, страница 1 из 1
25.09.2007, 10:53
    #34823530
AlexeyGY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно написать в where "date > 01/01/2007"?
База dBase III, пишу небольшую программу на С. Базу подключаю через ODBC:

Код: plaintext
DRIVER={Driver do Microsoft dBase (*.dbf)};DSN=dBASE Files;DefaultDir=xxx;DBQ=xxx

Все нормально пашет, но с полем типа "DATE" не могу разобратся. Нужно выбрать записи с определенной датой, например 25.09.2007. Соответственно пишу нечто:

Код: plaintext
SELECT * FROM CO01 WHERE DATA =  25 / 09 / 2007 

DATA - это поле типа DATE. Получаю пустой результат.

Когда пишу:

Код: plaintext
SELECT * FROM CO01 WHERE DATA >  22 / 09 / 2007 

Получаю все записи, даже с 21.09.2007

Также пробовал всяческие варианты:

Код: plaintext
{ 22 / 09 / 2007 }
Код: plaintext
{ 22 , 09 , 2007 }
Код: plaintext
{ 22 - 09 - 2007 }
Код: plaintext
date( 22 , 09 , 2007 )
Код: plaintext
'22/09/2007'
Код: plaintext
{ 22 . 09 . 2007 }

В ответ получаю ошибку синтаксиса...

Подскажите, пожалуйста, в чем проблема?
...
Рейтинг: 0 / 0
25.09.2007, 11:04
    #34823584
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно написать в where "date > 01/01/2007"?
Код: plaintext
1.
2.
3.
4.
5.
where "date"='2007-09-25'
или
local ldDate
ldDate=date( 2007 , 09 , 25 ) && или др.значение из формы в формате даты
where "date"=?m.ldDate
...
Рейтинг: 0 / 0
25.09.2007, 11:12
    #34823605
AlexeyGY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно написать в where "date > 01/01/2007"?
Код: plaintext
where "DATA"='2007-09-25'

[Microsoft][Драйвер ODBC dBase] Несоответствие типов данных в выражении условия отбора

Код: plaintext
1.
2.
local ldDate
ldDate=date( 2007 , 09 , 25 ) && или др.значение из формы в формате даты

Я не понял куда вставлять? До "where"?
...
Рейтинг: 0 / 0
25.09.2007, 11:20
    #34823635
как правильно написать в where "date > 01/01/2007"?
Код: plaintext
SELECT * FROM CO01 WHERE DATA = {^ 2007 - 09 - 25 }
...
Рейтинг: 0 / 0
25.09.2007, 11:21
    #34823645
как правильно написать в where "date > 01/01/2007"?
AlexeyGYБаза dBase III, пишу небольшую программу на С. Базу подключаю через ODBC:

Код: plaintext
DRIVER={Driver do Microsoft dBase (*.dbf)};DSN=dBASE Files;DefaultDir=xxx;DBQ=xxx

Все нормально пашет, но с полем типа "DATE" не могу разобратся. Нужно выбрать записи с определенной датой, например 25.09.2007. Соответственно пишу нечто:

Код: plaintext
SELECT * FROM CO01 WHERE DATA =  25 / 09 / 2007 

DATA - это поле типа DATE. Получаю пустой результат.

Когда пишу:

Код: plaintext
SELECT * FROM CO01 WHERE DATA >  22 / 09 / 2007 

Получаю все записи, даже с 21.09.2007

Также пробовал всяческие варианты:

Код: plaintext
{ 22 / 09 / 2007 }
Код: plaintext
{ 22 , 09 , 2007 }
Код: plaintext
{ 22 - 09 - 2007 }
Код: plaintext
date( 22 , 09 , 2007 )
Код: plaintext
'22/09/2007'
Код: plaintext
{ 22 . 09 . 2007 }

В ответ получаю ошибку синтаксиса...

Подскажите, пожалуйста, в чем проблема?
Так Вам же понятно сказал драйвер - проблема в синтаксисе! Точнее в том, что драйвер не может преобразовать строку "22.09.2007" в дату.
Можно попробовать следующие варианты:
1. DATE(Год,Месяц,День) (скорее всего, подойдет только для VFP ODBC)
2. {d'22.09.2007'} (взято из: MDAC 2.5 SDK - ODBC Programmer's Reference Chapter 8: SQL Statements )
3. CTOD(22.09.2007) (скорее всего, подойдет только для VFP ODBC)
4. {^год-месяц-день} (скорее всего, подойдет только для VFP ODBC)
5. #22.09.2007#
и т.д.
...
Рейтинг: 0 / 0
25.09.2007, 11:29
    #34823678
как правильно написать в where "date > 01/01/2007"?
Если мой предыдущий вариант не подойдет, то можно еще вот так:
Код: plaintext
SELECT * FROM CO01 WHERE DATA = CTOD(' 25 . 09 . 2007 )
...
Рейтинг: 0 / 0
25.09.2007, 11:30
    #34823682
AlexeyGY
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно написать в where "date > 01/01/2007"?
Код: plaintext
SELECT * FROM CO01 WHERE DATA = {^ 2007 - 09 - 25 }

Ошибка в синтаксисе[пропущен оператор] в выражении 'DATA ='

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Так Вам же понятно сказал драйвер - проблема в синтаксисе! Точнее в том, что драйвер не может преобразовать строку "22.09.2007" в дату.
Можно попробовать следующие варианты:
 1 . DATE(Год,Месяц,День) (скорее всего, подойдет только для VFP ODBC)
 2 . {d'22.09.2007'} (взято из: MDAC  2 . 5  SDK - ODBC Programmer's Reference Chapter  8 : SQL Statements )
 3 . CTOD( 22 . 09 . 2007 ) (скорее всего, подойдет только для VFP ODBC)
 4 . {^год-месяц-день} (скорее всего, подойдет только для VFP ODBC)
 5 . # 22 . 09 . 2007 #
и т.д.

Ошибка в синтаксисе.

Единственное, что работает, как альтернатива:

Код: plaintext
1.
... where YEAR(DATA)= 2007  and MONTH(DATA)= 09  and DAY(DATA)= 25 

Но в этом варианте писанины больше.
...
Рейтинг: 0 / 0
25.09.2007, 11:31
    #34823686
как правильно написать в where "date > 01/01/2007"?
Упс, закрывающую кавычку после 2007 пропустил.
...
Рейтинг: 0 / 0
25.09.2007, 13:32
    #34824302
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно написать в where "date > 01/01/2007"?
Дата обрамляется символами # и разделителем служит наклонная черта.

Код: plaintext
SELECT * FROM CO01 WHERE DATA = # 25 / 09 / 2007 #

Но, вообще-то, лучше передавать константы как параметры. Не уверен в синтаксисе С, но обычно параметры передаются через вопросительный знак

Код: plaintext
SELECT * FROM CO01 WHERE DATA = ?varDate

Где varDate - это переменная типа Date (если там такая есть) в собственно C
...
Рейтинг: 0 / 0
28.09.2007, 15:21
    #34835081
Andrey Ts
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно написать в where "date > 01/01/2007"?
2AlexeyGY
А по-моему, вы просто используете глючный ODBC драйвер.
Может возьмете все-таки более распространенный MS Visual FoxPro Driver?
...
Рейтинг: 0 / 0
09.10.2007, 03:13
    #34855484
StrStr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно написать в where "date > 01/01/2007"?
Делал на С запрос к DBF базе через ОДБС(подключался через Foxpro драйверы). Незная foxpro, тоже возился с датой. Вот так работает, например:
WHERE DATE Between {m1/d1/y1} AND {m2/d2/y2}
m, d, y - понятно что. Например {01/02/2007}
...
Рейтинг: 0 / 0
09.10.2007, 03:15
    #34855487
StrStr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как правильно написать в where "date > 01/01/2007"?
До того, как сделал правильно, тоже получал "Ошибку синтаксиса" и "Несоответствие типов данных"
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / как правильно написать в where "date > 01/01/2007"? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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