急,access数据库能否支持在一个ADOQUERY中一次执行多条语句?(50分)

  • 主题发起人 主题发起人 e518
  • 开始时间 开始时间
E

e518

Unregistered / Unconfirmed
GUEST, unregistred user!
就是一些insert,update在一起一次执行,否则用事务时,较烦。
 
不是吧,没人知道???
 
当然可以,,,,,用adoquery,,,
你是不是分多了,问好玩的???这事你一试就知道了啊.
 
当然可以,而且access的查询benshen就支持多个sql同时运行,还支持参数呢!更别说
adoquery了,就算adoquery不支持你也可以写在access的查询中,当作表或存储过程调用
 
楼上的兄弟, 好像不行吧?
access什么时候支持存储过程了?
access只支持单一语句的查询,如果有什么方法可以支持多语句,望请告知[:D]
 
我就是用两条insert时(中间用分号(:)隔开),说是在结束后还有字符,如不加分号
又说没结束,真是烦。

如果不支持多条,若我要同时修改多个表,用事务处理,可就真是烦了。
 
个人认为 access 不支持(一次执行多条语句)的,用事务处理吧。
 
你们为什么不尝试一下呢?access查询支持参数接口,支持同时运行多个sql语句,
看看帮助也好啊.不行就打开一个查询,右键单击后菜单选择查询类型->参数...
例如我写的一个查询:
PARAMETERS 期初日期 DateTime, 期末日期 DateTime, 锁定类别 Text ( 255 ), 锁定商品 Text ( 255 );
SELECT a.商品类别, a.类别名称, a.商品编号, a.商品名称, fix((a.期末数量+c.销货数量-b.进货数量)/d.换算关系) AS 期初一级数量, (a.期末数量+c.销货数量-b.进货数量)-fix((a.期末数量+c.销货数量-b.进货数量)/d.换算关系)*d.换算关系 AS 期初二级数量, a.期末金额+c.销货金额-b.进货金额 AS 期初金额, fix(b.进货数量/d.换算关系) AS 进货一级数量, b.进货数量-fix(b.进货数量/d.换算关系)*d.换算关系 AS 进货二级数量, b.进货金额, fix(c.销货数量/d.换算关系) AS 销货一级数量, c.销货数量-fix(c.销货数量/d.换算关系)*d.换算关系 AS 销货二级数量, c.销货金额, fix(a.期末数量/d.换算关系) AS 期末一级数量, a.期末数量-fix(a.期末数量/d.换算关系)*d.换算关系 AS 期末二级数量, a.期末金额
FROM ((sp_期末 AS a LEFT JOIN sp_进 AS b ON a.商品编号=b.商品编号) LEFT JOIN sp_销 AS c ON a.商品编号=c.商品编号) LEFT JOIN 商品主档 AS d ON a.商品编号=d.编号;
 
楼上的兄弟真是搞笑,ACCESS查询当然可以定义参数,但是可以写多条SQL语句吗?
我看你写了一大堆,不过还是只有一条SQL语句,你试试写一下两条以上的SQL吧,
请不要误导!
 
其实我也发现我的确有点搞笑,对不起大家。以后不在论坛上胡说八道了。难为wbtvc了,
还劳神看。我回答的也太不负责任了。再次抱歉。
同意mygod!等所有用tadoquery的建议,这才是真正的解决办法。
 
还有一点问题呀,单个tadoquery可以写多条SQL,一起执行吗?好像还是不行吧?
可以的话,望请举个例子,谢!
 
大家真懒,为什么不写二条试一下吗??真是的!
 
这个问题是以前就问题的,ACCESS我一直只能一条条的操作的。

以致于我再在都不用ACCESS数据库了。
 
好像根本就不支持,也没有象oracle那样支持读入一个*.sql文件,一条一条的进行执行。
 
Tadoquery好像也仅支持select返回纪录集的多条语句.采用nextdataset方法返回下一句sql
的纪录集.
 
唉,大家都比我还要懒,现在给一段代码,大家看看这是不是支持多条语句???
这里代码我编译通过,执行正确!!如果大家认为没错的话,请楼主结了贴子算了,
真不知道这么多人是怎么搞的!怎么说不支持多条??[:(!]
with adoquery1 do
begin
if active then close;
sql.Clear;
sql.Add('select * from 工资表');
execsql;
sql.Clear;
sql.Add('delete from 工资表');
execsql;
sql.Clear;
sql.Add('select * from 工资表');
execsql;
open;
end;
我就看不出,这跟
with adoquery1 do
begin
if active then close;
sql.Add('select * from 工资表');
sql.Add('delete from 工资表');
sql.Add('select * from 工资表');
execsql;
open;
end;
有什么不方便的地方????
如果要用到参数的时候,也可以用access里的“查询”,我想这里就相当于c/s数据库
中的存储过程吧?
 
mygod!兄弟:
你上面属于多次执行adoquery,而且也是属于一次执行一条SQL的方式哦, 和下面的完全不同嘛
 
我经常这样用:
把所有的应该执行的命令放在一个TStringList中,然后:
function TfrmInputData.ExecSQLList(sList:TStringList;sCaption:String):Boolean;
var
i:Integer;
begin
//运行所有的sql语句,并做错误处理。
frmMain.StatusBar1.Panels.Items[1].Text:='计算合计数与保存数据完毕;待命:';
Application.ProcessMessages;

try
with frmProgress do
begin
lblCaption.Caption:='正在保存'+sCaption+'...';
Caption:='保存数据';
Gauge1.MaxValue:=sList.Count;
Gauge1.Progress:=0;
Visible:=true;
BringToFront;
end;

for i:=0 to sList.Count-1 do
begin
cm.CommandText:=sList.Strings;
cm.Execute;

frmProgress.Gauge1.Progress:=i;
Application.ProcessMessages;
end;

frmProgress.Hide;
Result:=True;
except
on e:Exception do
begin
ShowMessage(e.Message);
Result:=false;
end;
end;
frmMain.StatusBar1.Panels.Items[1].Text:='计算合计数与保存数据完毕;待命:';
end;
 
感谢以上多位热心的朋友,我看这个问题也是该结束了,好,现在就散分,
to zhbforce,mygod!
,我目前也是你这样做,但会出现另一个问题:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1376143
欢迎大家到这看看。
 
用ADOCommand更简单,连SQL.Clear都省了
 
后退
顶部