Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ошибка в SQL запросе!!!
|
|||
|---|---|---|---|
|
#18+
Добрый вечер всем! У меня такой вопрос: Чрез ADO (из Delphi) выполняется следующий запрос (провайдер Microsoft OLE DB Provider for Visual FoxPro) к dbf файлу: SELECT POL, VID, RIGHT(DATR, 4) AS DR, COUNT(*) AS KOLVO FROM DELO WHERE (DATR >= {01.01.1904}) AND (VID IN (1,2,3)) AND (SPOS <> 6) AND (SPOS2 <> 6) AND (POL <> NULL) AND (DATR <> NULL) GROUP BY POL, VID, RIGHT(DATR, 4) ORDER BY RIGHT(DATR, 4) DESC; При его выполнении происходит ошибка: SQL: GROUP BY clause is missing or invalid Если выполнить импорт dbf файла в формат Accsess, то запрос замечательно работает. В чём загвоздка? Или может синтаксис запроса драйвер для FoxPro не поддерживает? Кто знает подскажите пожалуйста! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2004, 22:31 |
|
||
|
Ошибка в SQL запросе!!!
|
|||
|---|---|---|---|
|
#18+
Try this: SELECT POL, VID, RIGHT(DATR, 4) AS DR, COUNT(*) AS KOLVO FROM DELO WHERE (DATR >= {01.01.1904}) AND (VID IN (1,2,3)) AND (SPOS <> 6) AND (SPOS2 <> 6) AND (POL <> NULL) AND (DATR <> NULL) GROUP BY POL, VID, 3 ORDER BY 3 DESC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2004, 23:36 |
|
||
|
Ошибка в SQL запросе!!!
|
|||
|---|---|---|---|
|
#18+
При выполнении этого запроса: SELECT POL, VID, RIGHT(DATR, 4) AS DR, COUNT(*) AS KOLVO FROM DELO WHERE (DATR >= {01.01.1904}) AND (VID IN (1,2,3)) AND (SPOS <> 6) AND (SPOS2 <> 6) AND (POL <> NULL) AND (DATR <> NULL) GROUP BY POL, VID, 3 ORDER BY 3 DESC Возникает другая ошибка: Function argument value, type, or count is invalid ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2004, 14:14 |
|
||
|
Ошибка в SQL запросе!!!
|
|||
|---|---|---|---|
|
#18+
В документации по провайдеру приведён пример: SELECT last_name,LEFT(notes,100) AS notes2 from employee GROUP BY last_name, notes2; Но если написать мой запрос аналогично, т.е: SELECT POL, VID, RIGHT(DATR, 4) AS DR, COUNT(*) AS KOLVO FROM DELO WHERE (DATR >= {01.01.1904}) AND (VID IN (1,2,3)) AND (SPOS <> 6) AND (SPOS2 <> 6) AND (POL <> NULL) AND (DATR <> NULL) GROUP BY POL, VID, DR ORDER BY DR DESC; Тогда возникает другая ошибка: 'Function argument value, type or count is invalid' Вместо функции RIGHT(DATR, 4) пробовал писать EXTRACT(YEAR FROM DATR), т.е. запрос выглядит следующим образом: SELECT POL, VID, EXTRACT(YEAR FROM DATR) AS DR, COUNT(*) AS KOLVO FROM DELO WHERE (DATR >= {01.01.1904}) AND (VID IN (1,2,3)) AND (SPOS <> 6) AND (SPOS2 <> 6) AND (POL <> NULL) AND (DATR <> NULL) GROUP BY POL, VID, DR ORDER BY DR DESC; в этом случае возникает ошибка: 'Function name is missing )' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2004, 15:19 |
|
||
|
Ошибка в SQL запросе!!!
|
|||
|---|---|---|---|
|
#18+
Так много ошибок сразу в таком маленьком запросе -) О какой версии FoxPro идет речь? -) Попробуй написать так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Если Datr - это поле типа Date, то использовать для него функцию RIGHT() в принципе недопаустимо. Будет сообщение о несоответсвии типов аргумента. Для выделения года в этом случае используют функцию YEAR(DATR) NULL - это очень особенное значение. Проверять его любой функцией равенства не имеет смысла. Всегда получишь NULL, что для логических выражений интерпретируется как .F. Для проверки на NULL используется специальная функция ISNULL() Эта функция возвращает .T., если аргумент имеет значение NULL Если необходимо сделать проверку одновременно на NULL и на пустое значение, то используют функцию NVL(POL,0)<>0 Функция NVL возвращает значение первого аргумента, если он отличен от NULL, в противном случае, возвращается значение второго аргумента. Начиная с версии VFP6 был введен специальный стандарт для констант типа DATE и DATETIME, который не зависит от текущих региональных настроек. Это формат вида: {^YYYY-MM-DD HH:MM:SS} В качестве радлеителя месяцев и дней межет выступать один из 3 символов: {^YYYY\MM\DD} {^YYYY-MM-DD} {^YYYY.MM.DD} Если Вы используете формат {01.01.1904}, то должны убедиться, что сделаны соответствующие региональные настройки в среде FoxPro: SET STRICTDATE TO 0 && начиная с версии VFP6 SET DATE TO GERMAN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2004, 09:30 |
|
||
|
Ошибка в SQL запросе!!!
|
|||
|---|---|---|---|
|
#18+
Я не через FoxPro делаю, а через ADO (из DELPHI), используя провайдера Microsoft Visual FoxPro. DATR - поле типа Date! функция RIGHT действительно здесь не катит, хотя при импорте в Access запрос работает с данной функцией SELECT POL, VID, YEAR(DATR) AS DR, COUNT(*) AS KOLVO FROM DELO WHERE (DATR >= {01.01.1904}) AND (VID IN (1,2,3)) AND (SPOS <> 6) AND (SPOS2 <> 6) AND (POL IS NOT NULL) AND (DATR IS NOT NULL) GROUP BY POL, VID, DR ORDER BY DR DESC; А выражения 'Значение <> NULL' и 'Значение IS NOT NULL' действительно не одно и то же. Выше указанный запрос теперь работает замечательно! Спасибо большое за советы!!! 8-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2004, 10:16 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32660180&tid=1595957]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
79ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
| others: | 256ms |
| total: | 424ms |

| 0 / 0 |
