书上说UPDATESQL可以对只读数据进行修改,我现在要对一个QUERY进行修改,QUERY 中的SQL STRING 是对主从两张表的查询,请问,是否可通过此控件对其数据修改
解决方案 »
- 如何终止程序~~~~~
- 问一个关于TDBGrid的问题,如果允许TDBGrid选中多行,怎么判断选中的是哪几行呢?谢谢!
- 怎样屏蔽窗体的ALT+F4键?
- http://www.17delphi.org
- 一个封装dll问题。老是Invalid pointer operation错误
- 怎样作出与adotable.tablename 一样样式的列表属性??
- outlook新建账号和邮件在本地的记录?(用程序访问)(高手请帮忙)
- listview中checkboxes设为true之后,每项checkbox被选中的事件是哪一个?
- 各位前辈,请教关于用树形结构保存用户权限设置及根据控制菜单和工具条的问题。总分100分。
- 我想把我程序要读的文件封装到cab里,如何打包,如何读?
- 如何可以将TImageList中的图片全部保存一个文件(如资源文件)与如何读出? 救急呀!!
- BUTTON与上,下,左,右键的冲突
http://expert.csdn.net/Expert/topic/2018/2018919.xml?temp=.6985132
http://expert.csdn.net/Expert/topic/2018/2018919.xml?temp=.6985132
该updatesql,然后双击该控件,选定你的表格的key字段, 和要更新的字段,
然后再按genertesql按钮,一切大功搞成。
还有你的query控件的cachupdate属性要设为
true,然后你就只需要在更新的时候用applyupdates 举一个简单的例子:
假如dbo.table1(id,name)
query1的sql为:
select id,name from table1 把query1的CacheUpdates = True,RequestLive 设成 false,
UpdaeObject=updatesql1, query1的afterpost为:
with Query1 do
begin
Database1.StartTransaction;
try
ApplyUpdates;
Database1.Commit;
except
Database1.Rollback;
raise;
end;
CommitUpdates;
end; updatesql1的modify为:
update table1
set name=:name
where id=:id 现在
query1.edit;
query1.fieldbyname('name').asStrign:='a';
query1.post;
(BDE面板上)
2.设置Database1属性:aliaseName:DBDEMOS ,DatabaseName:DB,
设置Query1属性:DataBaseName:=DB,
SQL:='Select C.*,o.* from Customer as c join orders as o on C.Custno=O.custno'
CacheUpdate设为True;UpdateObject设为UpdateSql1;3.双击Updatesql1控件,弹出对话框;按generate Sql,切换至'sql'标签
选择Modify 修改sql语句:
update customer
set
CustNo = :CustNo,
Company = :Company,
Addr1 = :Addr1,
Addr2 = :Addr2,
City = :City,
State = :State,
Zip = :Zip,
Country = :Country,
Phone = :Phone,
FAX = :FAX,
TaxRate = :TaxRate,
Contact = :Contact,
LastInvoiceDate = :LastInvoiceDate
where
CustNo = :OLD_CustNo
按确定
4.拖拉TBotton,TDBGRid,TDataSource至窗体名为(Btn1,Grid1,Datasource1)
连接Grid1.datasource:=Datasource1;Datasource1.dataset:=Query1
5.BtnOnlick事件:
query1.open;
Query1.First
Query1.edit;
Query1.FieldByname('Company').asstring:='company china';
Query1.post;
Query1.ApplyUpdates;
1.将Query 的CacheUpdate设为True;UpdateObject设为UpdateSql1;
2.双击Updatesql1弹出编辑器,在'sql'标签中编写修改数据的sql语句如:
update temptable set custNo = :custNo where custNo = :OLD_custNo
3.然后在程序中修改数据;
如;Query1.edit;
Query1.FieldByname('Field1').asstring:='ff';
Query1.post;
Query1.ApplyUpdates;
如此OK,即可改变数据库中的值。原理:Query1的数据集虽然是只读的,但利用缓冲(CacheUpdate)可以将修改值保存在其Delta中后用Post,ApplyUpdates来将修改值更新至实际数据库中的值.此时Query1将根据操作(修改删除插入从UpdateSql中寻找相应的SQl语句,并通过BDE传递至后台数据库中实际执行,这样达到修改只读数据集的目的。Query.sql.add('select * from table1 as T join Table2 as T2' )
Query.open;//该数据集即为只读