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

Вниз

Вот к чему приводит лень :( Посмейтесь.   Найти похожие ветки 

 
syte_ser78 ©   (2005-07-15 12:02) [0]

Нужно было следующее:
Есть таблица.
Первые ее 4 поля грузим в комбобоксы без повторов.
При выборе значения в комбе, фильтруем таблицу и в другие комбы и ДБгрид выводим только удовлетворяющие условию данные. При выборе в 2,3,4
аналогично.
Лень было воспользоватся советом из http://delphimaster.net/view/3-1120217231/ и во какой монтр вышел :)

//ЗАГРУЗКА В КОМБОБОКСЫ ДАННЫХ ДЛЯ ВЫБОРА типа/госта/ру/ду...
//ЭТУ ПРОЦЕДУРУ НУЖНО ПЕРЕПИСАТЬ ТАКИМ ОБРАЗОМ ЧТОБЫ В НИЖЕСЛЕДУЮЩИХ КОМБАХ
//ОТОБРАЖАЛИСЬ ДАННЫЕ ТОЛЬКО УДОВЛЕТВОРЯЮЩИЕ УСЛОВИЯМ ВЫШЕСЛЕДУЮЩИХ
//ЭТУ ХЕРНЬ ОБЯЗАТЕЛЬНО ПЕРЕПИСАТЬ!!!!!!!!
//Переписал блин. Лучше бы я умер вчера...
procedure tfrm_main.load_cmb(armatura,gost,dy,py,all:boolean);
var i,ii:integer;
begin
  ii:=0;
  if armatura=true then
     begin
     frm_main.cmb_armatura.Clear;
     frm_main.cmb_armatura.Items.Add ("");
     end;
  if gost=true then
     begin
     frm_main.cmb_gost.Clear;
     frm_main.cmb_gost.Items.Add ("");
     end;
  if dy=true then
     begin
     frm_main.cmb_Dy.Clear;
     frm_main.cmb_Dy.Items.Add ("");
     end;
  if py=true then
     begin
     frm_main.cmb_Py.Clear;
     frm_main.cmb_Py.Items.Add ("");
     end;
  while not frm_main.Table1.Eof do
     begin
     if all=true then
        begin
        ii:=ii+1;
        frm_logo.Gauge1.Progress:=round(100*ii/frm_main.Table1.RecordCount);
        frm_logo.Label2.Caption:="Обрабатываем "+frm_main.Table1Name.AsString;
        frm_logo.Label2.Refresh;
        end;
     if armatura=true then
        begin
        if frm_main.Table1Name.AsString<>"" then
           begin
           if frm_main.cmb_armatura.Items.IndexOf(frm_main.Table1Name.AsString)<0 then
              frm_main.cmb_armatura.Items.Add (frm_main.Table1Name.AsString);
           end;
        end;
     if gost=true then
        begin
        if frm_main.Table1GOST.AsString<>"" then
           begin
           if frm_main.cmb_gost.Items.IndexOf(frm_main.Table1Gost.AsString)<0 then
              frm_main.cmb_gost.Items.Add (frm_main.Table1Gost.AsString);
           end;
        end;
     if dy=true then
        begin
        if frm_main.Table1D_usl_proh.AsString<>"" then
           begin
           if frm_main.cmb_Dy.Items.IndexOf(frm_main.Table1D_usl_proh.AsString)<0 then
              frm_main.cmb_Dy.Items.Add (frm_main.Table1D_usl_proh.AsString);
           end;
        end;
     if py=true then
        begin
        if frm_main.Table1PY.AsString<>"" then
           begin
           if frm_main.cmb_Py.Items.IndexOf(frm_main.Table1Py.AsString)<0 then
              frm_main.cmb_Py.Items.Add (frm_main.Table1Py.AsString);
           end;
        end;
     frm_main.Table1.Next;
     end;
  frm_logo.Close;
  frm_main.Table1.First;
  frm_main.cmb_gost.Sorted:=true;
  frm_main.cmb_Py.Sorted:=true;
  frm_main.cmb_Dy.Sorted:=true;
end;

//ОТОБРАЖАЕМ В ГРИДЕ ЗНАЧЕНИЯ УДОВЛЕТВОРЯЮЩИЕ УСЛОВИЯМ УКАЗАННЫМ В КОМБОБОКСАХ
procedure filter_db;
var
  a,b,c:string;
  f1,f2,f3,f4,f5:string;
  armatura,gost,dy,py:boolean;
begin
  f1:="";
  f2:="";
  f3:="";
  f4:="";
  f5:="";
  c:="";
  if (frm_main.cmb_armatura.text<>"") and (frm_main.cmb_armatura.text<>"-") then
     f1:="Name="+""""+frm_main.cmb_armatura.Text+ """"+" and "
  else
     f1:="Name<>0 and ";
  if (frm_main.cmb_gost.text<>"") and (frm_main.cmb_gost.text<>"-")then
     f3:="GOST="+""""+frm_main.cmb_gost.Text+""""+ " and "
  else                                  
     f3:="GOST<>0 and ";
  if (frm_main.cmb_Py.text<>"") and (frm_main.cmb_Py.text<>"-") then
     f4:="PY="+""""+frm_main.cmb_Py.Text +""""+ " and "
  else
     f4:="PY<>0 and ";
  if (frm_main.cmb_Dy.text<>"") and (frm_main.cmb_Dy.text<>"-") then
     f5:="D_usl_proh="+""""+frm_main.cmb_Dy.Text+""""
  else
     f5:="D_usl_proh<>0";
     c:=""+f1+f2+f3+f4+f5+"";
     frm_main.Label1.caption:=c;
     frm_main.table1.filter:=c;
     frm_main.table1.Filtered:=true;
     frm_main.Caption:=Application.Title+"    ...........    "+c;
  armatura:=true;
  gost:=true;
  dy:=true;
  py:=true;
  frm_main.DBGrid1.Hide;
  frm_main.Panel3.Refresh;
  if frm_main.cmb_armatura.Text<>"" then armatura:=false;
  if frm_main.cmb_gost.Text<>"" then gost:=false;
  if frm_main.cmb_Dy.Text<>"" then dy:=false;
  if frm_main.cmb_Py.Text<>"" then py:=false;
  frm_main.load_cmb(armatura,gost,dy,py,false);
  frm_main.DBGrid1.Show;
end;

procedure Tfrm_main.cmb_armaturaClick(Sender: TObject);
begin
  filter_db;
end;

procedure Tfrm_main.cmb_gostClick(Sender: TObject);
begin
  filter_db;
end;

procedure Tfrm_main.cmb_PyClick(Sender: TObject);
begin
  filter_db;
end;

procedure Tfrm_main.cmb_DyClick(Sender: TObject);
begin
  filter_db;
end;


 
Маг Похмеляйнен   (2005-07-15 12:09) [1]

Дельфийцы шутят :o)


 
REA   (2005-07-15 12:23) [2]

