如何把多句SQL语句嵌入DELPHI中并执行??(Tquery的SQL属性只能写一句)(200分)

  • 主题发起人 主题发起人 song1
  • 开始时间 开始时间
S

song1

Unregistered / Unconfirmed
GUEST, unregistred user!
各位高手:
小弟刚学DELPHI,请问如何把多句SQL语句嵌入DELPHI程序中并执行??(Tquery的SQL属性只能写一句).烦请附上详细例程.THANK SIR!
 
query1.sql.add('sql1 .....');
query1.sql.add('sql2 .....');
query1.sql.add('sql3 .....');
query1.sql.add('sql4 .....');
query1.sql.add('sql5 .....');
query1.active:=true;
 
呵呵,TQUERY.SQL是一个TSTRINGS类型的构件,可以多行。
有些SQL数据库要求每行结尾是分号';',有些就不需要, 不过还是加上好.
另外, TQUERY返回的内容是第一个SELECT语句(不能是变量赋值).
如果没有返回值的, 不能用ACTIVE:=TRUE, 要用QUERY1.EXECSQL;
 
是多句SQL语句不是多行.
 
the source of www should be modified as
query1.sql.add('sql1 .....');
query1.sql.add(' sql2 .....');
query1.sql.add(' sql3 .....');
Otherwise, The query1.SQL would seems like:
'sql1....sql2...sql3....'
maybe occur wrong.
Cytown said is correct.
 
to song:
if the sentense is mult.
You can use 'union' to connect them.
eg.
select a,b from tb1
union
select c as a,d as b from tb2
 
在一个query里面加入多个sql语句,有些时候是行不通的:例如:我要修改一个记录然后把他选择出来,这样,你就必须用两条sql调用来做:
query1.sql.text := 'update....';
query1.execsql;
query1.sql.text := 'select....';
query1.open;
而不能写成:
query1.sql.add('update...');
query1.sql.add('select...');
query1.open;
//因为在这个地方无法知道是使用execsql还是open
我猜你想加入多个语句的原因无非是想访问数据库快一些,这里有两个比较好的方法:
1. 在服务器端书写存储过程
2. 使用事务
 
在TQuery中写几条SQL语句是没问题的,但得注意几条语句对数据库的操作的同步。
假如有3个Update语句分别修改3个表,如果在处理中间一个的时候出现了错误,则
第一被修改了,最后一个没被修改,这样数据就会产生不同步的情况。此时,建议
采用事务处理,下面是Delphi的Example:
procedure TForm1.ApplyButtonClick(Sender: TObject);
begin
with CustomerQuerydo
begin
Database1.StartTransaction;
try
ApplyUpdates;
{try to write the updates to the database};
Database1.Commit;
{on success, commit the changes};
except
Database1.Rollback;
{on failure, undo the changes};
raise;
{raise the exception to prevent a call to CommitUpdates!}
end;
CommitUpdates;
{on success, clear the cache}
end;
end;
 
如果不和DB构件相连,可以如下:
const InsertSql = 'insert into table1 select from table2 where table2.key = %s';
DeleteSQL = 'delete from table2 where key = %s';
.
.
.
with TQuery.Create(nil)do
begin
try
DatabaseName := Database1.databaseName;
try
Database1.StartTransaction;
SQL.Add(Format(InsertSQl,[KeyVaslue]));
ExecSQL;
SQL.Clear;
Sql.Add(Format(DeleteSQL,[KeyValue]));
ExecSQL;
Database1.Commit;

except
Database1.Rollback;
{on failure, undo the changes};
raise;
end;
finally
Free;
end;

end;
 
只有某些数据库支持多句SQL同时提交,还是放弃把,不通用.
 
同意cAkk。
你用的要是Paradox,则就不支持多句的SQL(union除外),还是一句一句来吧.
 
如果是把SQL是嵌入DELPHI程序中,不使用TQURY该如何嵌入????
 
不用Query来嵌入SQL? 那就用TUpdateSQL来写吧
呵呵
 
用tstringlist.
或者多用几个变量就可以了嘛!
 
多人接受答案了。
 
后退
顶部