powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / sum в FP под DOS и SQL Server
37 сообщений из 37, показаны все 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
sum в FP под DOS и SQL Server
    #32806864
vl2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Igor Korolyov!

>>Пользоваться можно много чем :)
А я разве против. Согласен. :)

>>Но по мне так из фокса заметно проще и быстрее будет.
Тебе- может и да. Но вопрос то не ты задавал.

>> Конечно если опыта в фоксе 0, то лучше и не соваться.
У человека в FOXе не получается найти причину. Я предложил другой способ. Если он не помогает- предлагайте другой.

>> В некоторых случаях такой способ наиболее удобен.
>Именно что в некоторых.
А я и не говорил об универсальном методе.

>И добавляешь влияние Excel и IBExport или иной ...
А что мешает это сразу проверить? Сравнить итоговую сумму в Эхеле и сделать Select SUM(..) на сервере. Совпали- можно проверять дальше, нет- отказаться.
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32808618
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi vl2000!

> >>Но по мне так из фокса заметно проще и быстрее будет.
> Тебе- может и да. Но вопрос то не ты задавал.

Странная у тебя логика - т.е. если бы я спросил скажем в форуме по IB или
Excel как мне сравнить то-то и то-то, ты мне посоветовал бы воспользоваться
фоксом :)
Наверное сюда пишут люди знакомые именно с фоксом, и рассказывать им как это
можно сделать через IBExpert, которого у них к тому-же нету и вряд-ли когда
будет... IMHO что-то тут с логикой не в порядке :(

> У человека в FOXе не получается найти причину. Я предложил другой
> способ. Если он не помогает- предлагайте другой.

Может быть кое кто будет внимательно читать ВСЁ обсуждение?

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32809990
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я тут выгрузила данные из таблицы SQL Server-а в dbf (dbase IV).
Посчитала сумму по этому полю в FPD, получилась такая же как и в SQL, потом посмотрела у каких записей значение поля не совпадает - оказалось, что у некоторых записей значение поля уменьшилось на 0,01. Поэтому общая сумма и не совпадает.
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32810222
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да будет так! Теперь выясняем причину, почему обрезались.

Предлагаю вариант: округление в одном случае и отбрасывание третьей цифры и далее после запятой в другом.
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32810250
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я поменяла тип поля в SQL Servere (увеличила разрядность - decimal (10,3)) и еще раз перенесла данные из FPD.

Получилось для таких записей

...,07 -> ...,069
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32810254
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UrriДа будет так! Теперь выясняем причину, почему обрезались.

Предлагаю вариант: округление в одном случае и отбрасывание третьей цифры и далее после запятой в другом.
Это где? Настройки драйвера VFP?
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32810340
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
coolkenga UrriДа будет так! Теперь выясняем причину, почему обрезались.

Предлагаю вариант: округление в одном случае и отбрасывание третьей цифры и далее после запятой в другом.
Это где? Настройки драйвера VFP?
Или в хранимке уже в SQL Server-e?
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32810465
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где точно, не могу сказать. Не знаю я SQL Server. Видимо, в нем самом.
Подозреваю, несмотря на то, что тип поля на SQL сервере прописан как (10,2), данные физически хранятся реально с большей точностью. И округляются только на экранчике...

...Так, посмотрел в bol, судя по разделу "decimal и numeric", так и есть.

Код: plaintext
1.
2.
3.
4.
5.
Precision  Storage bytes 
 1  -  9                 5  
 10 - 19                 9  
 20 - 28                13  
 29 - 38                17  
Прав был Игорь Королев.

Как бороться? Округлять принудительно там, где нужно.
Перед сохранением данных (?).
После всяких арифметических операций (?).
Перед тем, как выполнять арифметические операции (?).

Впрочем, не стоит гадать - можно спросить в форуме про SQL Server, как правильно работать с этим типом данных.
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32810490
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UrriГде точно, не могу сказать. Не знаю я SQL Server. Видимо, в нем самом.
Подозреваю, несмотря на то, что тип поля на SQL сервере прописан как (10,2), данные физически хранятся реально с большей точностью. И округляются только на экранчике...

...Так, посмотрел в bol, судя по разделу "decimal и numeric", так и есть.

Код: plaintext
1.
2.
3.
4.
5.
Precision  Storage bytes 
 1  -  9                 5  
 10 - 19                 9  
 20 - 28                13  
 29 - 38                17  

Странно, откуда же берется эта точность. И почему не у всх записей...
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32810589
coolkenga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Закачала ту же таблицу DTS (драйвер MS Visual Foxpro) - все нормально с этими записями....
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32814902
Chuveljov Andrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне в голову одна идея пришла? А на каком процессоре считали результаты досовского фокса?

___________________
Всё вышеизложенное есть моё частное мнение и не претендует на полноту изложения.
...
Рейтинг: 0 / 0
sum в FP под DOS и SQL Server
    #32815504
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ошибки округления. Для внутренних вычислений Fox преобразует numeric в double. Чтобы убедиться выполни
select sum(round(field1*100)) from table1
получишь целое в 100 раз большее (короче в копейках) туже сумму что и в Орасле (в рублях). double не искажает целые числа!
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / sum в FP под DOS и SQL Server
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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