100分:简单问题,为什么有时出现“无法更新;当前被锁定”???(100分)

  • 主题发起人 主题发起人 redsuns2001
  • 开始时间 开始时间
R

redsuns2001

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么在下面的事件中,有时会出现“无法更新;当前被锁定”的信息,有时又正常的呢?

if DBGrid1.SelectedRows.Count <= 0 then
Exit;

Self.Enabled:=false;
DBGrid1.DataSource.DataSet.DisableControls;
try
for i:=0 to DBGrid1.SelectedRows.Count-1 do
begin
DBGrid1.DataSource.DataSet.GotoBookmark(pointer(DBGrid1.SelectedRows.Items));
if IsMobile(Trim(DBGrid1.DataSource.DataSet.FieldByName('手机').AsString)) then
begin
Application.ProcessMessages;
MainForm.N28.Click; //调用某事件,此事件会返回SendStatus
if SendStatus=0 then
TrueFalse:='true'
else
TrueFalse:='false';

ADOQuery7.Close; //将上面的结果插入表中
ADOQuery7.SQL.Clear;
ADOQuery7.SQL.Add('insert into 生日表(编号,姓名,手机,生日时间,厂家,型号,车牌号码,发送时间,类型,状态) values('
+ADOQuery2.FieldByName('编号').AsString+','
+#39+ADOQuery2.FieldByName('姓名').AsString+#39+','
+#39+ADOQuery2.FieldByName('手机').AsString+#39+','
+#39+ADOQuery2.FieldByName('生日时间').AsString+#39+','
+#39+ADOQuery2.FieldByName('厂家').AsString+#39+','
+#39+ADOQuery2.FieldByName('型号').AsString+#39+','
+#39+ADOQuery2.FieldByName('车牌号码').AsString+#39+','
+#39+DateTimeToStr(Now)+#39+','
+#39+'新历'+#39+','+TrueFalse+')');
ADOQuery7.ExecSQL;
ADOQuery2.Delete; // 此DBGrid1 所对应的DataSet
end;
end;
DBGrid1.DataSource.DataSet.EnableControls;
Self.Enabled:=true;
Edit2.SetFocus;
DBGrid1.SetFocus;
except
on E: Exception do
begin
DBGrid1.DataSource.DataSet.EnableControls;
Self.Enabled:=true;
Edit2.SetFocus;
DBGrid1.SetFocus;
MessageBox(Handle,PChar(E.Message),'提示',MB_ICONWARNING);
Exit;
end;
end;
DBGrid1.DataSource.DataSet.EnableControls;
Self.Enabled:=true;
Edit2.SetFocus;
DBGrid1.SetFocus;
其中DBGrid1和ADOQuery2是指向同一个表
 
看看你的表有没有建主键
 
To
表中有建主键,是以《自动编号》作为主键的,只是在永久字段里没有此字段,这不会有影响吧??
 
有时会出现“无法更新;当前被锁定”的信息,有时又正常的

会不会跟多用户方式相关?
当其他用户对此表进行处理时,你无法处在独占方式下。
 
你有没有定义唯一索引?如果有,建议你在INSERT 之前先DELETE。
ADOQuery2.Delete;放在ADOQuery7.ExecSQL前面试试。
另外把下面语句先注释了调试:
//DBGrid1.DataSource.DataSet.DisableControls;
 
To ysm2004:是单用户使用

To sunrainwang:
没有定义唯一索引,如果定义了,那么按照您所说的:ADOQuery2.Delete;放在ADOQuery7.ExecSQL前面试试
这样ADOQuery7.ExecSQL执行时,还能插入刚才被删除的数据吗?
 
怎么没有人回答的呢?请大家帮帮忙呀,好急的呵!!!
 
(:D)可以考虑杀杀病毒,我以前好像也碰到过。
 
同样的问题(在CSDN上):
http://expert.csdn.net/Expert/topic/2894/2894705.xml?temp=.9663202

麻烦也请看看。
 
大家难道就这么忙吗?
 
后退
顶部