![]() |
|
|
![]()
|
|
| tikitiki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 10.5.2005 Репутация: нет Всего: нет |
Мне очень нужен ответ по БД. Я опишу ситуацию без кода. Код приводить не хотелось бы, он
туманный на первый взгляд. Но код я много раз проверял и он устраивает вообще-то меня. У меня БД paradox. А собственно ошибка в DBGrid, когда выдаёт сумму по записям, отобранным по критерию- в данном случае по промежутку даты и времени. Ошибка, что для меня странно, появляется только в некоторых записях. Да, ещё -использовал в запросе Union, и не один раз. Запрос требованиям LocalSQL отвечает,что мне и нужно. До этого у меня подобных проблем с paradox не было(пока не нужно было сумму вычислять таким способом). Пробовал изменить по другому код много раз-там результаты ещё меньше устраивали. Т.е. логика программы меня устраивает, всё вроде в пределах нормы. Только много констант и переменных. В одном из faq вычитал, что в delphi(версия видимо 6) есть баг с константами при передаче в другую форму (В др. форме потом константа близка, но дробная часть увы). Но я константы по-моему не передавал. Так в чём же может быть причина-почему ошибка в отдельных записях? Она по идее должна быть везде, т.к. запрос я делал единообразно. И какие могут быть варианты ошибки? |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
Что бы дать хоть какойто вразумительный ответ хотелось бы увидеть вашу БД и запрос, который вы пытаетесь выполнить.
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| tikitiki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
Не понял. Summa1 вы считаете в SQL причем здесь грид??? проверяйте sql. Что касается вывода общей не достающей суммы, то все правильно, что она у вас скачет, т.к. вы присваеваете значение этому полю в OnCalcFields, а это событие сробатывает каждый раз как грид пытается получить данные для отображения.
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| tikitiki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 10.5.2005 Репутация: нет Всего: нет |
Summa1 -есть назв. столбца в нижнем гриде (и в sql). OnCalcFields я всё-равно не пойму как заставляет скакать сумму. В моём случае OnCalcFields дожно по идее откликаться только на нажатие кнопки Считать. Сумму можно как-то убрать из OnCalcFields? А SQL я много раз проверял, хоть убей -всё правильно, да и если там и есть небольшая ошибка-она не должна такие промахи делать по моим подсчётам. В SQL единственное где я могу мне кажется ошибаться-это когда разницу переменных(или в самом коде) типа DateTime вычисляю. Я правильно понимаю, что эта разница мне выдаётся в днях и дробной части дня(или там что ещё др.)?
|
|||
|
||||
| tikitiki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 10.5.2005 Репутация: нет Всего: нет |
выводить в грид столбец с таким именно именем,вычисленный так как написано в SQL перед AS Summa1. |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
Это я понимаю, просто вы так утверждали, что это ошибка DBGrid -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
Если у датасета AutoCalcFields True, то событие OnCalcFields дергается:
· при открытии датасета · при переходе датасета в состояни dsEdit · Передача фокуса ввода другому компоненту или другому столбцу (для сетки) при наличии изменений в текущей ячейке Если False, то: · при открытии датасета · при переходе датасета в состояни dsEdit · Запись извлекается из БД А теперь посмотри, что у тебя написно в обработчике OnCalcFields для Query1. Там у тебя есть строчка очень интересная:
А т.к. OnCalcFields дергается очень часто, то и сумма у тебя меняется в зависимости от того на какой записе ты стоишь в момент возникновения события -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| tikitiki |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 10.5.2005 Репутация: нет Всего: нет |
Очень-очень хорошо!!!!!!! Спасибо!!!!! Я учту и попробую обязательно исправить.
Мне очень хотелось ещё узнать, что же на самом деле получается при вычитании одной из др. переменной типа DateTime? Я часто этим типом пользуюсь, но что при вычитании получается-я догадываюсь чисто интуитивно. В Help ответа чёткого не нашёл. Пробовал экспериментировать. Делал MessageBox и выводил туда. Есть функция, которая хорошо выводит разницу в днях когда переменные типа DateTime(может Date-сейчас с ходу не скажу). Там ровное количество дней-целое число получается- отлично(результат типа Date!!!!!!! однозначно получается). Но перепробовал много функций, чтоб результат получить типа DateTime, чтоб и дни и часы получить. Но такой функции похоже нет. Я предполагаю, что разница в этом случае получается вида, например 56,234 дней (т.е. целых и дробных дней). И у меня получается использовать, но в чём я сомневаюсь, когда нужно попасть в промежуток времени -я беру промежуток времени, но на границах прмежутка-какие часы стоят-вопрос(я опять же думаю, что там 56,234 дней стоит, т.е. это в Delphi замена для дней и часов таким образом реализуется). Коробит-с временем же в Delphi должна быть ясность. В Helpe правда есть ещё одно место где объясняется про это-но я не понял, что за странную величину они применяют- какую-то дробную(хотя я математику не боюсь). И ещё интересный вопрос-какая вероятность найти в инет эту информацию. |
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
Модератор: Пожалуйста, один топик - один вопрос.
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |