当前位置:主页>销售管理软件> 列表

删除数据时遇到错误:Delete命令会自动执行两次 找进销存源码

记账软件版1楼: 各位达人:
代码如下:
procedure TInformationForm.ToolButton3Click(Sender: TObject); //删除
begin
if not PlayerQuery.IsEmpty then
[b]PlayerQuery.Delete[/b]
else Application.MessageBox(''您要删除的球员记录不存在!'',''注意'',MB_IconInformation + MB_OK);
end;

procedure TInformationForm.PlayerQueryBeforeDelete(DataSet: TDataSet);
var
NameStr: string;
begin
NameStr := ''您真的要删除球员 “'' + PlayerQuery.Fieldbyname(''Name'').AsString+ ''” 的资料吗?'';
if Application.MessageBox(PAnsiChar(Namestr), ''删除确认'', MB_IconQuestion + MB_YesNo) <> IDYes then
[b]Abort;[/b]
end;

其中 PlayerQuery.Delete
Abort
都会自动自行两次 (按步测试)造成错误:
"无法为更新定位行.一些值可能已在最后一次读取后已改变";
"operation aborted";

希望各位高手帮我解决.

2楼: 代码问题
应该在按纽点击时做判断
QueryBeforeDelete是在删除之前执行删除
当然两次了 如进销存源码

3楼: ABORT换成EXIT试试?

4楼: 删除事件 PlayerQueryBeforeDelete



procedure TInformationForm.ToolButton3Click(Sender: TObject); //删除
var
NameStr: string;
begin
NameStr := ''您真的要删除球员 “'' + PlayerQuery.Fieldbyname(''Name'').AsString+ ''” 的资料吗?'';
if Application.MessageBox(PAnsiChar(Namestr), ''删除确认'', MB_IconQuestion + MB_YesNo) <> IDYes then Exit;

if not PlayerQuery.IsEmpty then
PlayerQuery.Delete
else
Application.MessageBox(''您要删除的球员记录不存在!'',''注意'',MB_IconInformation + MB_OK);
end;

5楼: royal1442 兄台:
这方法不行 我试过了, 会连续出现两次提示"是否删除" 都选是还是出显那错误:
"无法为更新定位行.一些值可能已在最后一次读取后已改变";
是不是有别的什么冲突? 我的方法原来没有问提的,后来改了改别的窗体的代码就出错了.

6楼: 看你的代码不象是有问题.会不会是别的地方有问题
设个断点,按f7单步执行调试一下.

记账软件版7楼: 应该是其它的窗体里也调用了这个窗体的事件,会不会,你其它窗体里的Query控件是复制这个窗体的Query控件而里面的事件没有删除呀!

8楼: 找到问题了! 是SQL语句的问题.
请问各位:有四个表,主键都是PlayerID(数字型),如何让它们能执行多重搜索后的删除操作?

9楼: 多人接受答案了。