Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибки суммы в отдельных записях, Почему ошибки только в отдельных записях 
:(
    Опции темы
tikitiki
Дата 3.9.2005, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Мне очень нужен ответ по БД. Я опишу ситуацию без кода. Код приводить не хотелось бы, он
туманный на первый взгляд. Но код я много раз проверял и он устраивает вообще-то меня.
У меня БД paradox. А собственно ошибка в DBGrid, когда выдаёт
сумму по записям, отобранным по критерию- в данном случае по промежутку даты и времени.
Ошибка, что для меня странно, появляется только в некоторых записях.
Да, ещё -использовал в запросе Union, и не один раз. Запрос требованиям LocalSQL отвечает,что мне и нужно.
До этого у меня подобных проблем с paradox не было(пока не нужно было сумму вычислять таким способом).
Пробовал изменить по другому код
много раз-там результаты ещё меньше устраивали.
Т.е. логика программы меня устраивает, всё вроде в пределах нормы. Только много констант и переменных.
В одном из faq вычитал, что в delphi(версия видимо 6) есть баг с константами при передаче в другую форму
(В др. форме потом константа близка, но дробная часть увы). Но я константы
по-моему не передавал.
Так в чём же может быть причина-почему ошибка в отдельных записях? Она по идее должна быть
везде, т.к. запрос я делал единообразно. И какие могут быть варианты
ошибки?


--------------------
PM   Вверх
Alex
Дата 3.9.2005, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Что бы дать хоть какойто вразумительный ответ хотелось бы увидеть вашу БД и запрос, который вы пытаетесь выполнить.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
tikitiki
Дата 5.9.2005, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



В форме с заголовком недополученный доход за промежуток времени
в поля начальная дата и конечная дата нужно поставить две даты в формате DateTime(можно например 10.01.01 12:00) и нажать кнопку Считать. В нижнем левом гриде поле с именем над ним Summa1 и выдаёт
ошибку. Дату лучше ввести с 2000 по 2006 гг(т.е. 01.01.00 12:00 и 01.01.06 12:00) для эксперимента.
Там ещё одна жутко невероятная ошибка -в этом же гриде поля Summa...
меняют самостоятельно значения просто при передвижении бегунка грида мышью (и в поле недополученный доход тоже итог меняется при этом, который не должен меняться), что не должно происходить. Но это я пока и за ошибку не считаю.
Мне вообще-то нужно получить только значение в поле недополученный доход, т.е. гриды не осень нужны -я в них пытался этот недополученный доход получить). Цель вообще недополученного дохода-это рассчитать недополученный доход за промежуток времени от эксплуатации гостиничных номеров(типы номеров различаются по цене, расчёт за сутки производится в определённое время суток), т.е. посчитать какие места и в каких типах номеров за этот промежуток времени пустовали, умножать на цену номера, умножать на время простоя попавшего в промежуток времени(время простоя я считал с пом. разницы перемен. типа DateTime), сложить полученное для всех номеров вместе взятых попавших в этот промежуток времени.
Сильно извиняюсь, что растянул.

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  ______WinRAR.rar 44,69 Kb


--------------------
PM   Вверх
Alex
Дата 5.9.2005, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Не понял. Summa1 вы считаете в SQL причем здесь грид??? проверяйте sql. Что касается вывода общей не достающей суммы, то все правильно, что она у вас скачет, т.к. вы присваеваете значение этому полю в OnCalcFields, а это событие сробатывает каждый раз как грид пытается получить данные для отображения.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
tikitiki
Дата 5.9.2005, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Summa1 -есть назв. столбца в нижнем гриде (и в sql). OnCalcFields я всё-равно не пойму как заставляет скакать сумму. В моём случае OnCalcFields дожно по идее откликаться только на нажатие кнопки Считать. Сумму можно как-то убрать из OnCalcFields? А SQL я много раз проверял, хоть убей -всё правильно, да и если там и есть небольшая ошибка-она не должна такие промахи делать по моим подсчётам. В SQL единственное где я могу мне кажется ошибаться-это когда разницу переменных(или в самом коде) типа DateTime вычисляю. Я правильно понимаю, что эта разница мне выдаётся в днях и дробной части дня(или там что ещё др.)?


--------------------
PM   Вверх
tikitiki
Дата 5.9.2005, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Цитата
Не понял. Summa1 вы считаете в SQL причем здесь грид???
Да. Забыл сказать. Если в SQL я использую AS Summa1 -это заставляет
выводить в грид столбец с таким именно именем,вычисленный так как написано в SQL перед AS Summa1.


--------------------
PM   Вверх
Alex
Дата 5.9.2005, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Цитата(tikitiki @ 5.9.2005, 21:50)
Да. Забыл сказать. Если в SQL я использую AS Summa1 -это заставляет
выводить в грид столбец с таким именно именем,вычисленный так как написано в SQL перед AS Summa1.

Это я понимаю, просто вы так утверждали, что это ошибка DBGrid


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Alex
Дата 5.9.2005, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Если у датасета AutoCalcFields True, то событие OnCalcFields дергается:
· при открытии датасета
· при переходе датасета в состояни dsEdit
· Передача фокуса ввода другому компоненту или другому столбцу (для сетки) при наличии изменений в текущей ячейке
Если False, то:
· при открытии датасета
· при переходе датасета в состояни dsEdit
· Запись извлекается из БД

А теперь посмотри, что у тебя написно в обработчике OnCalcFields для Query1. Там у тебя есть строчка очень интересная:
Код

v:= Query1Summa4.Value;
DBEdit1.Text:=FloatToStr(v)+'р.';

А т.к. OnCalcFields дергается очень часто, то и сумма у тебя меняется в зависимости от того на какой записе ты стоишь в момент возникновения события


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
tikitiki
Дата 6.9.2005, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Очень-очень хорошо!!!!!!! Спасибо!!!!! Я учту и попробую обязательно исправить.
Мне очень хотелось ещё узнать, что же на самом деле получается при вычитании
одной из др. переменной типа DateTime? Я часто этим типом пользуюсь, но что
при вычитании получается-я догадываюсь чисто интуитивно. В Help ответа
чёткого не нашёл. Пробовал экспериментировать. Делал MessageBox и выводил
туда. Есть функция, которая хорошо выводит разницу в днях когда переменные
типа DateTime(может Date-сейчас с ходу не скажу). Там ровное количество дней-целое
число получается- отлично(результат типа Date!!!!!!! однозначно получается).
Но перепробовал много функций, чтоб результат получить типа DateTime, чтоб и дни
и часы получить. Но такой функции похоже нет. Я предполагаю, что разница
в этом случае получается вида, например 56,234 дней (т.е. целых и дробных
дней). И у меня получается использовать, но в чём я сомневаюсь, когда
нужно попасть в промежуток времени -я беру промежуток времени, но
на границах прмежутка-какие часы стоят-вопрос(я опять же думаю, что там
56,234 дней стоит, т.е. это в Delphi замена для дней и часов таким образом реализуется).
Коробит-с временем же в Delphi должна быть ясность. В Helpe правда есть ещё одно
место где объясняется про это-но я не понял, что за странную величину они применяют-
какую-то дробную(хотя я математику не боюсь).

И ещё интересный вопрос-какая вероятность
найти в инет эту информацию.




--------------------
PM   Вверх
Alex
Дата 6.9.2005, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Модератор: Пожалуйста, один топик - один вопрос.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.3376 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.