Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Результат выборки на разных машинах разный  [new]
Василий Л
Member

Откуда: Ставрополь
Сообщений: 47
Здравствуйте!

Помогите кто может. Есть две таблицы, делаю связь между ними при помощи WHERE


{SELECT y.kpr as Код_предприятия, y.mes as Дата_оплаты,;
y.npp as N_платежного_документа, y.summa as Сумма_по_платежному_документу,;
f_com.nzs as N_заявления, f_com.dzs as Дата_заявления, f_com.ss as Сумма_без_НДС,;
f_com.pen as НДС, f_com.p23 as Налог_с_продаж, '111/2' as Счет_оплаты,;
f_com.ss+ f_com.pen+ f_com.p23 as Сумма_по_заявлению;
FROM f_com, bank y;
WHERE (((SUBSTR(ALLTRIM(y.n_chet),1,3)="155" AND y.dohod=.T. AND f_com.prz=(.T.));
AND (yearMonth(f_com.dww)=lnDataOrdera AND f_com.nzs = y.nd1);
AND YearMonth(y.mes)<lnDataOrdera);
AND (f_com.kpr=y.kpr AND f_com.ss+ f_com.pen+ f_com.p23=y.summa);
AND (f_com.kpr>=cNumber(lnKN,5) AND f_com.kpr<=cNumber(lnKK,5)));
ORDER BY f_com.dzs INTO CURSOR cDohodBankOplataProshl}

что сделать, подскажите пожалуйста?
за ранее благодарю
5 фев 04, 13:06    [522286]     Ответить | Цитировать Сообщить модератору
 Re: Результат выборки на разных машинах разный  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
А вопрос-то в чем? Как оптимизировать такой корявый запрос или почему разные результаты?

Причины разных выборок на разных машинах могут быть:

1) Если используются разные базы данных

-) Сами данные разные
-) Поврежден индекс. Дай REINDEX на обоих машинах

2) Не имеет значения общая база или раздельная. Разные настройки среды окружения у разных клиентов

-) SET DELETED
-) SET ANSI

Ну и для более полного ответа неплохо бы знать, что делают функции YearMonth() и cNumber()
5 фев 04, 13:21    [522318]     Ответить | Цитировать Сообщить модератору
 Re: Результат выборки на разных машинах разный  [new]
Urri
Member

Откуда: Москва
Сообщений: 2693
Сразу углядел where SUBSTR(ALLTRIM(y.n_chet),1,3)="155"

При разных настройках SET ANSI и SET EXACT может быть "15"="155" и "15"<>"155"
5 фев 04, 13:27    [522334]     Ответить | Цитировать Сообщить модератору
 Re: Результат выборки на разных машинах разный  [new]
Василий Л
Member

Откуда: Ставрополь
Сообщений: 47
Попробовал set ansi, SET EXACT, переиндексацию, строку substr вообще убрал, данные выбираются из сетевых таблиц, так-что они одни и ничего не помогло.

Вообщем если я запускаю этот select из по VFP8.0 SP1 win 2000 sp4 то все работает нормально и выбирает то что нужно, а вот если я его строю (BUILD) и запускаю (на своей же машине) созданный EXE файл, то результат выборки содержит меньше записей.

Ну подскажите еще.
5 фев 04, 14:37    [522532]     Ответить | Цитировать Сообщить модератору
 Re: Результат выборки на разных машинах разный  [new]
Por
Guest
SET DATE глянь на всякий случай.
5 фев 04, 15:02    [522610]     Ответить | Цитировать Сообщить модератору
 Re: Результат выборки на разных машинах разный  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Файл CONFIG.FPW (обычный текстовый файл) со строкой

CODEPAGE=1251

Положи его рядом с EXE
6 фев 04, 10:17    [523787]     Ответить | Цитировать Сообщить модератору
 Re: Результат выборки на разных машинах разный  [new]
Василий Л
Member

Откуда: Ставрополь
Сообщений: 47
Ура, добился. Оказывается сумма полей f_com.ss+ f_com.pen+ f_com.p23 и сумма y.summa при компиляции приложения по разному воспринимается. Проблему решил заменой на строку val(str(f_com.ss+ f_com.pen+ f_com.p23,15,2)=val(str(y.summa15,2))

Большое спасибо за советы. (Может кто может по-другому)
6 фев 04, 20:00    [525122]     Ответить | Цитировать Сообщить модератору
 Re: Результат выборки на разных машинах разный  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Что значит "по разному считают"? Разные суммы получаются? С какой стати?

Ответь на следующие вопросы:

1) Какого типа поля: f_com.ss,f_com.pen,f_com.p23,y.summa - Numeric или Currency?

2) Допустимы ли в них значение NULL. И если "Да", то нет ли таких значений?

3) Какая текущая настройка SET COLLATE на момент выполнения запроса? Проверить можно по SET("COLLATE")

4) Существует ли файл конфигурации CONFIG.FPW со строкой CODEPAGE=1251? И виден ли он из EXE? По SYS(2019) можно проверить какой именно файл конфигурации используется.

5) Используются действительно одни и те же таблицы или все-таки разные. Проверить можно по DBF("bank")
9 фев 04, 14:49    [527348]     Ответить | Цитировать Сообщить модератору
 Re: Результат выборки на разных машинах разный  [new]
golsa
Member

Откуда: Красноярск
Сообщений: 789
Все правильно - при вычислениях тип Numeric приводится к "машинному" double, поэтому сравнения типа f1+f2+f3 = f4 в общем случае не правомерно.
используй f1+f2+f3-f4 меньше 0.000001 по модулю (в твоем случае меньше копейки 0.01
10 фев 04, 04:30    [528169]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить