用TQuery控件进行连接查询大疑问!(50分)

  • 主题发起人 主题发起人 bitzxs
  • 开始时间 开始时间
B

bitzxs

Unregistered / Unconfirmed
GUEST, unregistred user!
在FORM中放一TQUERY、TDATABASE控件,设置好相关属性后(之前已设置好BDE),在程序中写了如下语句:
QueryStr:='SELECT TABLE1.iID FROM TABLE1,TABLE2 WHERE TABLE1.iCostAnalyseID=TABLE2.iID';
QueryCostMachine.SQL.Add(QueryStr);
QueryCostMachine.Prepare;
QueryCostMachine.Open
但执行程序时出现‘Table is Read only'的错误,请问这是怎么回事?

注:(1)SQL SERVER 数据库中TABLE1,TABLE2的权限设为最高
(2)单独对TABLE1,TABLE2查询时没有问题!!!
 
多贴点代码出来看看.
 
procedure TFrmBiaoDi.QueryClick(Sender: TObject);
var
QueryStr:String;
begin
Query1.SQL.Clear;
QueryStr:='SELECT MachinePlan.sName FROM MachinePlan,CostAnalyse WHERE MachinePlan.iCostAnalyseID=CostAnalyse.iID';
Query1.SQL.Add(QueryStr);
Query1.Prepare;
Query1.Open;…………单步执行到此提示出错!

end;
 
你是不是设置了TQuery.RequetLive:=True???
 
你的 Query 的 RequireLive 属性 不能为 true
 
我是设了Query 的 RequireLive 属性为 true,
但若为FALSE,对QUERY所查的记录集不能修改了!
 
RequestLive只支持Local SQL啦,可用UpdateSQL空间!
 
1、使用 UpdateSQL 控件,在data控件设置UpdateObject属性
2、不用 UpdateSQL 控件也可以,写data 控件的OnUpdateRecord事件,在该事件
里面处理 cached update , 具有比 updatesql 更复杂更灵活的功能
 
For PiPi

怎样使用UpdateSQL 控件?不用 UpdateSQL 控件又怎样实现?能否举例?
 
updatesql 可以处理简单的东西
用:xxx 表示新修改的xxx字段的值 , :old_xxx 表示原来的xxx字段值

比如 里面的 UpdateSQL 可以
update tblname set xxx=:xxx where xxx=:old_xxxx

至于不用 UpdateSQL 控件,那要写data控件的OnUpdateRecord事件,不过
可以实现更复杂的修改。
在该事件里面你可以用其他的简单data控件修改数据库,返回时
设置 UpdateAction:=uaApplied 就表示你已经将要改的写进数据库了
 
更改tquery的sql属性前好象应先关闭该控件:
query1.close;
query1.sql.clear;
query1.sql.add(...);
query1.open;
 
同意bizzar
 
沈前卫说的对
 
如果想修改数据集附加一个DataSetProvider和一个ClientDataSet
设置如下 :
DataSetProvider1.DataSet := Query1;
ClientDataSet.Provider := DataSetProvider1;
DataSource1.DataSet := ClientDataSet1;
即将Query1的数据引入ClientDataSet1,此时ClientDataSet1数据就不是只读.


 
TB 答的有些特点,可否与我联系
 
My Email : tb_anywhere@163.net
 
多人接受答案了。
 
后退
顶部