Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2015.05.03;
Скачать: [xml.tar.bz2];

Вниз

Как изменить результаты запроса в 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]


> Нельзя.

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



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

Форум: "Начинающим";
Текущий архив: 2015.05.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.003 c
2-1392202611
Сергей
2014-02-12 14:56
2015.05.03
работа с FLAC и APE файлами


8-1236085248
StriderMan
2009-03-03 16:00
2015.05.03
Преобразовать картинку в массив байтов RGB


15-1406036840
С-К
2014-07-22 17:47
2015.05.03
Исключение по левому адресу


15-1411293130
Rouse_
2014-09-21 13:52
2015.05.03
Ole DradDrop


2-1392238791
Novicer
2014-02-13 00:59
2015.05.03
Как изменить результаты запроса в DbGrid?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский