有一个部门表:depart, 字段分别为:depart_id ,depart_name,upper_depart_id,分别表示部门代码,部门名称,上级部门代码.
在form1中分别有添加,修改,删除,保存,取消四个按钮.
在form1中还有edit1,combobox1,edit2三个控件.
还添加了一个dbgrid1以及adodataset1和datasource1控件.
该数据库其它表和部门表有关联,因不涉及,略过.程序代码如下:procedure Tbmsz.FormShow(Sender: TObject); //刚运行时按钮和编缉框不可用
begin
      bmdbgrid1.Columns[2].Width:=50;
      edit1.ReadOnly:=true;
      edit2.ReadOnly:=true;
     
      speedbutton1.Enabled:=false;
      speedbutton2.Enabled:=false;
      speedbutton3.Enabled:=false;
      speedbutton4.Enabled:=false;
end;procedure Tbmsz.bmDBGrid1CellClick(Column: TColumn);//点击dbgrid1后相应字段值显示在edit1,combobox1,edit2中
begin
     speedbutton1.Enabled:=true;
     speedbutton2.Enabled:=true;
     speedbutton3.Enabled:=true;
     edit1.Text:=dbgrid1.Fields[0].value;
     combobox1.Text:=dbgrid1.Fields[1].value;
     edit2.Text:=dbgrid1.Fields[2].value;
end;procedure Tbmsz.SpeedButton1Click(Sender: TObject);//添加数据
var
i:integer;
begin
    speedbutton1.Enabled:=false;
    speedbutton2.Enabled:=false;
    speedbutton3.Enabled:=false;
    speedbutton4.Enabled:=true;
    dbgrid1.ReadOnly:=false;
    adodataset1.close;
    adodataset1.Open;
    adodataset1.Insert;    if adodataset1.RecordCount=0 then exit;//此段是想把 upper_depart_id字段添加到combobox1中,并且值不能重复.还有其它方法吗?
    Combobox1.items.clear;
    adodataset1.first;
    for i:=0 to adodataset1.RecordCount-1 do
      begin
        Combobox1.items.add(adodataset1.fieldbyname('upper_depart_id').asstring);
        adodataset1.next;
      end;adodataset1.FieldByName( 'depart_id').AsString:= edit1.text;
adodataset1.FieldByName( 'upper_depart_id').AsString:= combobox1.Text;
 adodataset1.FieldByName( 'depart_name').AsString:= edit2.Text;
Combobox1.items.clear;
end;
procedure Tbmsz.SpeedButton2Click(Sender: TObject);
var
i:integer;
beginadodataset1.close;
adodataset1.Open;
        if adodataset1.RecordCount=0 then exit;//此段是想把 upper_depart_id字段添加到combobox1中,并且值不能重复.还有其它方法吗?
    Combobox1.items.clear;
    adodataset1.first;
    for i:=0 to adodataset1.RecordCount-1 do
      begin
        Combobox1.items.add(adodataset1.fieldbyname('upper_depart_id').asstring);
        adodataset1.next;
      end;
adodataset1.edit;adodataset1.FieldByName( 'depart_id').AsString:= edit1.text;
adodataset1.FieldByName( 'upper_depart_id').AsString:= combobox1.Text;
 adodataset1.FieldByName( 'depart_name').AsString:= edit2.Text;
Combobox1.items.clear;
end;procedure Tbmsz.SpeedButton3Click(Sender: TObject);
begin
     bmdbgrid1.ReadOnly:=False;
    adodataset1.delete;
      bmdbgrid1.ReadOnly:=True;
end;procedure Tbmsz.SpeedButton4Click(Sender: TObject);
begin
     adodataset1.post;
         speedbutton4.Enabled:=false;end;
除了上面的问题,还想问问用adodataset1里面的 adodataset1.insert,edit,delete和sql2000里相应的语句来完成相同的操作,哪个好?为什么?

解决方案 »

  1.   

    不建议这样写,还是应该用sql语句
      

  2.   

    添加,修改,删除完全可以在adodataset1中完成,为什么要提到edit1,combobox1,edit2中,如果要提,就是你那个方式,只是你并没判断重复
      

  3.   

    combobox1的选项应该在窗体显示时通过SQL查询不同的值初始化添加的吧,没必要每次都清除添加吧?
      

  4.   

    用SQL语句既简单也方便,功能也一样实现
      

  5.   

    还添加了一个dbgrid1以及adodataset1和datasource1控件.不用这些东东,效率低下,用存储过程,想添加或修改的数据通过参数传入就好了,
    如果ID>0则修改,否则新插入一条记录