为什么ADOQuery不能Delete和Update????
查询没问题
更新和删除总实现不了
是什么原因????
问题点数:20、回复次数:14Top
1 楼3996906(我只是建议,不提供最后的解决方法)回复于 2005-01-07 18:01:43 得分 2
可以的啊,用错了吧Top
2 楼3996906(我只是建议,不提供最后的解决方法)回复于 2005-01-07 18:02:17 得分 2
偶用过对sql2k 的这些操作~~~~~~~~~~~别的不知道Top
3 楼ming6424(大笨蛋100分)回复于 2005-01-07 18:04:35 得分 0
我的意思是
有没有其他原因导致这种情况???Top
4 楼samchoy(老蔡)回复于 2005-01-07 20:34:06 得分 3
插入、更新、删除等查询要用ExecSQL(),不能用Open()或Active=trueTop
5 楼558047(三个代表万睡!八荣八耻万睡!)回复于 2005-01-08 08:00:50 得分 3
插入、更新、删除等查询要用ExecSQL(),不能用Open()或Active=true
对头Top
6 楼h98458(零点起飞)回复于 2005-01-08 08:09:55 得分 4
用ADOQuery查询出来的记录是只读的,不能用delete(),Edit(),update()方法,只能用
Add()进行这些操作
另:
delete,update,inser into 等语句用ExecSQL()方法
select语句用open()方法Top
7 楼hitmonkey(猴子)回复于 2005-01-08 08:29:45 得分 3
不对阿,可以更新的,只不过在更新前需要调用Edit(),然后再调用post(),同样删除也是一样的。但是一定要记住一定要将状态设置为乐观锁!Top
8 楼ming6424(大笨蛋100分)回复于 2005-01-08 09:23:20 得分 0
大家能不能写段详细的代码啊???
刚学BCB不到2周啊Top
9 楼ming6424(大笨蛋100分)回复于 2005-01-08 10:31:49 得分 0
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("DELETE from db1 where ( DB1FN = '"+filename+"')");
ADOQuery1->ExecSQL();
ADOQuery1->Close();
每次运行到ADOQuery1->ExecSQL();
都弹出一个对话框,提示
Access violation at address 1F487CAB in module 'maado15.dll'.Write of address 010DA008Top
10 楼h98458(零点起飞)回复于 2005-01-08 10:48:49 得分 2
改成这样:
ADOQuery1->SQL->Add("DELETE from db1 where DB1FN = '"+filename+"'");Top
11 楼ming6424(大笨蛋100分)回复于 2005-01-08 10:53:28 得分 0
To h98458(零点起飞) :
还是弹出一个对话框,提示
Access violation at address 1F487CAB in module 'maado15.dll'.Write of address 010DA008
Top
12 楼ming6424(大笨蛋100分)回复于 2005-01-08 10:59:02 得分 0
是msado15.dllTop
13 楼sunliwen780502(孙立文)回复于 2005-01-08 11:17:53 得分 1
你把CodeGuard启动起来,看看吧。楼上的答复应该可以了。Top
14 楼ming6424(大笨蛋100分)回复于 2005-01-08 11:47:37 得分 0
完整代码如下:
void __fastcall TForm1::DeleteD1Click(TObject *Sender)
{
TListItem *item;
AnsiString filename;
// 可能选中多项
while( ListView1->Selected ) {
item = ListView1->Selected;
filename = item->Caption;
filename = filename.c_str();
// 从数据库中删除
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("DELETE from db1 where ( DB1FN = '"+filename+"')");
ADOQuery1->ExecSQL();
// 从ListView中删除
ListView1->DeleteSelected();
}
}
运行后,CodeGuard的记录文件如下:
Error 00001. 0x400000 (Thread 0x1904):
Exception 0xC0000005: Access violation at 0x905A4D.
Call Tree:
0x00905A4D
0x1F668EF4(=MSDART.DLL:0x01:007EF4)
0x1F6687C7(=MSDART.DLL:0x01:0077C7)
0x77F830E7(=ntdll.dll:0x01:0020E7)
0x77F8EE02(=ntdll.dll:0x01:00DE02)
0x77E869C3(=KERNEL32.DLL:0x01:0259C3)Top




