Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2008, 17:36   #1
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
Вопрос сдвиг данных в dbgrid'e на 1 вверх

Помогите справиться с такой задачей.На форме есть 2 dbgrida.
В одном-таблица из access'a с 8 столбцами (подключаюсь через ado).Во втором нужно изобразить ту же таблицу, что и в первом,только данные должны быть сдвинуты вверх на 1.Последняя запись = разности 2 последних ячеек из 1 таблицы.
допустим,в первой таблице числа:
1
2
5
во второй должны быть:
2
5
3
Может,у кого-нибудь есть идеи как это реализовать?
kate158 вне форума Ответить с цитированием
Старый 18.08.2008, 18:44   #2
Rik
Форумчанин
 
Аватар для Rik
 
Регистрация: 28.07.2007
Сообщений: 361
По умолчанию

Без переписывания компонента никак, и то, переписывание не даст гарантии корректной работы, поэтому геморрой с реализацией идеи может не оправдать конечный результат. Рекомендую от идеи отказаться....
TDBGrid происходит от TCustomDBGrid, который происходит от TCustomGrid. В TCustomGrid есть свойство RowHeights[..] в разделе protected, можно создать ту же иерархию компонентов от TCustomGrid, с тем же кодом но свойство RowHeights можно перенести в раздел public, тогда верхнюю строку таблицы можно просто скрыть через RowHeights.

Последний раз редактировалось Rik; 18.08.2008 в 19:17.
Rik вне форума Ответить с цитированием
Старый 18.08.2008, 19:58   #3
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

Rik,может возможно сделать это с помощью запросов на sql?

Последний раз редактировалось kate158; 19.08.2008 в 09:03.
kate158 вне форума Ответить с цитированием
Старый 22.08.2008, 19:53   #4
Rik
Форумчанин
 
Аватар для Rik
 
Регистрация: 28.07.2007
Сообщений: 361
По умолчанию

С SQL тоже не выйдет. Чтобы рулить SQL запросом, нужно знать, какая запись с определенным ID находится в верхней строке DBGrid'a. В DBGrid'е отображаются данные из локального буфера DataSet'а. Какая запись локального буфера отображается в текущий момент в верхней строке DBGrid'a определить невозможно(если курсор стоит не на верхней записи). Тяжело реализовать механизм, при котором при прокрутке окна(не DataSet'a а самого окна, тут нужно перехватить сообщения о прокрутке, посылаемые окну, а в DBGrid'e прокрутка окна может происходить вообще без посылки сообщений), должны обновиться данные в другой таблице. Если даже это бы и удалось, нагрузка на ресурсы машины будет непомерная, а про сеть я уж и не говорю...

Последний раз редактировалось Rik; 22.08.2008 в 19:57.
Rik вне форума Ответить с цитированием
Старый 22.08.2008, 21:15   #5
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

добавляешь в таблицу поле порядковое.... Нумерация строк... И используешь 2 Query.... Берешь номер строки,где активная строка,а во втором запросе деаешь запрос записей, в которЫх порядковый номер больше номера из первого запроса....
для подсчета разности нужно подумат отпишу посже...
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Старый 22.08.2008, 22:20   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Pitbull, позволю взять на себя смелость (или наглость ;-) ) ответить за kate158
Насколько я понимаю, задача уже решена (Виталий aka Stilet решил её). Решение здесь, на форуме. И, если я правильно понял, то решили её на клиенте (что и проще и понятнее). SQL крайне неудобная штука, когда возникает необходимость обрабатывать взаимодействие строк (rows). Только не надо мне рассказывать, что с помощью SQL можно сделать всё и даже чуть больше.
я не буду спорить. Есть даже любители решать сложные задачи именно с помощью навороченного SQL кода :-))
а я всегда стоял за то, чтобы решение было МАКСИМАЛЬНО простым... Зачем закручивать шуруп, когда можно забить гвоздь? -)

оп-с.. сорри за всё вышенаписанное. что-то меня на графоманию пробило.
Просто я хотел сказать, мой совет — мужики, не ломайте голову над уже решённой задачей! (По крайней мере, пока сама kate158 не попросит о другом...)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоить значение поле в DBGrid'e компоненту DBLookupComboBox2 фЁдОр БД в Delphi 14 07.09.2012 14:26
циклический сдвиг массива goacher Общие вопросы C/C++ 4 28.05.2008 20:11
циклический сдвиг массива goacher Паскаль, Turbo Pascal, PascalABC.NET 4 27.05.2008 22:26
как с помощью TScrollBar перемещать содержимое TMemo вверх или вниз Sanprof Общие вопросы Delphi 3 04.03.2008 00:39
Сдвиг файла OrdJONY Общие вопросы Delphi 13 21.12.2007 22:22