powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / sum в FP под DOS и SQL Server
25 сообщений из 37, страница 1 из 2
sum в FP под DOS и SQL Server
    #32792893
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю запрос

Код: plaintext
select sum(field1) from table1

в SQL Server и FP.

Содержание таблиц идентичное, размерность поля numeric(15, 2) в FP и (10, 2) в SQL Server. Запросы выдают разный результат.
Почему может быть такое?
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32792896
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
select sum(field1) from table1

а где волшебная фраза group by ?
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32793118
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi coolkenga!

Во-первых N(10,2) в MS SQL это не то-же самое что N(10,2) в фоксе!!! в фоксе
считается и точка, и минус за "содержимое" поля, в MS SQL насколько я в
курсе нет (в Oracle точно нет).

Во-вторых ты так и не сказала в чём именно проявляется "разность"
результатов.
В фоксе есть прибабах, когда подобный запрос (а также COUNT(SomeField)
запрос) для пустых таблиц, или таблиц заполненных только null-ами возвращают
пустой результат (0 строк!). Тогда как по стандарту должны таки дать одну
строку с 0 в ней.
Также может быть проблема в "понимании" фоксом разделителя (десятичной
точки) - сервер может и точку слать и запятую (от настроек сервера и
коннекции зависит) а фокс понимает лишь точку.

В-третьих ты не сказала как именно работаешь с сервером из FPD... Может там
собака зарыта?

2 Sergey - а тут Group by не нужен :) мы считаем результат по ВСЕМ записям.
Конечно если запрос приведен ДОСЛОВНО.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32793149
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может в FP в суммировании принимают участие записи, помеченные на удаление?
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32793331
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Igor Korolyov
Во-первых N(10,2) в MS SQL это не то-же самое что N(10,2) в фоксе!!! в фоксе
считается и точка, и минус за "содержимое" поля, в MS SQL насколько я в
курсе нет (в Oracle точно нет).

В этом поле нет больших (>99999) и отрицательных значений.

Igor Korolyov
Во-вторых ты так и не сказала в чём именно проявляется "разность"
результатов.

В Фоксе сумма получается больше, чем в SQL.

Igor Korolyov
В фоксе есть прибабах, когда подобный запрос (а также COUNT(SomeField)
запрос) для пустых таблиц, или таблиц заполненных только null-ами возвращают
пустой результат (0 строк!). Тогда как по стандарту должны таки дать одну
строку с 0 в ней.
Также может быть проблема в "понимании" фоксом разделителя (десятичной
точки) - сервер может и точку слать и запятую (от настроек сервера и
коннекции зависит) а фокс понимает лишь точку.
В-третьих ты не сказала как именно работаешь с сервером из FPD... Может там собака зарыта?

Таблицы 2 - одна на SQL сервере, другая dbf в FP, данные из таблицы переносятся один в один приложением.
Т.е. коннекта к серверу из FP нет, считаю отдельно в FP и в SQL.
Они обе непустые.

Igor Korolyov
2 Sergey - а тут Group by не нужен :) мы считаем результат по ВСЕМ записям.
Конечно если запрос приведен ДОСЛОВНО.

Да, дословно. CALC SUM ... TO выдает тот же самый результат, что и селект в фоксе, т.е бОльшую цифру, чем SQL.


Может в FP в суммировании принимают участие записи, помеченные на удаление?

Количество записей одинаково в обеих таблицах.
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32794261
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушай, посчитай столбиком. Я серьезно. Первое подозрение, это что твои таблицы на SQL-сервере и в DBF имеют разное содержимое. Одинаковое количество строк не гарантия одинакового содержимого.

Кроме того, vl2000 имел в виду записи помеченные как удаленные в DBF, но которые физически еще не удалены. В этом случае на результат суммирования в FoxPro будет влиять настройка

SET DELETED
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32794640
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Фоксе сумма получается больше, чем в SQL.
Ну если все приведено дословно то остается только попробовать:

Код: plaintext
select sum(field1) from table1 where !deleted()

Или что-то в таком духе, что советует Владимир - самый надежный способ...
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32795081
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi coolkenga!

Индекс есть? Попробуй пересоздать - может он побился и как-то влияет...
Также неплохо бы проверить (если возможно) и саму таблицу на предмет наличия
там "непонятных" записей - может повредилась сама таблица?
Какое именно расхождение (абсолютная его величина, а заодно и скажи
количество записей - чтоб оценить варианты) - т.е. не может ли это быть
ошибками округления или ещё чем-то таким?

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32795682
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМСлушай, посчитай столбиком. Я серьезно. Первое подозрение, это что твои таблицы на SQL-сервере и в DBF имеют разное содержимое. Одинаковое количество строк не гарантия одинакового содержимого.

Кроме того, vl2000 имел в виду записи помеченные как удаленные в DBF, но которые физически еще не удалены. В этом случае на результат суммирования в FoxPro будет влиять настройка

SET DELETED
Записей помеченных на удаление нет и запрос
Код: plaintext
select sum(field1) from table1 where !deleted()
выдает то же самое, что и без deleted.

Столбиком - трудновато, записей от 40 тыс до 86 тыс...

Igor KorolyovИндекс есть? Попробуй пересоздать - может он побился и как-то влияет...
Также неплохо бы проверить (если возможно) и саму таблицу на предмет наличия
там "непонятных" записей - может повредилась сама таблица?
Какое именно расхождение (абсолютная его величина, а заодно и скажи
количество записей - чтоб оценить варианты) - т.е. не может ли это быть
ошибками округления или ещё чем-то таким?
Индекса нет.
записей 86 тыс - расхождение 35,54
записей 40 тыс - расхождение 0,22
записей 77 тыс - расхождение 0,94.

Если это ошибки округления, как это проверить и обойти?
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32795923
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно так:
Код: plaintext
select sum(round(field1, 2 )) from table1
Ну, или не 2, а 5 ;-)
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32796130
kenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UrriПримерно так:
Код: plaintext
select sum(round(field1, 2 )) from table1
Ну, или не 2, а 5 ;-)
Это где? В FP?
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32796203
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да ;-)
И то же самое в SQL (ну, синтаксис другой, может быть). Если такие функции разрешены, конечно ;-)
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32796259
kenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UrriНу да ;-)
И то же самое в SQL (ну, синтаксис другой, может быть). Если такие функции разрешены, конечно ;-)
Все то же самое. Результат очень незначительно меняется в FP. Похоже придется и правда столбиком считать. :)
Спасибо за участие.
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32796518
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вспомнил - попробуйте поменять значения для установки:

Код: plaintext
SET DECIMAL TO
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32796667
кенга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergey ChВспомнил - попробуйте поменять значения для установки:

Код: plaintext
SET DECIMAL TO

А это разве это влияет не только на отображение знаков после запятой?
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32796687
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, чтоб меньше считать было, сожет, действительно данные как-то отгруппбаить (от group by)? А потом посмотреть, в каких именно группах несоответствие и уже по ним столбиком считать. (Это как количество взвешиваний в задаче про 9 шаров, из которых один тяжелее остальных.) ;-)
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32796772
кенга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UrriНу, чтоб меньше считать было, сожет, действительно данные как-то отгруппбаить (от group by)? А потом посмотреть, в каких именно группах несоответствие и уже по ним столбиком считать. (Это как количество взвешиваний в задаче про 9 шаров, из которых один тяжелее остальных.) ;-)
Да, похоже только это и остается, SET DECIMALS TO не помогло...
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32796836
кенга
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возник попутный вопрос - можно в FP отобрать записи по их конкретно заданным номерам?
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32796855
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если имеется ввиду номер записи в таблице и выборка по одной таблице
то как то так
select * from table1 into cursor mycursor where recno() in (1,2,3,4)
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32797065
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi coolkenga!

> записей 86 тыс - расхождение 35,54
> записей 40 тыс - расхождение 0,22
> записей 77 тыс - расхождение 0,94.

Вполне может быть ошибка округления. Попробуй такой запрос
SELECT * FROM table1 WHERE field1 # ROUND(field1,2) и посмотри вернёт ли он
чего-нить...
В принципе если бы поле было не Numeric а Double - то это 100% были бы
ошибки округления. У Double поля есть такая пренеприятная особенность - он
хранит одно значение, а показывает совсем другое :) Урезанное до нужного
числа знаков. А на разных операциях с участием такого поля и вылазит всякая
ерунда :)

На 86000 записей при точности в 2 знака после запятой, в самом неприятном
случае можно получить погрешность заметно больше чем есть у тебя :) Вплоть
до 429.99 :) Если скажем каждая запись физически имеет вид xxx.xx49999

