Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку / 14 сообщений из 14, страница 1 из 1
05.11.2007, 14:28
    #34916669
t03
t03
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
Господа, подскажите плиз, почему один и тот же запрос:

SELECT Base_name, Code_tip INTO ARRAY MasCode FROM klnt_dbf ;
WHERE Code_tip = 1 .OR. Code_tip = 2 GROUP BY Base_name ORDER BY Base_name

работает в 6-ом фоксе, а в 9-ом не работает. Выдает ошибку, что в GROUP BY ошибка.
...
Рейтинг: 0 / 0
05.11.2007, 14:39
    #34916682
Dimashik78
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
установи переменную

SET ENGINEBEHAVIOR 70

такая штука начиная VFP 8
...
Рейтинг: 0 / 0
05.11.2007, 14:42
    #34916688
t03
t03
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
Спасибо за подсказку - буду пробовать
...
Рейтинг: 0 / 0
05.11.2007, 15:06
    #34916717
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
t03Спасибо за подсказку - буду пробовать
Лучше
SELECT Base_name, Code_tip INTO ARRAY MasCode FROM klnt_dbf ;
WHERE Code_tip = 1 .OR. Code_tip = 2 GROUP BY Base_name , Code_tip ORDER BY Base_name
или
SELECT Base_name, min(Code_tip) as Code_tip INTO ARRAY MasCode FROM klnt_dbf ;
WHERE Code_tip = 1 .OR. Code_tip = 2 GROUP BY Base_name ORDER BY Base_name

У VFP6 немного свободный подход по сравнению со стандартом SQL, а в 8-9 уже в соответствии. Лучше привыкай писать под 9-кой, а то завтра до SQL-сервера какого доберешься, а там SET ENGINEBEHAVIOR 70 не поможет.
...
Рейтинг: 0 / 0
05.11.2007, 16:46
    #34916929
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
t03Господа, подскажите плиз, почему один и тот же запрос:

SELECT Base_name, Code_tip INTO ARRAY MasCode FROM klnt_dbf ;
WHERE Code_tip = 1 .OR. Code_tip = 2 GROUP BY Base_name ORDER BY Base_name

работает в 6-ом фоксе, а в 9-ом не работает. Выдает ошибку, что в GROUP BY ошибка.
Какой смысл в группировки (GROUP BY ), если нет НИ одной агрегатной функции в запросе ?!
...
Рейтинг: 0 / 0
05.11.2007, 17:52
    #34917020
lo-pata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
Aleksey-K
Какой смысл в группировки (GROUP BY ), если нет НИ одной агрегатной функции в запросе ?!

А если в исходной таблице есть повторяющиеся строки? Груп выдаст таблицу без повторяющихся строк. То же самое, что и distinct.
...
Рейтинг: 0 / 0
05.11.2007, 18:26
    #34917064
t03
t03
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
Именно так - в базе мно повторяющихся записей и "GROUP BY Base_name" используется именно для этого.
Интересно, а много еще подводных камней при переводе задачи на 9-ку. Задача пишется с прошлого тысячелетия - с 1995 года, поэтому нужно понимать - сколько будет стоить усилий перевести ее под 9-ку
Dima T - спасибо за дельный совет.
...
Рейтинг: 0 / 0
05.11.2007, 19:05
    #34917125
