|
|
|
SET ENGINEBEHAVIOR как спаситель
|
|||
|---|---|---|---|
|
#18+
Был написан проект под VFP80. Решил его просто перекинуть в VFP90 и пустить в работу, конечно некоторые запросы повели себя не так. Т.е. если запрос типа: Код: plaintext 1. 2. 3. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 17:23 |
|
||
|
SET ENGINEBEHAVIOR как спаситель
|
|||
|---|---|---|---|
|
#18+
Запрос с GROUP BY выдает сообщение о синтаксической ошибке SET ENGINEBEHAVIOR - это не стремление "к однотипности", а стремление к получению корректных результатов запроса. "Старый" режим работы может привести к неоднозначности (неопределенности) результата выборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 18:37 |
|
||
|
SET ENGINEBEHAVIOR как спаситель
|
|||
|---|---|---|---|
|
#18+
Владимир САВидимо это стремление к однотипности получения результатов что в VFP, так и в MSSQL??? Да нет, это скорее стремление приблизиться к стандарту ANSI SQL. Мне, например, в фоксе всегда мешало, что он выдавал пустое множество вместо одной записи в запросах с групповыми функциями. По стандарту ANSI он должен выдавать одну строку! Ведь Код: plaintext Владимир САНо вместе с этим приходиться задумываться о получении пустого множества из запроса и его обработкой. Не все же пользоваться SET ENGINEBEHAVIOR. Ведь возможно появление более новой версии VFP. Приходится как бы переопределять себе в голове возможные результаты запросов. Какое мнение у Вас???Я думаю, в новой версии стало, наконец, так, как должно быть, правильно, и нужно потихоньку привыкать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 23:43 |
|
||
|
SET ENGINEBEHAVIOR как спаситель
|
|||
|---|---|---|---|
|
#18+
P.S. Хорошо, предположим, в версиях 2.x просто не было null-ов, вот и приходилось возвращать пустой курсор, чтобы как-то отличить, были записи в выборке или нет. Потом-то null появился ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2006, 23:46 |
|
||
|
SET ENGINEBEHAVIOR как спаситель
|
|||
|---|---|---|---|
|
#18+
Urri...это скорее стремление приблизиться к стандарту ANSI SQL. Urri...Я думаю, в новой версии стало, наконец, так, как должно быть, правильно, и нужно потихоньку привыкать.Согласен! Urri...в версиях 2.x просто не было null-ов, вот и приходилось возвращать пустой курсор, чтобы как-то отличить, были записи в выборке или нет. Потом-то null появился.Но .Null. появился начиная с VFP30, что же так долго переходили? Я конечно имею ввиду именно с пустым множеством. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 06:36 |
|
||
|
SET ENGINEBEHAVIOR как спаситель
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Запрос с GROUP BY выдает сообщение о синтаксической ошибке SET ENGINEBEHAVIOR - это не стремление "к однотипности", а стремление к получению корректных результатов запроса. "Старый" режим работы может привести к неоднозначности (неопределенности) результата выборки.С этим я согласен, и что ошибка выдается при таких запросах это логично. Я начал говорить о пустом множестве. Где вроде как свыкся с получением именно пустого множества. А тут оказывается НЕТ. И к этому надо уже относиться по новому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 06:44 |
|
||
|
SET ENGINEBEHAVIOR как спаситель
|
|||
|---|---|---|---|
|
#18+
А почему не смущает разный результат запросов в младших версиях: SELECT COUNT(*) FROM MyTab WHERE .F. SELECT MAX(MyField) FROM MyTab WHERE .F. В первом случае будет одна запись со значение 0, а во втором - ни одной записи. Почему собственно? Так что, все логично. Т.е. как раз теперь все встало на свои места. Вне зависимости от используемых аггрегатных функций получаем одну запись. Ну, а ее содержимое - это уже другой вопрос. Никто же не мешает написать так: SELECT NVL(MAX(MyField),0) FROM MyTab WHERE .F. Почему не исправили раньше? Это уже вопрос к команде разработчиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 11:41 |
|
||
|
SET ENGINEBEHAVIOR как спаситель
|
|||
|---|---|---|---|
|
#18+
ВладимирМА почему не смущает разный результат запросов в младших версиях: SELECT COUNT(*) FROM MyTab WHERE .F. SELECT MAX(MyField) FROM MyTab WHERE .F. В первом случае будет одна запись со значение 0, а во втором - ни одной записи. Почему собственно? Так что, все логично. Т.е. как раз теперь все встало на свои места. Вне зависимости от используемых аггрегатных функций получаем одну запись. Ну, а ее содержимое - это уже другой вопрос. Никто же не мешает написать так: SELECT NVL(MAX(MyField),0) FROM MyTab WHERE .F. Почему не исправили раньше? Это уже вопрос к команде разработчиков.Спасибо, согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2006, 12:10 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33598141&tid=1592137]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
188ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 211ms |
| total: | 510ms |

| 0 / 0 |
