想在TDBGrid中输入一组数据,然后点击一个“保存”按钮,将这一组数据保存在数据库的表中,请问怎么处理????

解决方案 »

  1.   

    用Clientdataset吧,这样你添加完的批量数据可以保存,也可取消
      

  2.   

    可以用这个TQuery+updateQuery   但要注意设置updateQuery属性,方法就是
     applyupdates
     commitupdates 吧,具体查查资料
      

  3.   

    unit uzcdbadd;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus, DB, StdCtrls, Buttons, GridsEh, DBGridEh, ComCtrls,
      ExtCtrls;type
      TfrmzcdbAdd = class(TForm)
        lbl1: TLabel;
        pnl1: TPanel;
        lbl2: TLabel;
        dtp1: TDateTimePicker;
        dbgrdh1: TDBGridEh;
        btnOK: TBitBtn;
        btnclose: TBitBtn;
        ds1: TDataSource;
        pm1: TPopupMenu;
        mniadd: TMenuItem;
        mniN1: TMenuItem;
        procedure btncloseClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure btnOKClick(Sender: TObject);
        procedure dbgrdh1EditButtonClick(Sender: TObject);
        procedure dbgrdh1KeyPress(Sender: TObject; var Key: Char);
        procedure mniaddClick(Sender: TObject);
        procedure mniN1Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      frmzcdbAdd: TfrmzcdbAdd;
      Edittag:Integer;implementationuses datamoule, uselectzc, frmMain;{$R *.dfm}procedure TfrmzcdbAdd.btncloseClick(Sender: TObject);
    begin
      dm.qryzcdbadd.Close;
      DM.congdzc.RollbackTrans;
      close;
    end;procedure TfrmzcdbAdd.FormCreate(Sender: TObject);
    begin
      if DM.qryzcdbadd .Active then dm.qryzcdbadd.Close;
      if DM.congdzc.InTransaction then dm.congdzc.RollbackTrans;
      dm.qryzcdbadd.LockType :=  ltBatchOptimistic;{批量乐观锁定}
      DM.congdzc.BeginTrans; {开启事务}
      case Edittag of
      0:
        begin
          dm.qryzcdbadd.Open;
          dm.qryzcdbadd.Append;
          dm.qryzcdbadd.FieldByName('调拨日期').AsDateTime :=Now;
          dm.qryzcdbadd.FieldByName('登记人员').AsString := GuserName;
        end;
       1:
         begin
           dm.qryzcdbadd.SQL.Clear;
           dm.qryzcdbadd.SQL.Add('select * from [调拨] where ID='+inttostr(dm.qryzcdb.fieldbyname('ID').asinteger));
           DM.qryzcdbadd.open;
           DM.qryzcdbadd.First;
           DM.qryzcdbadd.Edit;     end;
      end;
    end;procedure TfrmzcdbAdd.btnOKClick(Sender: TObject);
    begin
       dm.qryzcdbadd.UpdateBatch();   {保存新增}
       dm.congdzc.CommitTrans;         {提交事务}
       close;
    end;procedure TfrmzcdbAdd.dbgrdh1EditButtonClick(Sender: TObject);
    begin
      if dbgrdh1.Col=1 then
      begin
        frmSelectzc := TfrmSelectzc.Create(nil);
        frmSelectzc.Tag :=2;
        frmSelectzc.Show;
      end;
    end;procedure TfrmzcdbAdd.dbgrdh1KeyPress(Sender: TObject; var Key: Char);
    begin
     if key=#13 then{ 判断是按执行键}
        if  dbgrdh1.Col+1<(dbgrdh1.Columns.Count) then
            dbgrdh1.Col:=dbgrdh1.col+1{ 移动到下一字段}
        else
            dbgrdh1.Col:=1;
    end;procedure TfrmzcdbAdd.mniaddClick(Sender: TObject);
    begin
      DM.qryzcdbadd.Append;
      dm.qryzcdbadd.FieldByName('调拨日期').AsDateTime :=Now;
      dm.qryzcdbadd.FieldByName('登记人员').AsString := GuserName;
    end;procedure TfrmzcdbAdd.mniN1Click(Sender: TObject);
    begin
      DM.qryzcdbadd.Delete;
    end;procedure TfrmzcdbAdd.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      DM.qryzcdb.Refresh;
      Release;
    end;end.