Dimashik78
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
У меня возникло две.
1. - эта.
2. - печать на принтер по умолчанию (http://]forum.foxclub.ru/read.php?29,181504,181540#msg-181540) надеюсь в понедельник разберусь.
...
Рейтинг: 0 / 0
05.11.2007, 19:09
    #34917131
Dimashik78
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
О да еще с кодовой страницей.
создал файл CONFIG.FPW в каталоге с прогой.

SCREEN=On
codepage=1251

на VFP 6 без него нормально было
...
Рейтинг: 0 / 0
06.11.2007, 10:04
    #34917766
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
t03Именно так - в базе мно повторяющихся записей и "GROUP BY Base_name" используется именно для этого.
Интересно, а много еще подводных камней при переводе задачи на 9-ку. Задача пишется с прошлого тысячелетия - с 1995 года, поэтому нужно понимать - сколько будет стоить усилий перевести ее под 9-ку
Dima T - спасибо за дельный совет.
Вот именно DISTINCT, если есть повторяющие строки, то и используете DISTINCT. И работать будет быстрее и код читается легче.
Согласитесь, что код:
Код: plaintext
1.
SELECT DISTINCT Base_name, Code_tip INTO ARRAY MasCode FROM klnt_dbf ;
WHERE Code_tip =  1  .OR. Code_tip =  2  ORDER BY Base_name
легче читается, чем с GROUP BY, который нужен, по большому счету, совсем для другого.
С уважением, Алексей.
...
Рейтинг: 0 / 0
06.11.2007, 10:11
    #34917790
lo-pata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
Aleksey-KВот именно DISTINCT, если есть повторяющие строки, то и используете DISTINCT. И работать будет быстрее и код читается легче.

Вот как мне помнится, Базиян рекомендует использовать именно group by для ускорения работы. :) Т.к. при использовании distinct фоксу приходится сравнивать все поля исходного набора данных на совпадения, а груп обрабатывает уже результат запроса.
...
Рейтинг: 0 / 0
06.11.2007, 11:58
    #34918213
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
lo-pataВот как мне помнится, Базиян рекомендует использовать именно group by для ускорения работы. :) Т.к. при использовании distinct фоксу приходится сравнивать все поля исходного набора данных на совпадения, а груп обрабатывает уже результат запроса.

Все-таки distinct и group by разные инструменты, кроме тех случаев где список выбираемых полей полностью соответствует списку в group by, что в данном случае distinct не подходит.
...
Рейтинг: 0 / 0
06.11.2007, 12:09
    #34918278
lo-pata
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
Dima TВсе-таки distinct и group by разные инструменты, кроме тех случаев где список выбираемых полей полностью соответствует списку в group by, что в данном случае distinct не подходит.

Это может относиться к vfp6, но вот никак не к 8 или 9, т.к. только в 6-ке еще можно было в груп бай вкючить не все поля из запроса. В старших версиях в груп должны быть включены все поля запроса, кроме функций. Так что работа distinct и group by может отличаться только в vfp6.
...
Рейтинг: 0 / 0
06.11.2007, 12:41
    #34918465
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку
lo-pataЭто может относиться к vfp6, но вот никак не к 8 или 9, т.к. только в 6-ке еще можно было в груп бай вкючить не все поля из запроса. В старших версиях в груп должны быть включены все поля запроса, кроме функций. Так что работа distinct и group by может отличаться только в vfp6. Вот именно, кроме функций. Кто мешает вместо случайного выбора в 6-ке использовать MIN() или MAX() в 9-ке?

Поторопился, надо было это для Aleksey-K написать. Возвращаясь к контексту вопроса - в 6-ке работает так:
Код: plaintext
1.
SELECT Base_name, Code_tip INTO ARRAY MasCode FROM klnt_dbf ;
WHERE Code_tip =  1  .OR. Code_tip =  2  GROUP BY Base_name ORDER BY Base_name

Более точный аналог для 9-ки:
Код: plaintext
1.
SELECT Base_name, min(Code_tip) as Code_tip INTO ARRAY MasCode FROM klnt_dbf ;
WHERE Code_tip =  1  .OR. Code_tip =  2  GROUP BY Base_name ORDER BY Base_name

В варианте:
Aleksey-K
Код: plaintext
1.
SELECT DISTINCT Base_name, Code_tip INTO ARRAY MasCode FROM klnt_dbf ;
WHERE Code_tip =  1  .OR. Code_tip =  2  ORDER BY Base_name
возможно задвоение Base_name. В предложенном мной выше та же проблема:
Dima TSELECT Base_name, Code_tip INTO ARRAY MasCode FROM klnt_dbf ;
WHERE Code_tip = 1 .OR. Code_tip = 2 GROUP BY Base_name , Code_tip ORDER BY Base_name
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Почему SQL-запрос в 6-ом фоксе работает, а в 9-ом выдает ошибку / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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