弟新建一个套餐,什么保存,添加,修改,放弃,删除都可以实现.但是在不保存的情况下(也就是说DBGrid中有了数据,并显示出来了)点击右上角的关闭窗体按钮后,打开数据库,看到数据没有删除.DBGrid中依然有数据.接下来再一次操作,数据库里的数据删除了,DBGrid中也没有了数据.
注:1.在formclose事件中写了adotable关闭的代码
   2.要操作兩個表(mealdetail  mealhead);
代碼有
procedure TNewMeal2F.FormCreate(Sender: TObject);
beginFEditDealMan.Text:=MainF.StatusBar1.Panels[1].Text;
FEditDealDate.Text:=MainF.StatusBar1.Panels[6].Text;
//ADOTMealDateil.Active:=true;
getMealID();  //get the  mealid number 
ADOTMealDateil.Active:=true;FEditAllPrice.Text:='0.00';
FEditDisPrice.Text:='0.00';
end;procedure TNewMeal2F.getMealID();
begin
 adoqmealdateil.Close;
adoqmealdateil.SQL.Clear;
adoqmealdateil.SQL.Add ('select * from MealHead ');
adoqmealdateil.Open ;
adoqmealdateil.Last;
  if adoqmealdateil.RecordCount<>0  then
    begin
        adoqmealdateil.Close;
      adoqmealdateil.SQL.Clear;
      adoqmealdateil.SQL.Add ('select * from MealHead where wMealID like '+''''+formatdatetime('yyyymmdd',now)+'%'' order by wMealID asc');
      adoqmealdateil.Open;
      adoqmealdateil.Last;
      if copy(formatdatetime('yyyymmdd',now),1,8)=copy(trim(adoqmealdateil.Fields[1].AsString),1,8) then
         begin
           FEditMealID.Text:=formatdatetime('yyyymmdd',strtodate(FEditDealDate.Text ))+formatfloat('000',strtoint(trim(copy(adoqmealdateil.Fields[1].asstring,9,3)))+1);
         end
      else
         begin
           FEditMealID.Text:=formatdatetime('yyyymmdd',strtodate(FEditDealDate.Text))+formatfloat('000',1);
         end;   end
  else
     begin
      FEditMealID.Text:=formatdatetime('yyyymmdd',strtodate(FEditDealDate.Text))+formatfloat('000',1);      end;end;
procedure TNewMeal2F.ADOTMealDateilBeforeOpen(DataSet: TDataSet);
begin
adotmealdateil.Filter:='wMealID='''+trim(FEditMealID.Text )+'''';
adotMealDateil.Filtered:=true;
adoqmealdateil.Close;
adoqmealdateil.SQL.Clear;
adoqmealdateil.SQL.Add('delete  from  MealDetail where wMealID='''+trim(FEditMealID.Text)+'''');
adoqmealdateil.ExecSQL;
end;procedure TNewMeal2F.FormClose(Sender: TObject; var Action: TCloseAction);
begin
adotmealdateil.Close;
Action:=cafree;
end;procedure TNewMeal2F.FButAddClick(Sender: TObject);
begin
AddNewMealF:=TAddNewMealF.Create(application);
AddNewMealF.ShowModal;
end;procedure TAddNewMealF.FormCreate(Sender: TObject);
var
no:string;
int_no:integer;
i:integer;
begin  NewMeal2F.ADOTMealDateil.Append;  Adoquery1.SQL.Clear;
  adoquery1.SQL.Add('select  wItemID  from MealDetail  where wMealID='''+NewMeal2F.FEditMealID.Text +''' order by   wMealID desc') ;
  adoquery1.OPEN;
  if ADOQuery1.RecordCount<>0 then
    begin
      no:=ADOQuery1.fieldbyname('wItemID').AsString;
      int_no:=strtoint(no);
      int_no:=int_no+1;
      no:=inttostr(int_no);
      i:=length(widestring(no));
      if i<3 then
         for i:=i to 2 do
           begin
             no:='0'+no;
           end;
        FlatEdit1.Text:=no;
     end
  else
     begin
     FlatEdit1.Text:='001';
     end;
  ADOQuery1.Close;
 FlatEdit8.Text:=MainF.StatusBar1.Panels[6].Text;
NewMeal2F.ADOTMealDateil.FieldValues['wMealID']:=NewMeal2F.FEditMealID.Text;
 NewMeal2f.ADOTMealDateil.FieldValues['wItemID']:=FlatEdit1.Text;
end;procedure TAddNewMealF.FlatButton1Click(Sender: TObject);
begin   if FlatEdit2.Text='' then
     begin
       application.MessageBox('項目名稱不能為空!','溫馨提示',MB_ok);
       FlatEdit2.SetFocus;
       exit;
    end;
    NewMeal2F.FEditAllPrice.Text:=format('%.2f',[strtofloat(NewMeal2F.FEditAllPrice.Text)+strtofloat(FlatEdit7.Text)]);    NewMeal2F.ADOTMealDateil.FieldValues['wMealID']:=NewMeal2F.FEditMealID.Text;
    NewMeal2F.ADOTMealDateil.Post;
    close;
end;
小弟实在没有找出错误来,请前辈们說說錯在呀???

解决方案 »

  1.   

    to postren 
      小弟不會事务,小弟不会写代码,请给小弟代码行不??
    谢谢!!
      

  2.   

    ADOConnection1.BeginTrans; //启动事务
    ADOConnection1.CommitTrans; //提交事务
    ADOConnection1.RollbackTrans; //回滚事务
      

  3.   

    to postren 
      小弟不會事务,小弟不会写代码,请给小弟代码行不??
    谢谢!!---------------------
    够直接
    :)
      

  4.   

    to   xftyyyyb  谢谢你的提醒,以後我會注意的。