Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2015.05.03;
Скачать: CL | DM;

Вниз

Как изменить результаты запроса в DbGrid?   Найти похожие ветки 

 
Novicer   (2014-02-13 00:59) [0]

Здравствуйте мастера! Подскажите плиз возможно ли такое? Хочу сделать запрос, числовой результат отобразить в DbGrid и потом умножить например на 3 и результатом заменить пред.значение или арифм.операции можно заложить в сам запрос и отобразить уже в гриде готовый результат?


 
Inovet ©   (2014-02-13 01:23) [1]

Или в запрос или вычисляемое поле в Датасет, смотря что надо. В Гриде данных нет.


 
Германн ©   (2014-02-13 01:41) [2]


> Inovet ©   (13.02.14 01:23) [1]
> В Гриде данных нет.

ТС в это не верит, хоть и соглашается. :)
А изменить результаты именно в гриде можно и еще одним способом. TField.OnGetText позволяет вывести в гриде (да и в любом DBAware компоненте) хоть чёрта, хоть с рогами, хоть без оных. Не говоря уж об утроенном результате. :)


 
Юрий Зотов ©   (2014-02-13 02:06) [3]

select field1 * 3 from ...

Это?


 
Novicer   (2014-02-13 12:33) [4]

Спасибо за советы! Для подмены данных использовал метод отрисовки на канве описанный тут: http://delphiworld.narod.ru/base/dbgrid_possibilities.html в разделе "Как заменить данные в столбце компонента TDBGrid?" В DBGridDrawColumnCell все отлично работает, после выполнения запроса вижу в гриде измененные данные, но если кликнуть по строке с ними то происходит отрисовка старых данных и они накладываются друг на друга :( Как можно побороть,где перехватить(изменить)?


 
Inovet ©   (2014-02-13 12:40) [5]

> [4] Novicer   (13.02.14 12:33)

Ты выбрал самый идиотский для твоего случая метод.


 
Novicer   (2014-02-13 12:48) [6]

Как сделать лучше? Применить TField.OnGetText? Можно пример?


 
Novicer   (2014-02-13 13:05) [7]

Попробовал сделать как написано тут: http://drkb3.narod.ru/22034.htm
Получаю ошибку при компиляции:Undeclared identifier: "TField"  :(


 
Novicer   (2014-02-13 13:11) [8]

И где потом вызывать указанную процедуру, в DBGrid1DrawColumnCell?


 
Inovet ©   (2014-02-13 13:16) [9]

> [7] Novicer   (13.02.14 13:05)
> Undeclared identifier: "TField"  :(

Создать поле в дизайнтайм, назначить нужному полу обработчик. Тебе точно нужен именно OnGetText? Впрочем, да... Эта... Если просто отобразить результат вычисления — вычисляемое поле или в запросе, но я уже отвечал. А этот метод надо понимать для чего использовать, возможно вместе с OnSetText.


 
Ega23 ©   (2014-02-13 13:24) [10]


> Как сделать лучше?


[3]


 
Novicer   (2014-02-13 13:27) [11]

Поля для грида созданы, но в Events только событие PopUpMenu


 
Novicer   (2014-02-13 13:29) [12]

>Ega23 Но тогда запрос отобразит значение лишь одного поля,пусть и пересчитанное, а прописывать вместо * все поля долго...


 
Ega23 ©   (2014-02-13 13:33) [13]

И что? Отделяй мух от котлет.
И про MVC внимательно почитай
ru.wikipedia.org/wiki/Model-View-Controller


 
Inovet ©   (2014-02-13 13:41) [14]

> [11] Novicer   (13.02.14 13:27)
> Поля для грида созданы

В гриде данных нет.


 
Inovet ©   (2014-02-13 13:42) [15]

> [12] Novicer   (13.02.14 13:29)
> а прописывать вместо * все поля долго

А надо взять это в привычку.


 
Novicer   (2014-02-13 13:44) [16]

Уже сам понял что для нужного Квери надо было поля добавить, там обработчик на событие OnGetText можно повесить вижу  :)


 
Ega23 ©   (2014-02-13 13:45) [17]


> а прописывать вместо * все поля долго...


Если ты собираешься программированием зарабатывать на жизнь, то выучи навсегда простое правило: звёздочку можно использовать только в отладочных целях, либо в конструкции count(*).


 
Inovet ©   (2014-02-13 13:50) [18]

> [17] Ega23 ©   (13.02.14 13:45)
> звёздочку можно использовать только в отладочных целях,
> либо в конструкции count(*).

и ещё в

> [3] Юрий Зотов ©   (13.02.14 02:06)
> select field1 * 3 from ...


 
Inovet ©   (2014-02-13 13:52) [19]

> [16] Novicer   (13.02.14 13:44)
> там обработчик на событие OnGetText

Не ищи там, где светлее, ищи там, где лежит.


 
Ega23 ©   (2014-02-13 13:53) [20]


> и ещё в


Это уже арифметический оператор, семантика другая.


 
Novicer   (2014-02-13 13:57) [21]

>Ega23 На жизнь не получится, опыта маловато да и слишком конкуренция большая. Это так хобби, для души... :)


 
Ega23 ©   (2014-02-13 13:58) [22]


