我想在DBGrid中修改数据并且更新数据文件,但是Dataset readonly,怎么解决呢?

TonyTonyQ 2004-04-09 04:48:52
dataset使用的TQuery,sql语句是:
select
studentid,
name,
graduateschool,
department,
schoolinglength,
graduatetype,
releasedate,
modifyman
from stu
where studentid='1'

把TQuery.RequestLive:=true,而且database组件的readonly是false,
但是每当TQuery.Edit时,却提示dataset是readonly的,没办法在DBGrid里修改
...全文
78 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
DebugXP 2004-04-10
  • 打赏
  • 举报
回复
我用ADODataSet没有这个问题
marsli2000 2004-04-10
  • 打赏
  • 举报
回复
修改完后 要 Query1.post 提交
Tensionli 2004-04-10
  • 打赏
  • 举报
回复
用POST不就行了
marsli2000 2004-04-09
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Edit;
if Query1.State = dsEdit then
begin
// add your method。。。。
end;
end;
samcrm 2004-04-09
  • 打赏
  • 举报
回复
换用ADODataSet,可以修改查询后的数据并自动更新回各个库。
marsli2000 2004-04-09
  • 打赏
  • 举报
回复
如果是你用了可视的TQuery 控件那么你要在 Object Inspector 修改 TQuery的

RequestLive 为true ,然后 用 Query1.Edit 就可以在DBGrid里修改数据.
如果不放心可以用 Query1.State 属性
在db.pas里声明
TDataSet = class(TComponent, IProviderSupport)
......

public
......
property State: TDataSetState read FState;
这里
TDataSetState = (dsInactive, dsBrowse, dsEdit, dsInsert, dsSetKey,
dsCalcFields, dsFilter, dsNewValue, dsOldValue, dsCurValue, dsBlockRead,
dsInternalCalc, dsOpening);

sInactive 表明数据集控件 is closed, so its data is unavailable.

dsEdit 表明数据集控件可以编辑

dsBrowse Data can be viewed, but not changed. This is the default

state of an open dataset.
其他的可以看 delphi 的帮助.
ln521 2004-04-09
  • 打赏
  • 举报
回复
用sql 语言吧
mmtxm 2004-04-09
  • 打赏
  • 举报
回复
事务处理
耙子 2004-04-09
  • 打赏
  • 举报
回复
建议使用缓存更新,结合 TUpdateSQL使用。
火龙岛主 2004-04-09
  • 打赏
  • 举报
回复
查询出来的语句,是不允许更新的,你只能单独处理!
TonyTonyQ 2004-04-09
  • 打赏
  • 举报
回复
database组件的readonly是false啊
hch_45 2004-04-09
  • 打赏
  • 举报
回复
database为readonly当然没方法改。

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