我在对控件写代码的时候,每一个事件就写一次代码,发现是有很多重复的代码,例如对个组合框通过ADOQUERY获取数据后添加,
procedure Torder_mx.ComboBox3DropDown(Sender: TObject);
begin
d1.Close ;
d1.SQL.Clear ;
d1.sql.Add('select m_color from matral_lib where m_barcode = :p1 and m_qty >0');
d1.Parameters.ParamByName('p1').Value := edit6.Text ;
d1.Open;
 if d1.Recordset.RecordCount >0 then
 begin
 d1.First ;
while not d1.Eof  do
begin
  combobox3.Items.Add(d1.FieldValues['m_color'] );
    d1.Next;
end;
end;
  end;在其他ComboBox也是写相同的代码,就是SQL语句和参数不同,其他都是一样的,而且都是用一个ADOQUERY来操作数据,因此
d1.Close ;
d1.SQL.Clear ;
d1.sql.Add('');
d1.Parameters.ParamByName('p1').Value := ;
d1.Open;
这里是用得最多,怎样忧化一下代码呢?写个过程或者函数,还是类呢,请各位大侠发表一下意见,让小菜增长一下见识

解决方案 »

  1.   

    //procedure Torder_mx.AddColorToComboBox(PDataSet,Sender: TObject;PValue:string);
    //ADOQuery也可以直接做为参数传入
    procedure Torder_mx.AddColorToComboBox(Sender: TObject;PValue:string);
    begin
      d1.Close ;
      d1.SQL.Clear ;
      d1.sql.Add('select m_color from matral_lib where m_barcode = :p1 and m_qty >0');
      d1.Parameters.ParamByName('p1').Value := PValue;
      d1.Open;
      if d1.Recordset.RecordCount >0 then
      begin
      d1.First ;
      while not d1.Eof  do
      begin 
        TComboBox(Sender).Items.Add(d1.FieldValues['m_color'] );
          d1.Next;
      end;
      end;
    end;{自定义消息处理方法,把所有ComboBox的方法指针指向这个方法,在事件管理器里面选就可以了}
    procedure Torder_mx.AllComboBoxDropDown(Sender: TObject);
    begin
      AddColorToComboBox(Sender,Edit1.Text);
    end;
      

  2.   


    就是写个过程来然后把参数传递吧,procedure Torder_mx.AddColorToComboBox这个就是自定义的过程吗
      

  3.   

    我想问一下还有没有一个方法,就是写个过程来专门来传入ADOQUERY的SQL,因为也经常用一个ADOQUERY,把不同的记录集写进去
      

  4.   

    结构优化
    with d1
      begin
        Close ; 
        SQL.Clear ; 
        sql.Add(''); 
        Parameters.ParamByName('p1').Value := ; 
        Open;
       end;