Брр. Дикий код. Активнее используй кнопки Del и Backspace.


 
msguns ©   (2005-07-15 13:24) [3]

Как проверить, правильно ли введено четырехзначное число ?
А очень просто:
if (Edit1.Text="1") or (Edit1.Text="2") or
       ...
и так 9999 раз, если комиллятор выдержит такой код


 
syte_ser78 ©   (2005-07-15 14:02) [4]

msguns ©   (15.07.05 13:24) [3]
Ты не повериш, но кроме " " и "-" могут может быть еще 9 значений которые мне нужны и при которых фильтрация должана быть фалсе.
Зы. Если ты о (frm_main.cmb_Dy.text<>"") and (frm_main.cmb_Dy.text<>"-")



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

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

Наверх




Память: 0.49 MB
Время: 0.041 c
14-1121319516
Ega23
2005-07-14 09:38
2005.08.07
С днем рождения! 14 июля


4-1118096374
Gopher
2005-06-07 02:19
2005.08.07
команда GetWindowsDir


14-1121430748
Igorek
2005-07-15 16:32
2005.08.07
Дельфимастер проснулся :)


1-1121449372
lookin
2005-07-15 21:42
2005.08.07
Печать из TStringGrid


1-1121414559
hunn
2005-07-15 12:02
2005.08.07
пробежаться по всему диску