说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

编辑:说三道四文库 发布时间:2018-07-16 07:02
HTML文档下载 WORD文档下载 PDF文档下载
怎么通过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;
先将RequestLive置为真,然执行查询,再修改数据!
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();
上面代码笔误:

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("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);
}
多谢大家,我是用access数据库,请问一下,怎样用sql只删除当前的那个纪录

难道要把当前纪录的唯一标识写到update命令里面?

非常感谢大家的帮助!
对SQL语句本身来说应该没有什么当前记录这个概念吧?
对数据集才有吧,
这样删吧
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("delete yourtab  where 你的条件");
try
{
Query1->ExecSQL();
}
catch(...)
{


}
实话说,我的确不明白,我的意思就是用TDBGrid联结TQuery的情况下,鼠标点的那个纪录。

怎么删除和更改?我一点也不清楚:)

我是做游戏的,对汇编和图形方面在行,sql从来没有用过,请教了:)
这样的话,直接用Query->Delete();就是删除当前的那条记录了。还是那句话,在执行
Query->Active=true;前,需要设定Query->RequestLive = true;
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