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;
[解决办法]
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;
楼上的正解,一般都是这么处理的。