怎么通过Query修改数据库的值?

怎么通过Query修改数据库的值?

Query->FieldByName("ID1")->AsString = "0";

报告
Project ColorControl.exe raised exception class EDatabaseError with message 'Query: Dataset not in edit or insert mode'. Process stopped. Use Step or Run to continue.

如果加上了Query->Edit(); 

就会报告
Project ColorControl.exe raised exception class EDatabaseError with message 'Query: Cannot modify a read-only dataset'. Process stopped. Use Step or Run to continue.

何解?
---------------------------------------------------------------

你有没有修改的权限啊?

Cannot modify a read-only dataset

Query->Edit(); 
Query->FieldByName("ID1")->AsString = "0";
Query->Post();

就应该没事的
---------------------------------------------------------------

用SQL语句好了
update

---------------------------------------------------------------

mQuery->Edit();
       TBlobField * pField=(TBlobField *)mQuery->FieldByName(mFieldName);
       TBlobStream *pmem=new TBlobStream(pField,bmWrite);
       pmem->Seek(0,soFromBeginning);
       mPms->SaveToStream(pmem); 
       delete pmem;
       mQuery->Post();
---------------------------------------------------------------

Query->RequestLive=true;
---------------------------------------------------------------

Query1->RequestLive = true;
Query1->Open();
Query1->Edit();
Query1->FieldByName("字段")->AsString = "dfasdflsdjf";
Query1->Post();
Query1->Close();
---------------------------------------------------------------

Query->Close();
  Query->SQL->Clear();
  Query->SQL->Add("Update "+库名+"set ID1=0 where "+你的条件);
  Query->Active=true;
---------------------------------------------------------------

可能原因:
1、你没有修改权限
2、数据库重读;可以通过sp_dboption查看信息
---------------------------------------------------------------

采用Query和TTABLE不一样,使用TTable时对查询的数据可以用Edit(); 方法来修改,而Query查询出的数据集只读,因此不能修改,要修改就需要重写UPDATE语句。

如:

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->("update yourtab set ID1='0' where 你的条件");
Query1->ExecSQL();

---------------------------------------------------------------

最好使用SQL语句更新记录,上面已经有人说了。如果楼主非要用你说的方法修改的话,
在执行Query->Active = true;之前,设定Query->RequestLive=true;就可以了。但是
需要注意的是,不是所有的数据库都支持RequestLive这个属性的。
Query->RequestLive = true;
try {
    Query->Active = true;
    //......
    Query->Edit();
    Query->FieldByName("ID1")->AsString = "0";
    Query->Post();
}
catch(EDatabaseError& e) {
    ShowMEssage(e.Message);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值