读书人

delphi有关问题:请问一个折磨了小弟我

发布时间: 2012-03-23 12:06:21 作者: rapoo

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;

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

读书人网 >.NET

热点推荐