0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 62
|
|
1 | |
Обновление данных в DBgrid16.04.2015, 01:58. Показов 6463. Ответов 24
Метки нет Все метки)
(
Доброй ночи! Delphi + Access 2010. Забегая вперед, скажу, что вычисляемые поля сделанные в БД - это обдуманный подход, который в моем случае наиболее подходящий. В общем ситуация такая, в таблице имеются 4 вычисляемых поля. Данные изменяются через программу напрямую в DBGRID. После изменения данных, в базе данных вычисляемые поля срабатывают, пересчитывают результат, но в DBGRID значения старые. Вопрос вот в чем... Какое событие отвечает за изменение данных в ячейке и каким образом обновить данные конкретно в редактируемой строке? Сразу хочу сказать, что после изменения данных, пользователь может нажать enter, может стрелками перейти в вниз или вверх, а может и вообще кликнет мышкой в другом месте, а быть может изменив их, ничего не сделает, а просто закроет программу. Как это все учесть? Спасибо!
0
|
|
16.04.2015, 01:58 | |
Ответы с готовыми решениями:
24
Обновление данных в dbgrid Обновление данных в DBGrid после изменения данных Обновление выводимых данных в DBGrid DBGRID сложная проверка на обновление данных |
пофигист широкого профиля
4712 / 3147 / 858
Регистрация: 15.07.2013
Сообщений: 18,129
|
|
16.04.2015, 02:07 | 2 |
Никакого такого события нет, ибо в "ячейке" нет никаких данных и отродясь никогда не было.
После изменения данных в БД единственный способ отобразить изменения в "ячейках" - это перечитать БД заново. Никаким.
0
|
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 62
|
|
16.04.2015, 02:16 [ТС] | 3 |
А на каком этапе обновлять БД? Я же должен как-то понять, когда данные поменялись. И ещё... Ведь база будет расти. Если после каждого изменения перечитывать, не будет ли она через пол года перечитываться по пол часа?
0
|
пофигист широкого профиля
4712 / 3147 / 858
Регистрация: 15.07.2013
Сообщений: 18,129
|
|
16.04.2015, 02:33 | 4 |
Когда обновлять вывод базы в DBgrid решает обычно пользователь. Если данные в базе поменялись в результате выполнения твоей программы, то ты и так знаешь когда обновить показ их в DBGrid. Если изменения сделаны не через твою программу, то тебе об этом никто не сообщит. Даже не надейся.
Может и будет, если ни она, ни программа для работы с ней не продумана заранее.
0
|
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 62
|
|
16.04.2015, 02:46 [ТС] | 5 |
Пользователь меняет данные в гриде по подобию таблицы Excel. Изменил значение в ячейке и пошел дальше, а может и не пошел, изменив только одно значение, после чего, должны сразу перечитаться 4 вычисляемых поля. Просто я подумал, будет к примеру 500 000 записей, для Access я так думаю будет не так так просто вытаскивать данные с такой скоростью.
0
|
пофигист широкого профиля
4712 / 3147 / 858
Регистрация: 15.07.2013
Сообщений: 18,129
|
|
16.04.2015, 02:53 | 6 |
Ну так пусть он и работает в Ёкселе. Зачем ты ему пытаешься предложить тухлый вариант с БД?
Ну и. Разве какой-нибудь пользователь работает с Ёкселевским файлом с таким количеством строк 500 000?
0
|
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 62
|
|
16.04.2015, 03:06 [ТС] | 7 |
Вот я приложил два скрина. На первом, слева выезжает панель с которой по двойному клику добавляется продукт, по умолчанию с весом 100 грамм, соответственно с БЖУ, рассчитанным на 100 грамм. На втором скрине меняю на 50, соответственно в БД, в вычисляемых полях, данные пересчитались, у меня пока нет. Но дело в том, что с самой левой стороны в гриде идет разбивка по дням, где данные по БЖУ суммируются по результатам моих вычисляемых полях. Тут Excel никак не предложить, тут все очень сложно. Это один из элементов, а в программе ещё идут тренировки, антропометрия, графическая статистика, завязанная на эти данные. Я вот думаю... может сделать кнопку, нажав на которую все данные пересчитаются... Так наверно разумнее всего. Просто намного круче было бы, если бы данные менялись он-лайн.
0
|
пофигист широкого профиля
4712 / 3147 / 858
Регистрация: 15.07.2013
Сообщений: 18,129
|
|
16.04.2015, 03:19 | 8 |
Зачем приложил? То что ты хочешь понятно и без скриншотов. То что тебе нужно делать чтобы обновлять показ данных я тоже уже сказал.
Добавлено через 1 минуту Ах да. Забыл напомнить что волшебная палочка существует только в сказках.
1
|
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 62
|
|
16.04.2015, 03:29 [ТС] | 9 |
Ну я к тому, что ты говоришь о том, что может программа или бд не продуманна и что быть может лучше работать в excel. Тут только бд. И рост данных постоянно будет, так как на каждый день указываются продукты. Эта таблица хочешь не хочешь, а будет "пухнуть". В общем спасибо за ответ. Главное, что я понял, так это то, что не вытащить отдельную строку с обновленными данными. Ну я могу конечно взять id записи, пробежаться по таблице и вынести эти обновленные поля... Но тут быстрее будет переоткрыть кверик, как мне кажется. В общем нужно делать кнопку. Нажал - увидел обновленные данные, не нажал - не увидел. Спасибо за ответы!
0
|
16.04.2015, 09:53 | 10 |
давай немного учебника
вводные 1. на экран всегда выводится ВЫБОРКА из БД. 2. человеку таблица более тысячи, ну двух тысяч строк никогда не нужна. Если все правильно спроектировано, строк вообще 10-100 3. процедура датасета Refresh может считать (и обновить в гриде, о!) одну нужную строку ну и очевидные вещи - обновлять суммы после добавления в заказ - не слишком тяжелая операция
0
|
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 62
|
|
16.04.2015, 12:06 [ТС] | 11 |
Из всего того, что ты написал, у меня в голову только одна идея возникла. Создать ещё одну таблицу, в которую будут скидываться данные, после закрытия программы. Своего рода архив. А на счет Refresh спасибо! Я думал он обновляет весь набор данных. Но опять же, а как понять, что данные поменялись? Можно конечно условием на dataset.modify, но это условие должно же запустить какое-то событие.
0
|
16.04.2015, 12:22 | 12 | ||||||||||
блииин
только не чем тебе существующая таблица не угодила? надо почитать что-нибудь про базы данных вообще, про параметры запросов задумайся:
для этого не нужно никаких еще одних таблиц...
0
|
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 62
|
|
16.04.2015, 12:58 [ТС] | 13 |
Да я все это знаю про базы данных и запросы. Я веду к тому, что критерий отбора в первом случае будет из 100 строк, а через год уже из 100 000 строк. Вот в чем дело. И я сомневаюсь, что рефреш будет так же быстро работать, как сейчас. Поэтому я и вижу один единственный выход - это архивация в отдельную таблицу старых данных, которые при необходимости будут подтягиваться из другой таблы, в соответствии с запросом. У меня по сути стандартная структура - "голова" и "тело". В одной дата, время и несколько числовых полей, а в другой уже основная информация связанная по id из первой таблицы.
0
|
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 62
|
|
16.04.2015, 13:06 [ТС] | 14 |
Скрин
0
|
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 62
|
|
16.04.2015, 13:26 [ТС] | 16 |
Ого! Ну тогда у меня больше нет вопросов. Спасибо!
![]()
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
16.04.2015, 13:30 | 17 |
Конечно не будет если вся запрашиваемая выборка целиком фётчится на сторону клиента, в то время как для показа/изменения в данный момент нужна лишь малая часть выборки.
И вот чтобы этого не происходило, нужно с умом и полной серьезностью подходить к вопросу о выборе типа курсора НД. В случае с СУБД Access выбор невелик - серверные типы курсоров напрочь отсутствуют (в некоторых файл-серверных СУБД они могут только эмулироваться драйверами соответствующих СУБД-клиентов), что рано или поздно заведет решение проблемы в тупик. Потому пока не поздно нужно переводить свое приложение на платформу полноценной клиент-серверной СУБД.
0
|
0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 62
|
|
16.04.2015, 13:48 [ТС] | 19 |
Я с большим удовольствием бы использовал MySQL с хранимыми процедурами, но это нужно арендовать vps/vds. При минимальных возможностях - 565р. в месяц. Сумма конечно же не большая, но тем не менее, для проекта, который себя ни как не зарекомендовал, пока рановато. Но в будущем планирую. Правда потом придется ещё поплясать с миграцией данных тех, которые у пользователя есть в БД.
0
|
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
|
|
16.04.2015, 14:07 | 20 |
Сам SQL ни причем.
Вопрос в том, кто и как исполняет клиентские SQL-запросы В СУБД Access нет автономного высокопроизводительного SQL-сервера, потому его роль берет на себя драйвер-посредник с убогими (в сравнении с полноценными SQL-серверами) возможностями. Добавлено через 6 минут И ничего ведь не арендуешь при этом ?) Ну так а какая нафих разница - хранить там базу Мускула или базу Access ? Придет время и необходимость - купишь/арендуешь серверные ресурсы и уберешь туда базу.
0
|
16.04.2015, 14:07 | |
16.04.2015, 14:07 | |
Помогаю со студенческими работами здесь
20
Обновление данных в строке DbGrid-а при клике на эту строку DBGrid и обновление.
Обновление DBGrid Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |