用adoquery删除记录的问题(10分)

  • 主题发起人 主题发起人 嫩手
  • 开始时间 开始时间
我在用ADO更新数据时,也出现‘无法为更新定位行’错误,为数据表设置主键后问题解决。
主要是ado要有一个唯一的行标识符,好象ado严格按照了关系数据库的理论设计(不确定),
所以会这样。
 
>>不在编辑或插入状态:
用: adoquery1.edit
试试看!
 
我以前也碰到过,把edit属性去掉。不行的化就缓存更新一下。如果是sqlserver等大型数据库的话
最好不要用ado的删除,而拥数据库本身的删除
 
Delphi 6.0 的ADOQuery1.Delete 比较好,可用ADOConnection1的事务保护一下
 
大家说了一堆,没有能解决问题的真正办法呀?
这个问题,我也总遇到。可没什么好办法。高手快出现~~~~~
 
我从来没碰到过这种问题。 因为我从来不用TADOxx.Delete删除记录。 我都是另外用一个TADOCommand执行SQL命令来删除的。 执行完当前ADODataSet.ReQuery一下即可。
 
to another_eyes:
我是刚开始接触ado的,可以给我一个简单的例子吗?谢谢!x-delphi@163.com
 
如果是用SQLSERVER的话,为何不试试在SQLSERVER中编写一个存储过程!
通过在程序中调用这个存储过程,就可以解决以上问题
例:
在SQLSERVER中建立一存储过程为:MS_DEL_CONSUMER
[对表CONSUMER中ID等于指定值的记录进行删除]
CREATE PROCEDURE MS_DEL_CONSUMER
@ID CHAR(8)
AS
IF EXISTS(SELECT ID FROM CONSUMER WHERE ID=@ID) THEN
DELETE FROM CONSUMER WHERE ID=@ID

在您的客户端调用此存储过程即可!
with adosp_dele_consumer do
begin
parameters.parameterbyname('@id'):='0001';
try
execproc;
except
//在此处输入错误提示信息;
end;
end;
祝好运!
 
当你删除记录后.adoquery控件过滤的记录如果有就不会出错,如果没有了当然出错了
 
我用的是access2000
 
用AdoCommand
删除呢
Delete from Table where 条件

 
我不太会使adocommand,用adoquery不行吗?
 
我现在基本上已经解决,还没出问题,你们还有别的办法吗?我还不知道行不行,给出
结果,帮忙看看!
AdoQuery.UpdateCursorPos;
 
你使用的是什么数据库,我用Access就碰到过这种问题,其它数据库我没有遇到这种问,
实在没有别的方法就这样改决在
procedure TForm1.ADOQuery1AfterDelete(DataSet: TDataSet);
begin
adoquery1.close;
adoquery1.open;
end;
这样会极为影响效率,实在没有办法就这样做呀。

 
上面说的我都试过,不行。

例如,

控件 DataSource1,ADOQuery1,DBGrid1

DataSource1.DataSet := ADOQuery1

DBGrid1.DataSource := DataSource1

ADOQuery1 的 SQL 如下:

SELECT HW.ID AS 编号,
HW.NAME AS 名称,
HW.GG AS 规格,
HW.JLDW AS 计量单位,
FL.NAME AS 分类
FROM HW, FL
WHERE FL.ID = HW.FLID

对 DBGrid1 中的记录如何进行操作(添加、修改、删除)?
 
d5的Ado技術不成熟,用d5你使用Ado會有麻煩的,用d6吧。要麼你就用BDE.
 
用另一个ADOQuery来删。 呵呵。
with adoquery1 do
begin
n := recno;
adoquery2.sql.text := 'delete from hw where id='''+fieldbyname('编号').asstring;
adoquery2.execsql;
requery;
recno := n;
end;
 
1.刷新对SQL服务器(如SQL-Server)是没有用的,无论ADO还是BDE,建议Close,再Open
然后定位一下
2.如果你的ADOQuery是多表关连查询,用Delete删除是会删除所有相关表的记录!!!
3.删除以后用1的方法重新打开一下
 
ADOQuery1.Delete;

出错信息:缺少更新或刷新的键列信息
 
多人接受答案了。
 
后退
顶部