两个表:
仓库明细表:商品编号(外键--->商品主表.商品编号),数量
商品主表:商品编号(自动递增),商品名称两个DBgrid:DBgrid1,DBgrid2DBgrid1字段:仓库明细表.商品编号,商品主表.商品名称,仓库明细表.数量
DBgrid2字段:商品主表.商品编号,商品主表.商品名称我想实现:在DBgrid2中选择我想要的商品,添加到DBgrid1中去,可以随便添加几条现在我在DBgrid2中选择一行,添加到DBgrid1中去,添加一行时还可以,可连续添加两条时错误发生了
因为DBgrid1中有个“商品主表.商品名称”字段,当添加到第二条时,DBgrid1会自动把上一条刚刚插入的记录提交,也就是说在“商品主表”中插入了刚刚的“商品主表.商品名称”字段,这时错误提示““商品主表”的“商品编号”字段不能为空”
这就是因为DBgrid添加到第二行时就会把上一行的记录自动添加,真不好!!!我本来是想让DBgrid1的“商品主表.商品名称”为空字段,也就是个假的字段
可是代码 DBGrid1.Fields[1].AsString:='XXX'; 会出错 (如果字段是真的字段的话代码可以运行)唉,如果DBgrid1只有“商品编号”,“数量”字段的话那就好办了,因为这都只操作一张表,可是现在.....头都搞大了
别人也有提意见说建一个临时表,可是这样做不是太麻烦了,建视图也不行,我想这是我对DBgrid控件不熟悉所至的请大家帮帮忙,解决这个问题,谢谢了

解决方案 »

  1.   

    DBGrid1是通过DATASOURCE1连接ADOQUERY1的,这样加没用吧.要加也在ADOQUERY1吧!
      

  2.   

    加在ADOquery1里?怎么加?
    adoquery1.sql.add(........)  ???
    那不是要插入到表中去了?应该怎么做呢?就是因为DBgrid1中要显示两个表的字段所以才变得不好做了(加了一个“商品名称”),可是不加又不行,总不能让客户看“商品编号”吧有没有更好的解决方法呢?
      

  3.   

    其实DBgrid1的商品名称字段只是给用户看的而已,真正是不插入到数据库中去的,可是如果在DBgrid中新增一个字段(不是从数据库中调出来的),就不能对新增的那个字段赋值 
      

  4.   

    添加第二条前加一句adoquery1.requery;
      

  5.   

    现在我不用DBgrid了
    DBgrid用来查看数据还行,可是用到多表更新就不太好做了现在我是用StringGrid
    把StringGrid中的记录都放到一个数组记录中去,再导到数据库中
      

  6.   

    少量数据用StringGrid还可以
    大量数据StringGrid就很慢了把
      

  7.   

    如果用DBgrid每次都会操作数据库而StringGrid保存在数组中,可以批量插入,这样可以减轻数据库的压力大家认为呢?
      

  8.   

    我觉得还是得建临时表,我以前试过,可能adoDataSet也不行.
      

  9.   

    看看我的代码吧:
    unit main;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, ToolWin, Menus, ImgList;type
      Tmainform = class(TForm)
    ………………
      private
        { Private declarations }
      public
        { Public declarations }
        username,password:string;
        
       end;var
      mainform: Tmainform;implementation
    uses login;
    unit login;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, ADODB;type
      Tloginform = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Label1: TLabel;
        Edit1: TEdit;
        Label2: TLabel;
        Edit2: TEdit;
        ADOConnection1: TADOConnection;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      
        procedure FormActivate(Sender: TObject);
        procedure Edit1KeyPress(Sender: TObject; var Key: Char);
        procedure Edit2KeyPress(Sender: TObject; var Key: Char);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      loginform: Tloginform;implementation
    uses main;
    {$R *.dfm}
    …………………………
          mainform.username:=Edit1.Text;
          mainform.password:=Edit2.Text;