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-18 17:15:00) [21]


> Прошу объяснить как применить этот замечательный код (к
> чему привязать, откуда на него сослаться)



unit Unit50;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type

 TForm50 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   Button4: TButton;
   procedure FormCreate(Sender: TObject);
 private
   procedure ButtonOnClick(Sender: TObject);
 public
 end;

var
 Form50: TForm50;

implementation

{$R *.dfm}

//*****************************************************************************

{ TForm50 }

procedure TForm50.ButtonOnClick(Sender: TObject);
begin
 ShowMessage(TButton(Sender).Caption);
end;

procedure TForm50.FormCreate(Sender: TObject);
var
 i: Integer;
begin
 for i := 0 to ComponentCount - 1 do
   if Components[i] is TButton then
      TButton(Components[i]).OnClick := ButtonOnClick;
end;

end.


Кнопок, как ты понимаешь, можно накидать хоть 100500, для всех OnClick будет одинаков.


Jeer   (2012-10-18 17:09:00) [22]


> Александр_2012   (18.10.12 16:39) [13]

1. Вам или рано или вообще не следует заниматься программированием.
Не, ну бывает так - мозги сложены под "лицезрение", а не аналитику.
2. Вам сказано и сделано все, чтобы Вы поняли и применили.
Если не хватает, значит не хватает.
Еще раз и внимательнее обратите внимание на [1] и [11,12].


Александр_2012   (2012-10-18 16:39:00) [23]

Капитану-очевидность
Прошу объяснить как применить этот замечательный код (к чему привязать, откуда на него сослаться)
Юнга-неочевидность


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

Поправочка:
procedure TForm1.AllGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
 if Sender.AsString = '0'
   then Text:= ''
   else Text:= Sender.AsString;
end;


sniknik   (2012-10-18 12:52:00) [25]

> Хотелось бы пример. Как это будет выглядеть.
блин... чувствую себя капитаном очевидность... пример.
procedure TForm1.AllGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
 if Sender.AsString = '0'
   then Text:= ''
   else Sender.AsString;
end;


Александр_2012   (2012-10-18 12:47:00) [26]

> и на каждое поле писать обработчик OnGetText.
напиши один на все.

Хотелось бы пример. Как это будет выглядеть.


sniknik   (2012-10-18 12:40:00) [27]

> Проблема в том, ...
не проблема... не та о которой стоит парится.

но если есть желание то всегда можно вернутся к первому предложенному варианту - sniknik ©   (18.10.12 10:53) [1]


Александр_2012   (2012-10-18 12:32:00) [28]

Идея понятна. Проблема в том, что возвращается более 100 полей, если все их перечислять в запросе, да ещё с преобразованием, то запрос получается очень громоздким.


sniknik   (2012-10-18 11:58:00) [29]

если исходить из запроса то сделай его чуть сложнее, что кстати будет и более правильным, т.к. указывать * моветон (почему... а, загугли).

замени * на имена полей, где нужны замены 0 на нил тоже замени типа (не знаю оракла, т.что приблизительно) iif(field1 = 0, null, field1) as "field1".


Александр_2012   (2012-10-18 11:46:00) [30]

Есть простейший запрос: select * from tablename where ... OraQuery возвращает набор данных, где надо указать, что нули визуализировать в DBEdit-ах не надо.


sniknik   (2012-10-18 11:25:00) [31]

> Увы, базу генерил не я. И логичнее было бы по умолчанию null.
может потому и поставили 0 дефаултом что хотели его видеть...


sniknik   (2012-10-18 11:23:00) [32]

> Хотелось бы пример, как обратиться к полю и к соответствующему событию не загружая его в соответствующий DataSet.
???
- не могу доехать до ул. ххх, 13-й автобус не ходит.
- езжай на любом до ххх идут все.
- хотелось бы пример как ездить на автобусе не садясь в него...
???


Александр_2012   (2012-10-18 11:04:00) [33]

Увы, базу генерил не я. И логичнее было бы по умолчанию null. Хотелось бы пример, как обратиться к полю и к соответствующему событию не загружая его в соответствующий DataSet.


sniknik   (2012-10-18 10:59:00) [34]

+
вообще пустое значение в дб компонентах "забито" под null в данных базы, 0 это уже вполне себе конкретное значение.
лучше не заменять. путаницу только внесешь.


sniknik   (2012-10-18 10:53:00) [35]

> и на каждое поле писать обработчик OnGetText.
напиши один на все.


Страницы:   1 2

Наверх

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