>  Это так хобби, для души... :)


Тогда - тем более.


 
Novicer   (2014-02-13 14:03) [23]

То ли лыжи не едут,то ли.. Никак не соображу как с OnGetText на лету менять значения ячеек в нужной колонке данных после выполнения запроса? Или это надо в процессе делать?


 
Германн ©   (2014-02-13 14:06) [24]

И дернул же черт меня вылезти с этим OnGetText.
:)


 
Anatoly Podgoretsky ©   (2014-02-13 14:18) [25]

Ты не черт, а дьявол


 
Ega23 ©   (2014-02-13 14:18) [26]


> То ли лыжи не едут,то ли.. Никак не соображу как с OnGetText
> на лету менять значения ячеек в нужной колонке данных после
> выполнения запроса? Или это надо в процессе делать?


А там тоже надо поля ручками прописывать. А для некоторых - ещё и про Case Sensitive не забывать.


 
Novicer   (2014-02-13 14:18) [27]

:) Для проверки прописал на нужное поле такую строчку: if DisplayText then Text := AnsiUpperCase(Text); Просто чтобы преобразовало текст в верхний регистр после выполнения запроса, но данные в гриде не изменились почему то,так вижу как и без этой строчки(как отработает запрос) :/


 
Novicer   (2014-02-13 14:23) [28]

Мдя.. Это я напутал игрался с полями, не назначил снова обработчик,потому и не было внешних изменений. Теперь на OnGetText нужного поля прописал if DisplayText then Text := AnsiUpperCase(Text); и данные после выполнения запроса уже вобще не отображает в этом поле :(


 
Novicer   (2014-02-13 14:28) [29]

А вот такая замена текста работает: IF Sender.AsString="Ля-ля-ля" then Text := "Бла-бла-бла";  Вот от этого и бум плясать дальше... :)


 
Ega23 ©   (2014-02-13 14:30) [30]

Да, Серёга, зря ты это сделал...


 
Novicer   (2014-02-13 14:43) [31]

Получилось! Все работает как надо! Всем спасибо за помощь и дружеские пинки в нужном направлении! ;)


 
Inovet ©   (2014-02-13 14:48) [32]

> [31] Novicer   (13.02.14 14:43)
> в нужном направлении

в ненужном


 
Novicer   (2014-02-13 14:55) [33]

Канва так понимаю ненужное направление :) Теперь хочу изменить цвет шрифта на красный в строке, в которой в поле "Количество" значение равно нулю . Метод с канвой работает до момента выделения строки(установки курсора), потом опять накладка. Хочу избавиться от этого эфекта используя снова событие OnGetText. Прописал на нужное поле такой обработчик:
IF Sender.AsFloat=0 then Form1.DbGrid1.Font.Color := clRed;
но при попытке компиляции получаю месагу: Undeclared identifier: "clRed"
С какого такого красный ему не нравиться непонятно? :( Попытка изменить цвет к успеху не привела... :)


 
Novicer   (2014-02-13 15:02) [34]

С IF Sender.AsFloat=0 then Form1.DBGrid1.Canvas.Font.Color := clRed; та же петрушка... :(


 
Novicer   (2014-02-13 15:15) [35]

Если отключить дефолтную отрисовку и самому указывать цвет строки в DBGrid1DrawColumnCell в зависимости от условий,то эффект "накладки" исчезает,но пропадает выделение строки(виден только курсор слева) и всплывают какие-то артефакты между колонками в виде вертикальных разноцветных линий на высоту строки.. :(


 
Ega23 ©   (2014-02-13 15:53) [36]

Нельзя сравнивать на равенство числа с плавающей запятой.

В общем виде это Abs(Value1 - Value2) <= Epsilon
где Epsilon - требуемая точность.


 
Novicer   (2014-02-13 19:52) [37]

Пусть будет и Абс. Так можно или нет на OnGetText поменять цвет строки, вернее шрифта по заданному условию? Как?


 
Германн ©   (2014-02-13 19:54) [38]


> Так можно или нет на OnGetText поменять цвет строки, вернее
> шрифта по заданному условию?

Нельзя.


 
Novicer   (2014-02-13 20:32) [39]

Пльохо... :( с отрисовкой на канве пашет, но эффект наложения старых данных все портит, а где перехватить незнаю :(


 
Dennis I. Komarov ©   (2014-02-13 23:31) [40]


> Нельзя.

Нет тебе прощения... ;)


 
Германн ©   (2014-02-14 00:13) [41]


> Novicer   (13.02.14 20:32) [39]
>
> Пльохо... :( с отрисовкой на канве пашет, но эффект наложения
> старых данных все портит, а где перехватить незнаю :(
>

Не перехватывать надо, а рисовать всё самому и правильно. Если уж решил изменить стандартную отрисовку DBGrid"a.


 
Novicer   (2014-02-14 00:50) [42]

Если отключаю дефолтдравинг все рисует правильно, все данные в гриде отображает, но выбранная строка не выделяется, некрасиво... :(


 
Германн ©   (2014-02-14 03:26) [43]


> Novicer   (14.02.14 00:50) [42]
>
> Если отключаю дефолтдравинг все рисует правильно, все данные
> в гриде отображает, но выбранная строка не выделяется, некрасиво.
> .. :(

Так я же сказал рисовать надо правильно, а не как бог послал.
Читай
Разноцветный DBGrid http://www.delphikingdom.com/asp/viewitem.asp?catalogid=168#link2


 
Inovet ©   (2014-02-14 09:53) [44]

> [36] Ega23 ©   (13.02.14 15:53)
> Нельзя сравнивать на равенство числа с плавающей запятой

к тому же с целым ещё, ну да ладно неявно преобразуется.


 
Inovet ©   (2014-02-14 09:55) [45]

> Разноцветный DBGrid
Или поставь EhLib, там много чего есть.



Страницы: 1 2 вся ветка

Текущий архив: 2015.05.03;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.006 c
15-1411245003
Юрий
2014-09-21 00:30
2015.05.03
С днем рождения ! 21 сентября 2014 воскресенье


15-1411072203
Юрий
2014-09-19 00:30
2015.05.03
С днем рождения ! 19 сентября 2014 пятница


15-1410899402
Юрий
2014-09-17 00:30
2015.05.03
С днем рождения ! 17 сентября 2014 среда


15-1410726603
Юрий
2014-09-15 00:30
2015.05.03
С днем рождения ! 15 сентября 2014 понедельник


15-1410689079
Вячеслав
2014-09-14 14:04
2015.05.03
Инструментарий для распределенной работы над проектом