Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Andrey-750 Гость
|
Добавлено: Пн Май 26 2003 02:27 Заголовок сообщения: FoxPro & SQL - вопрос |
|
|
Примерно 6 лет назад мною (думается - не только мною) был обнаружен пренеприятнейший баг в Visual FoxPro 3.0 (version date June 21 1995). Суть бага в том, что при некоторых обстоятельствах егойный SQL напрочь отказывается считаь эквивалентными одинаковые числа. Ниже я привожу коротенькую тестовую программку, позволяющую выявить этот баг. Огромная просьба ко всем, имеющим такую возможность - прогнать этот тест на VFP более поздних версий и сообщить о результатах
С уважением, Андрей andrey-750@mail.ru
************************** VFP SQL TEST ************************** SET COLLATE TO "RUSSIAN" *** Это непременное условие проявления бага. *** Если COLLATE="MACHINE" - ЭТОТ баг не проявляется (зато проявляются другие)
*** Для начала создадим таблицу с единственным полем. CREATE TABLE tbl1 FREE (TblID N(10))
*** Внесём 100000 записей FOR j=0 TO 99999 INSERT INTO tbl1 VALUES (j) ENDFOR
SELECT * FROM tbl1 WHERE TblID NOT IN (SELECT TblID FROM tbl1) *** Результатом этого запроса, как легко видеть, должна быть пустая таблица, *** на самом же деле получается выборка примерно из 250 записей.
SELECT * FROM tbl1 a, tbl1 b WHERE a.TblID=b.TblID *** Результатом этого запроса должна быть таблица из 100000 записей, *** на самом же деле получается выборка примерно из 99650 записей.
*** Если создать таблицу с полем типа I, первый запрос выдаст правильный *** результат (0 records selected), но только если в подзапросе будет использоваться та же таблица. *** Если же это будет другая, идентичная первой, баг повторяется. *** Второй запрос будет в любом случае выполнен с ошибкой. *** Вместо "TABLE" можно с таким же успехом использовать "CURSOR"
*** Очистим диск SELECT tbl1 ZAP USE DELETE FILE tbl1 *********************** END OF VFP SQL TEST ********************** |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Пн Май 26 2003 08:01 Заголовок сообщения: Точно, есть. VFP 6.0: в результате соответственно 377 и 99747 записей (-) |
|
|
- |
|
Вернуться к началу |
|
|
Sclis Гость
|
Добавлено: Вт Июн 03 2003 09:17 Заголовок сообщения: Re: FoxPro & SQL - вопрос |
|
|
6.0 - да, но вот если не удалять таблицы, а закрыть фокс, потом открыть и прогнать запросы то - нет. будет все нормально может он кэширует так? и начинается этот фокус с 2060 записей, потом добавляется по числу через каждые 128 примерно) заканчивается на 63671. а может это как-то связано с кодировкой уникоде? классный фокус! |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Вт Июн 03 2003 11:25 Заголовок сообщения: Если нужно побороться с этим, то можно так: сразу после "CREATE TABLE..." поставить "INDEX ON TblID...". По |
|
|
- |
|
Вернуться к началу |
|
|
|