with query1 do begin Close; SQL.Clear; SQL.Add('SELECT mes_id,send_rate,message_state,send_time,count(mes_id) as rate4 FROM tab_message where message_state=0 group by send_rate order by send_rate desc,mes_id asc'); active:=true; open; first; //进行数据表的排序 end; 我要如何才能开始执行另一条SQL语句呢,比如update 什么的,
好像是只取了第一个Sql的数据
with query1 do begin Close; SQL.Clear; SQL.Add('SELECT mes_id,send_rate,message_state,send_time,count(mes_id) as rate4 FROM tab_message where message_state=0 group by send_rate order by send_rate desc,mes_id asc'); active:=true; open; first; //进行数据表的排序 end; 我要如何才能开始执行另一条SQL语句呢,比如update 什么的,
if send_state=0 then begin query1.Edit; query1.FieldByName('message_state').asinteger:=1; query1.Post; end else begin query1.Edit; query1.FieldByName('message_state').asinteger:=2; query1.Post; end;这样能达到修改该字段的值的目的吗?
如果你query1里的查询是从两个或以上的表中,你这样做就不行。
if send_state=0 then begin query1.Edit; query1.FieldByName('message_state').asinteger:=1; query1.Post; end else begin query1.Edit; query1.FieldByName('message_state').asinteger:=2; query1.Post; end;用这样的办法修改的数据没有真正的写入到数据库中啊,请问要如何才能写入表中啊,
为什么不用query的sql语句的update来改写记录?
看看这个算不算:) with query1 do begin sql.clear; sql.add('select a,b,c,d from table1'); open; var1 := fields[0].asstring; var2 := fields[1].asstring; var3 := fields[2].asstring; close; sql.clear; sql.add('select a,b,c,d from table2'); open; var4 := fields[0].asstring; var5 := fields[1].asstirng; close; end;//with
to liuj0771():你的语句能将查询结果修改后写入到表中吗,语句中的VAR1。。5是什么作用啊?!
在DELPHI中用QUERY1。SQL.Add('select send_rate,message_state FROM tab_message where message_state=0 group by send_rate order by send_rate desc,mes_id asc');执行这个SQL语句时,提示‘TABLE IS READ ONLY’请问是怎么回事啊,我用的是MYSQL数据库,该语句在MYSQL中执行没问题的啊
如果你可修改更新的数据集(DataSet2)与第一次查出的数据集(DataSet1)来源于同样的表的话,你就没有必要去执行两个SQL.只要这样做就可以了。 Update TableName Set Field1 = Value1,fidld2 = Value2 ... Where "你的条件" 如果你是要根椐查出的数据集一中的值作为条件,去更新另一个数据集的话,就应该用另一个Query 来执行你的数据更新语句。 with query1 do begin Close; SQL.Clear; SQL.Add('SELECT mes_id,send_rate,message_state,send_time,count(mes_id) as rate4 FROM tab_message where message_state=0 group by send_rate order by send_rate desc,mes_id asc'); active:=true; open; first; //进行数据表的排序 for i := 0 to recordcount - 1 do begin Query2 := TQuery.Create(Application); Query2....//指定数据连接。 Query2.close; Query2.SQL.Clear; Query2.SQL.Add('Update ....'); Query2.SQL.EXEcSQL; end; end;
如果你只是想在一个Query中执行两条以上的SQL语句的话,那就太简单了: (1)在SQL Server 中:直接书写多条,一次执行就可,因为SQL Server 数据库支持。 (2)在本地库中执行完一条后: with Query1 do begin ... Close; SQL.clear; SQL.Add('') ... Close; SQL.clear; SQL.Add('') ... Close; SQL.clear; SQL.Add('') ... Close; SQL.clear; SQL.Add('') end;以上的代码只是示例性的。 有问题可以给我发Email.
可是取数据集时就不对了,呵呵。
你知道取哪个么?
begin
Close;
SQL.Clear;
SQL.Add('SELECT mes_id,send_rate,message_state,send_time,count(mes_id) as rate4 FROM tab_message where message_state=0 group by send_rate order by send_rate desc,mes_id asc');
active:=true;
open;
first; //进行数据表的排序
end;
我要如何才能开始执行另一条SQL语句呢,比如update 什么的,
begin
Close;
SQL.Clear;
SQL.Add('SELECT mes_id,send_rate,message_state,send_time,count(mes_id) as rate4 FROM tab_message where message_state=0 group by send_rate order by send_rate desc,mes_id asc');
active:=true;
open;
first; //进行数据表的排序
end;
我要如何才能开始执行另一条SQL语句呢,比如update 什么的,
begin
query1.Edit;
query1.FieldByName('message_state').asinteger:=1;
query1.Post;
end
else
begin
query1.Edit;
query1.FieldByName('message_state').asinteger:=2;
query1.Post;
end;这样能达到修改该字段的值的目的吗?
begin
query1.Edit;
query1.FieldByName('message_state').asinteger:=1;
query1.Post;
end
else
begin
query1.Edit;
query1.FieldByName('message_state').asinteger:=2;
query1.Post;
end;用这样的办法修改的数据没有真正的写入到数据库中啊,请问要如何才能写入表中啊,
with query1 do begin
sql.clear;
sql.add('select a,b,c,d from table1');
open;
var1 := fields[0].asstring;
var2 := fields[1].asstring;
var3 := fields[2].asstring;
close;
sql.clear;
sql.add('select a,b,c,d from table2');
open;
var4 := fields[0].asstring;
var5 := fields[1].asstirng;
close;
end;//with
(1)查出一个满足条件的数据集(DataSet1)。
(2)从第一条到最后一条游历整个数据集(DataSet1),然后根据数据集(DataSet1)每一条记录的具体情况对数据(DataSet2)进行一些修改。
如果你可修改更新的数据集(DataSet2)与第一次查出的数据集(DataSet1)来源于同样的表的话,你就没有必要去执行两个SQL.只要这样做就可以了。
Update TableName Set Field1 = Value1,fidld2 = Value2 ... Where "你的条件" 如果你是要根椐查出的数据集一中的值作为条件,去更新另一个数据集的话,就应该用另一个Query 来执行你的数据更新语句。
with query1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT mes_id,send_rate,message_state,send_time,count(mes_id) as rate4 FROM tab_message where message_state=0 group by send_rate order by send_rate desc,mes_id asc');
active:=true;
open;
first; //进行数据表的排序
for i := 0 to recordcount - 1 do
begin
Query2 := TQuery.Create(Application);
Query2....//指定数据连接。
Query2.close;
Query2.SQL.Clear;
Query2.SQL.Add('Update ....');
Query2.SQL.EXEcSQL;
end;
end;
如果你只是想在一个Query中执行两条以上的SQL语句的话,那就太简单了:
(1)在SQL Server 中:直接书写多条,一次执行就可,因为SQL Server 数据库支持。
(2)在本地库中执行完一条后:
with Query1 do
begin
...
Close;
SQL.clear;
SQL.Add('')
...
Close;
SQL.clear;
SQL.Add('')
...
Close;
SQL.clear;
SQL.Add('') ...
Close;
SQL.clear;
SQL.Add('')
end;以上的代码只是示例性的。
有问题可以给我发Email.
query1.Edit;
query1.fieldbyname('message_state').asinteger:=2;
query1.post;
try
query1.applyupdates;
query1.commitupdates;
except
query1.cancelupdates;
raise;
exit;
end;
query1.fieldbyname('message_state').asinteger:=2;
query1.post;
try
query1.applyupdates;
query1.commitupdates;
except
query1.cancelupdates;
raise;
exit;
end;
这段代码不能更新数据表啊,并且提示:update failed啊,请帮个忙啊?
with query1.sql do
begin
clear;
add('begin tran ');
add('insert .....');
add('update .......');
add('commit tran');
end;
query.execsql;