Кстати в MS SQL числовой тип не соответствует ли фоксовому Double? В смысле
хоть и указано в формате что есть тока 2 знака, а реально он хранит большую
точность? Попробуй и в MS SQL запрос с округлением проверить. В крайнем
случае просто посчитай SUM(Field1*10000) и посмотри где будет сумма не
делящаяся на 100 нацело :) Там скорее всего и работает "невидимая"
дополнительная точность.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32797690
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Снова вспомнил! Как у Вас FPD 2.6 запускается? Как приложение или Вы проверяете запрос из окна COMMAND? Если как приложение - то надо как compact EXE плюс большую библиотеку (если делать большой EXE то тут у FPD есть проблема с армфметикой - считает действительно неправильно).


Последняя идея. Считать в ручную такое количество сложно...

Для VFP 8.0 провести запрос - если результат снова неправильный, то сравнить две таблицы на SQL и FPD - тогда видно будет, где проблема .

Good luck!
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32802574
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если количество строк совпадает (т.е. фактически одни и те же данные), то проверяется элементаторно.
Делаются два запроса: один к базе Фокса, другой на СКЛ сервер (основное условие, что бы была одинаковая сортировка. желательно по ключевому полю).
Потом результаты обеих запросов кидаем в Эхель (COPY TO .... TYPE XL5).
Совмещаем их на одном листе, проверяем совпадение строк, и если ключевое поле совпадает- пишем формулку = A1 - C1
где А1 и С1 ячейки с суммами.
Тянем формулу до саамого низу.
Смотрим где получился не 0.
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32802598
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vl2000Если количество строк совпадает (т.е. фактически одни и те же данные), то проверяется элементаторно.
Делаются два запроса: один к базе Фокса, другой на СКЛ сервер (основное условие, что бы была одинаковая сортировка. желательно по ключевому полю).
Потом результаты обеих запросов кидаем в Эхель (COPY TO .... TYPE XL5).
Совмещаем их на одном листе, проверяем совпадение строк, и если ключевое поле совпадает- пишем формулку = A1 - C1
где А1 и С1 ячейки с суммами.
Тянем формулу до саамого низу.
Смотрим где получился не 0.
Это Вы явно погорячились. Такое не пройдет по нескольким причинам:

1) В Excel предельно допустимое количество строк около 65500, а в таблицах 86000 записей. Просто не поместятся в Excel

2) Как Вы себе представляете визуальный просмотр такой тучи строк? В теории все прекрасно, но на практике глаза начнут слипаться уже к конце первой тысячи.

3) Наконец, существуют более простые способы сравнения содержимого 2 таблиц. Например, качаем таблицу с SQL сервера в FoxPro. Делаем объединение по FULL JOIN с таблицей DBF и смотрим разницу. В выборку попадают только те записи, где есть отличия. Правда, такой способ сравнения не учитывает разные форматы хранения данных в SQL и FoxPro. Конечно, если проблема именно в этом.
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32802688
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не думаю что погорячился.
Разбиваем запросы на два (будем сравнивать в 2-х файлах, например: 1-40000, 40001-80000).
Визуально сравнивать не надо вообще. Пишем формулу разности двух ячеек. Потом ставим фильтр на значения, отличные от 0.
Да, вначале так проверяем совпадение ключевого поля. Если в поле проверки все 0, ту же операцию проделываю по проблемному полю (по которому не идет сумма).
В некоторых случаях такой способ наиболее удобен.
По крайней мере я им иногда пользуюсь. Правда я работаю с InerBase через IBExpert. Из него напрямую передаю данные в Эхель, не знаю, возможно ли так сделать в MSSQL. Таким образом я исключаю влияние VFP на данные SQL сервера (при их получении).
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32803014
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi vl2000!

Пользоваться можно много чем :) Но по мне так из фокса заметно проще и
быстрее будет. Конечно если опыта в фоксе 0, то лучше и не соваться.

> В некоторых случаях такой способ наиболее удобен.

Именно что в некоторых.

> Таким образом я исключаю влияние VFP на данные SQL сервера (при их
> получении).

И добавляешь влияние Excel и IBExport или иной тулзы через которую получил
данные :) Опять же если ты хорошо знаком с фоксом, то ты ЗНАЕШЬ что и как
могло повлиять, если НЕ ЗНАКОМ с IBExport или иными средствами, то НЕ ЗНАЕШЬ
что в НИХ могло повлиять...

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / sum в FP под DOS и SQL Server
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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