Query控件的使用问题(100分)

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

beamer

Unregistered / Unconfirmed
GUEST, unregistred user!
各位兄弟:
本人用TQuery连接了一个DBGrid,用Button控件直接控制DBGrid表记录的增、删、改操作。
运行时出现“Query: Cannot modify a read-only dataset.”错误信息。将Query改用Table连接
DBGrid则正常,是否Query不支持EDIT、APPEND、DELETE方法,如果真这样Query中相对应的方法是
什么?另外对Query、Table連接的表中某列数据进行统计怎么做(循环方法除外)。[:D]
 
不是,是你的RequestLive没有设成True,另外,你还需要加上一个UpdateSQL控件。将你要
修改的栏位加进去,再将Query的CachedUpdates设为True.并在Query中的
procedure TFrmLimit.QLimitUpdateRecord(DataSet: TDataSet;
UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
begin
try
UpdateSQL.SetParams(UpdateKind);
UpdateSQL.ExecSQL(UpdateKind);
finally
UpdateAction:=uaApplied;
end;
end;
 
需要将REQUIVEALIVE属性设成TRUE
但如果QUERY进行了排序操作,那就没办法编辑该QUERY的,只能使用UPDATASQL编辑表中的数据
 
还是用SQL实现吧,比较方便
 
同意zhangkan说的,一直都是这样用的。
 
将REQUIVEALIVE属性设成TRUE时SQL语句中不能有ORDER BY语句且只能对一个数据表进行操作
如果你要用ORDER BY 语句的话那用SQL语句吧 INSERT INTO 等
 
qurry一般是用query1.add()
在add中写sql语句,实现它对数据库的编辑
 
将RequestLive设置为TRUE,然后加入以下代码执行sql语句
query1.close;
query1.sql.clear;
query1.sql..add( );//加入sql语句
qwery1.execsql;
 
To zhangkan:
如仁兄所言,增加一个UpdateSQL控件并设置相应属性值后,Button控件可直接在DBGrid表中增加一条新记录。
但不知为何不能用POST方法保存到数据表中。我这样写不知错在哪?

procedure TForm1.AppButClick(Sender: TObject);
begin
With QueryIn do
begin
open;
Edit;
Append;
post;
end;
end;
 
请改成这样
procedure TForm1.AppButClick(Sender: TObject);
begin
With QueryIn do
begin
open;
Edit;
Append;
...
ApplyUpdates;
CommitUpdates;
end;
end;
若你的数据库不是ORACLE,我建议你用ADOQUERY.
 
To zhangkan:
增加ApplyUpdates; CommitUpdates;两句后问题依旧存在。另外,列统计值我想赋给
一变量,该如何做? (Data Access控件我选用了TDatabase、TQuery、TUpDataSQL、TDataSource四
个,应该齐了?)
 
To beamer:
列统计值可以另外添加一个TQuery,name为Query,再定义一变量X
with Query do
begin
Active:=False;
query.RequestLive :=false;
SQL.Text:='SELECT SUM(LieName) FROM BiaoName ';
Active:=True;
end;
X:= xmjhform.query.Fields[0].AsFloat ;
其中LieName 为你所要统计的列名,BiaoName为表名
 
为什么不是orable才建议用adoQuery?堆oracle使用adoquerry有什么困难吗?
另外问一下在querry的updaterecord()中加入:
UpdateSQL.SetParams(UpdateKind);
UpdateSQL.ExecSQL(UpdateKind);
是什么作用?有必要吗?
 
多人接受答案了。
 
后退
顶部