Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как убрать нули из DBEdit


Страницы:   1 2

Александр_2012 ©   (2012-10-18 10:30:00) 

Доброго дня. Есть программа, содержащая порядка 100 DBEdit, большинство которых привязаны к полям типа Integer, со значением по умолчанию 0 . Всё работает, но раздражает вывод ненужных нулей. Знаю, что можно у TField в событии OnGetText настроить любой формат вывода, но проблема в том, что не хотелось бы загружать жестко все поля БД в OraQuery и на каждое поле писать обработчик OnGetText. Можно ли написать процедуру общую для всех компонентов (работающую, например через Sender), которая обеспечила бы выполнение требуемого, к какому компоненту и событию её привязать?


Ega23   (2012-10-24 07:38:00) [1]


> Что плохого в Архангельском?
> Кстати, я один раз пользовал его функцию (к его книге шел диск с примерами),
> функция у меня не стабильно работала, выложил ее тут на ваше обсуждение,
> и ее назвали говнокодом...

Теперь понимаешь, что плохого в Архангельском?


Eeuwige Rouw   (2012-10-24 04:16:00) [2]


> Советую Вам почитать хоть одну хорошую (не Архангельского)
> книжку по ОПП.


Что плохого в Архангельском?
Кстати, я один раз пользовал его функцию (к его книге шел диск с примерами),
функция у меня не стабильно работала, выложил ее тут на ваше обсуждение,
и ее назвали говнокодом...

Вот и пойми, кто пишет правильно а кто нет...
Краснов (ОпенГл)... вот это было задушевное чтение...


Ega23   (2012-10-23 16:56:00) [3]


> Пытался делать проверку на тип поля, но не получилось, наверное
> делал неправильно.


if Fields[i].FieldType = ftInteger then


Александр_2012   (2012-10-23 15:08:00) [4]


> а убирать нужно для каких? может нужна процедура AllIntegerGetText
> ? а не все подряд.


Конечно для integer. Пытался делать проверку на тип поля, но не получилось, наверное делал неправильно.


sniknik   (2012-10-22 22:40:00) [5]

> Большинство полей integer, есть string  и  datetime
а убирать нужно для каких? может нужна процедура AllIntegerGetText ? а не все подряд.


sniknik   (2012-10-22 21:51:00) [6]

нужен All SetText с обратной операцией


Александр_2012   (2012-10-22 20:17:00) [7]

Большинство полей integer, есть string  и  datetime


Inovet   (2012-10-22 17:36:00) [8]

> [24] Александр_2012   (22.10.12 14:15)
> for i:=0 to DataQ.FieldCount-1 do
> DataQ.Fields[i].OnGetText:=AllGetText;

Все поля одного типа?


Медвежонок Пятачок   (2012-10-22 15:41:00) [9]

а все равно не поможет.


MsGuns   (2012-10-22 14:57:00) [10]

if not Sender.IsNull then
 <Ваш код>

Ну и Format() вместо AsString
И опять же надо бы проверять тип полей и делать конвертацию только для чисел
И последнее: для "тонкого" отображения полей (даты, дроби..) в нужном формате используется свойство TxxxField.DisplayFormat


Медвежонок Пятачок   (2012-10-22 14:20:00) [11]

В приведенной строке нет конвертации к дабл.


Александр_2012   (2012-10-22 14:15:00) [12]

Хорошо, попытался воспользоваться Вашими советами.
1. Создал процедуру

procedure TDM.AllGetText(Sender: TField; var Text: String;
 DisplayText: Boolean);
begin
if DisplayText then
 begin
 if Sender.AsString='0' then
   Text:=''
 else
   begin
   Text:=Sender.AsString;
   end;
 end;
end;

Решил, что можно к ней обратиться после открытия набора данных

procedure TDM.DataQAfterOpen(DataSet: TDataSet);
var
i: integer;
begin
for i:=0 to DataQ.FieldCount-1 do
 DataQ.Fields[i].OnGetText:=AllGetText;
end;

Компилирую... Ура нет нулей, но достаточно встать на какое-нибудь поле или на DBNavigator нажать Next, как тут же получаю:

Could not convert variant of type (String) into type (Double)

Если я правильно понял,то ошибку вызывает строка

   Text:=Sender.AsString;

по крайней мере, если её закоментировать, то ошибка исчезает, правда все поля получаю пустыми.

Как это обойти?


MsGuns   (2012-10-22 12:45:00) [13]

А Вам как начинающему и советуют. Поймите, сложно объяснить новичку  защиту Каро-Кан если он, новичок, не знает как ходят шахматные фигуры.


Ega23   (2012-10-22 12:02:00) [14]


> У меня очень большие сомнения, что все начинающие прекрасно
> разбираются что такое Sender

http://slovari.yandex.ru/sender/en-ru/#lingvo/


Александр_2012   (2012-10-22 11:44:00) [15]

Спасибо, уважаемые господа. Если вы обратили внимание, то я обратился на форум для начинающих. У меня очень большие сомнения, что все начинающие прекрасно разбираются что такое Sender, и как найти те или иные свойства полей БД, если их предварительно не загрузить в редактор полей.


MsGuns   (2012-10-22 11:23:00) [16]

>Александр_2012

Советую Вам почитать хоть одну хорошую (не Архангельского) книжку по ОПП.


Jeer   (2012-10-19 16:20:00) [17]


> Кто не хочет - я не виноват. :)


Ну да - "Кито хотел секса и не подстраховался, тот мимо <дамок>" (C)


Ega23   (2012-10-18 20:13:00) [18]


>
> Шо ж ты творишь ?

А у меня нет TDBEdit. Точнее, есть, но мне было в лом искать :)
Да и ваще, пусть думает. Кто хочет разобраться, тому данного примера будет достаточно. Кто не хочет - я не виноват. :)


Jeer   (2012-10-18 18:27:00) [19]


> Ega23 ©   (18.10.12 17:15) [15]


Шо ж ты творишь ?
Сейчас это чудо начнет всовывать твой код в Delphi и искать где ж там Field-ы и почему у них кнопок нет.


Inovet   (2012-10-18 17:40:00) [20]

> [15] Ega23 ©   (18.10.12 17:15)
> Кнопок, как ты понимаешь, можно накидать хоть 100500, для
> всех OnClick будет одинаков.

Щас он начнот циклы копипастить. Наверное стрелочку рядом с выбором обработчика события не видит.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо