共两个表:一个为a(字段为:number,age);
另一个为b(字段:name,number);
想以age为条件在b内查询,并显示在dbgrid1内:
with CXQ2 do
begin
close;
SQL.clear;
SQL.Add('select *');
SQL.Add('from "'+'d:\b.db'+'"');
SQL.Add(' where number in(select number from "'+'d:\a.db'+'" '+' where age>"'+10+'"'+')');
open;
end;
可查出结果问题是:使用语句 SQL.Add(' where number in(select number from "'+'d:\a.db'+'" '+' where age>"'+10+'"'+')');导致dbgrid1总是只读的,我想使它可编辑,上述语句该怎么改???
真的要郁闷死了,急啊
请各位帮忙!!
先深表谢意!!!!!!!!!!!!
另一个为b(字段:name,number);
想以age为条件在b内查询,并显示在dbgrid1内:
with CXQ2 do
begin
close;
SQL.clear;
SQL.Add('select *');
SQL.Add('from "'+'d:\b.db'+'"');
SQL.Add(' where number in(select number from "'+'d:\a.db'+'" '+' where age>"'+10+'"'+')');
open;
end;
可查出结果问题是:使用语句 SQL.Add(' where number in(select number from "'+'d:\a.db'+'" '+' where age>"'+10+'"'+')');导致dbgrid1总是只读的,我想使它可编辑,上述语句该怎么改???
真的要郁闷死了,急啊
请各位帮忙!!
先深表谢意!!!!!!!!!!!!
CachedUpdate:TureRequestLive:Ture
dbgrid1的Readonly设为False;
query1的LockType设为ltOptimistic
换个新的Dbgrid
我已经
把dbgrid1的options的dgEditing设为True;
dbgrid1的Readonly设为False。
不过没找到query的LockType这一属性啊
结果当然还是只读了,请指点,谢谢了!!
我已经全换过几次了,都一样
去掉语句:SQL.Add(' where number in(select number from "'+'d:\a.db'+'" '+' where age>"'+10+'"'+')');就可以编辑,一切正常
而当一加上这条语句就一直是只读了
多谢帮助!请再帮我想想!
先谢谢大家了!
dbgrid的readonly
改过了,一直不行!
请继续指点
谢了
TQuery控件可以编辑除了CachUpdate要设为True外在UpdateObject属性中也要指定一个TUpdateSQL控件用于ApplyUpdate操作。要是UpdateObject属性中没有填写任何TUpdateSQL控件的名称的话Query是不会允许被修改的。
楼主可以试一试。
用AdoQuery和用query时,sql语句差不多吗?只是将语句中query改为adoquery吗? 用table进行复杂查询,不好做啊,就说这个例子吧,该怎么写查询语句呢?
TQuery的CachUpeddates设为True,在UpdateObject属性中指定一个TUpdateSQL控件用于ApplyUpdate操作。
这样确实可以dbgrid1内容可以编辑了,可是当我修改数据后,不知道该怎么保存,我用语句query1.edit;query1.post;之后,还是保存不了,也就是说我对其数据的修改都无效。假如
设CachUpeddates设为 False,dbgrid在焦点移动时能自动保存, 可设CachUpeddates设为 False时
dbgrid又成只读了。
是不是要给TUpdateSQL的deleteSQL或insertSQL或ModifySQL写动态sql语句啊?
该怎么写啊?
请帮忙,谢谢了!!!
谢谢你!可是我还是郁闷:规定了用db表,没法用Tadoquery了,对吧?
TTable只能打开一个表的话,那我上面要实现的那种查询功能是没法实现了,对吧? 请再帮我想想!谢谢了!!
工作忙到现在才有时间答复。你把TUpdateSQL拖拉到窗体后双击控件图标就可以打开生成更新语句的对话框,可以帮你产生插入、更新和删除SQL语句,操作不是很复杂,你可以自己摸索一下,不行再问。产生了更新SQL语句后你要自己为TQuery加入ApplyUpdate方法这样你修改的内容才会保存到物理数据库中。至于中间的过程DELPHI可以帮你完成,一般不用你操心。
db表也可以用Tquery的,在SQL中使用连接就可以查询几个表的数据。
谢谢你!我双击TUpdateSQL时提示:Unable to determine field names for CXQ2.
CXQ2是查询表b.db的Tquery控件,不过还是可出现 生成更新语句的对话框,这样会没问题吗?
要更新的话需要在对话框内写语句吗,可是具体修改是用户完成的,意思是说应该写语句使:对该
表的任何修改都可用它,比如要修改dbgrid1显示的对D:\b.db的查询结果,该怎么写呢?请帮忙?
谢谢了!!等你好消息了
出现Unable to determine field names for CXQ2.是因为你在打开TUpdateSQL时数据源关联的那个TDatabase控件无法打开所致,至少在我自己的机器上是这样。在TUpdateSQL中你设定需要更新的表和字段就可以,SQL语句由控件自动产生,调用也由系统自动进行,你只须调用ApplyUpdate就可以了。不过要注意的是这个TUpdateSQL只能更新一个表,如果你要更新两个以上的表可能要在OnUpdateRecord事件函数中写自己的更新代码了。对于任何数据感知控件(TDBEdit,TDBGrid等)对数据集的修改数据集只需调用ApplyUpdate就可以了。
工作太忙,现在才回答不好意思。#:)
非常感谢!我再试试看!
怎么设要更新的表及字段啊?我双击TUpdateSQL的modifysql后,在第一行写“name”,第2行写“number”,可调用ApplyUpdate时提示‘token not found.token:name number’
怎么解决?谢谢!!
那个字段发生修改了,直接用另外一个query,使用Update语句写入数据库,当然如果有多条更新,
加上事务控制,多表更新也可以这样
对。指定表就可以了(原以为在TUpdateSQL内指定呢:)),不过当表的位置改变之后就不行了
表的位置不定,这该怎么办?要程序中自己写相关语句吗?
谢谢!