ADO访问数据库,无法删除数据(100分)

阿魁

Unregistered / Unconfirmed
GUEST, unregistred user!
使用TAdoQuery删除数据,如下:
if adoQuerySybase.Active then adoQuerySybase.Active := false;
adoQuerySybase.SQL.Clear;
adoQuerySybase.SQL.Add('delete from ICON_RING where PHONE_CLASS='''+phone_class+''' and PHONE='''+PHONE+''' AND SMS_CLASS='''+SMS_CLASS+''' AND SMS_ID='''+SMS_ID+'''');
adoQuerySybase.execSql;
提示“msado..dll错误”。

我又采用另一种方式:
if adoQuerySybase.Active then adoQuerySybase.Active := false;
adoQuerySybase.SQL.Clear;
adoQuerySybase.SQL.Add('select * from ICON_RING where PHONE_CLASS='''+phone_class+''' and PHONE='''+PHONE+''' AND SMS_CLASS='''+SMS_CLASS+''' AND SMS_ID='''+SMS_ID+'''');
adoQuerySybase.Open;
while not adoQuerySybase.Eof adoQuerySybase.delete;
adoQuerySybase.Close;
提示“操作影响过多的行”(因为有重复记录所以在select时,记录集有可能不至一条);

改成adoQuerySybase.deleteRecords,提示不支持操作。

最终这样解决了问题:
if adoQuerySybase.Active then adoQuerySybase.Active := false;
adoQuerySybase.SQL.Clear;
adoQuerySybase.SQL.Add('select * from ICON_RING where PHONE_CLASS='''+phone_class+''' and PHONE='''+PHONE+''' AND SMS_CLASS='''+SMS_CLASS+''' AND SMS_ID='''+SMS_ID+'''');
adoQuerySybase.Open;
while not adoQuerySybase.Eof do
begin
try
adoQuerySybase.Delete;
except
//noop
end;
adoQuerySybase.Next;
end;
adoQuerySybase.Close;

问题是解决了,但不知道原因所在,那位高手帮忙,谢谢!
 
是不是你ADO连数据库的问题啊,你选的用户名是什么?
 
缺省的时候删除数据会对比所有字段,请做好数据库表的主键即可解决此问题。

http://www.delphibbs.com/delphibbs/dispq.asp?lid=1144133
 
我上次是这样解决的,
locktype设为ltBatchOptimistic
 
access2000数据库,使用缺省用户,直接delete无法删除数据,头疼啊~~·
 
把单引号换成双引号试试,或者不要引号
adoQuerySybase.SQL.Add('delete from ICON_RING ' +
'where PHONE_CLASS=' + phone_class+ +
' and PHONE=' + PHONE +
' AND SMS_CLASS= ' + SMS_CLASS +
' AND SMS_ID='SMS_ID ');
 
字段类型是字符型,怎么能不要引号呢?
 
我用的PARADOX也是这样的
是不是ADOTABLE的问题
 
再添加一个TADOQUERY,以上操作在新的TADOQUERY试试
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
724
import
I
I
回复
0
查看
468
import
I
顶部