首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

delphi有关问题:请问一个折磨了小弟我一下午也没解决的有关问题

2012-03-23 
delphi问题:请教一个折磨了我一下午也没解决的问题!做了个存储电话号码的软件,delphi7+access做的,遇到点

delphi问题:请教一个折磨了我一下午也没解决的问题!
做了个存储电话号码的软件,delphi7+access做的,遇到点问题。

做了个选中记录删除的功能,想要的效果是点了删除按钮程序删除记录,然后自动刷新DBGRID。

结果很不正常:点删除按钮后有时能删除,有时删除不了;DB不会自动更新。哪位能帮我一下呀,非常感谢!


显示记录代码:

procedure myuserlist;

  begin
  if(ulist='') then
  begin
  ulist:='编号,姓名,性别,联系电话,手机,Email,QQ,用户分组,登记日期,地址,备注'; //默认查询所有字段
  end;

  if (mykey='') then
  begin
  mykey:='1=1';
  end;

  strsql:='select '+ulist+' from userlist where '+mykey+' order by 编号 desc';
   
  mainfrm.ADODataSet1.Active:=false;
  mainfrm.ADODataSet1.ConnectionString:=constr;
  mainfrm.ADODataSet1.CommandText:=strsql;
  mainfrm.ADODataSet1.Active:=true;

  mainfrm.DataSource1.DataSet:=mainfrm.ADODataSet1;
  mainfrm.DBGrid1.DataSource:=mainfrm.DataSource1;

  //内容居中
  for i:=0 to mainfrm.dbgrid1.datasource.dataset.fieldcount-1 do
  begin
  mainfrm.DBgrid1.Columns[i].Title.Alignment:=taCenter;//标题居中
  mainfrm.dbgrid1.Columns[i].Alignment:=taCenter;//内容居中
  end;
  end;



删除代码:
procedure Tmainfrm.ToolButton3Click(Sender: TObject);
  var
  myid:string;
begin
  //删除记录
  myid:=DBGRID1.Fields[0].DisplayText;

  if (myid<>'') then
  begin
  if MessageBox(0,'确定要删除这条记录吗?!','提示', MB_yesno+$00000020)=idYes then
  begin
  ADOQuery1.SQL.Clear;
  ADOQuery1.ConnectionString:=constr;
  ADOQuery1.SQL.Add('delete from userlist where 编号="'+myid+'"');
  ADOQuery1.ExecSQL;  

  myuserlist;
  end;
  end
  else
  begin
  MessageBox(0,'请选择一条记录后再操作!','提示', MB_ok+$00000040);
  end;
end;

[解决办法]
给楼主参考一段代码吧,写的比较多,你可以只看你想要的部分:
procedure TFrmGoodsMana.actDeleteExecute(Sender: TObject);
var
lqry : TADOQuery;
lGoodsID,lstrConfirm : string;
lintError : Integer;
begin
lGoodsID := qryGoods.FieldByName('Gi_GoodsID').AsString;
if not qryGoods.IsEmpty then
begin
lstrConfirm := '您确定要删除编号为【'+lGoodsID+'】的商品信息吗?';
if not UConfirmMsgDlg(lstrConfirm) then Exit;
lqry := TADOQuery.Create(nil);
lqry.Connection := gADOConn;
try
with lqry do
begin
Close;
SQL.Text := 'delete from TB_GoodsInfo where Gi_GoodsID='+lGoodsID;
if not gADOConn.InTransaction then
gADOConn.BeginTrans;
lintError := uQryExecute(lqry);
if lintError=0 then
begin
gADOConn.CommitTrans;
UInforMsgBox('删除成功!');
end
else
begin
gADOConn.RollbackTrans;
UErrorMsgBox('删除失败!');
end;
qryGoods.Close;
qryGoods.Open;
lintError := StrToInt(lGoodsID);
if lintError>0 then
qryGoods.Locate('Gi_GoodsID',IntToStr(lintError),[]);
end;
finally
lqry.Free;
end;

end;
end;
[解决办法]

Delphi(Pascal) code
procedure Tmainfrm.ToolButton3Click(Sender: TObject);beginif self.ADODataSet1.IsEmpty then exit;if MessageBox(0,'确定要删除这条记录吗?!','提示', MB_yesno+$00000020)=idYes then  mainfrm.ADODataSet1.delete;end;
------解决方案--------------------


procedure Tmainfrm.ToolButton3Click(Sender: TObject);
begin
if self.ADODataSet1.IsEmpty then exit;
if MessageBox(0,'确定要删除这条记录吗?!','提示', MB_yesno+$00000020)=idYes then
mainfrm.ADODataSet1.delete;
end;

楼上的正解,一般都是这么处理的。

热点排行