procedure TForm1.DelbtnClick (Sender:Tobject);
var pos, i, rc:integer;
begin
rc:=table1.RecordCount;
pos:=table1.RecNo;
table1.edit;
table1.delete;
table1.edit;
for i:=pos+1 to rc do
table1.FieldByName ('编号').AsInteger := i-1;
table1.Post;
table1.Refresh;
end;
var pos, i, rc:integer;
begin
rc:=table1.RecordCount;
pos:=table1.RecNo;
table1.edit;
table1.delete;
table1.edit;
for i:=pos+1 to rc do
table1.FieldByName ('编号').AsInteger := i-1;
table1.Post;
table1.Refresh;
end;
解决方案 »
- 如何把子窗体的 四条边线隐藏不显示
- 單元文件中上面的uses和下面的uses有何區別?請指點!
- 局域网控制???
- 当我使用AdoTableBm.Delete删除记录时出现以下问题?
- 在开始web server application程序时,只要加入一个data module,就会出错,提示什么软件异常,怎么回事,谁给解释一下?
- !!!哪位有 树的遍历算法的程序,等着急用!!(最好是pascal写的)
- 如何让打印机退行?
- 有谁共鸣啊???!!
- 老鱼,又出事了,快来……
- 用DotCHM制作CHM帮助文件时, 编译之后汉字得到的是乱码, 怎么解决?
- 如何将一个长的字符串拆分成几个字符串?
- 如何在DELPHI中调用FLASH图片
post只对Edit和Insert有效,对Delete无效。
在BeforePost中写一些代码,跟踪就会发现Table1.Delete是不执行BeforPost的.
可以把Table1.Edit和Tabele1.Delete对调一下就不会出现错误了。
另外,你的代码好像不能满足你的要求的。
var pos, i, rc:integer;
begin
rc:=table1.RecordCount;
pos:=table1.RecNo;
table1.delete;
for i:=pos+1 to rc do
begin
table1.edit;
table1.FieldByName ('编号').AsInteger := i-1;
table1.Post;
end;
table1.Refresh;
end;
仔细看
删除当前的记录,后面的记录编号依次减1,保持连续?经常有这种数据操作的。
如果是,可以改成这样:
procedure TForm1.Button1Click(Sender: TObject);
var pos, i, rc:integer;
begin
rc:=table1.RecordCount;
pos:=table1.RecNo;
table1.delete;
for i:=pos to rc-1 do //delete以后,会指向下一条记录并变成浏览状态
begin
table1.edit;
table1.FieldByName ('编号').AsInteger := table1.FieldByName ('编号').AsInteger -1;
table1.Next; //注意循环
end;
table1.Refresh;
这样还会有问题:记录已经移动到最后了。要保持当前的位置,可以使用BookMark.
其实让编号自动减1,使用Query比较好。
with Query1 do
begin
Close;
SQL.Text:='update db1 set 编号=编号-1 where 编号>"'+IntToStr(pos)+'"';
Execute;
end;