数据集访问控制请教!

6060 2003-12-26 01:19:14
大虾:
我用delphi7开发了一个基于oracle数据库的报表查询程序,用BDE连接。
其中,我是用query组件来进行查询数据。程序运行刚开始根据输入的查询条件要删除一个临时表,然后紧接着再建立这个临时表。
如:with query1 do
....
drop table aa_Tbl
....
with query1 do
...
create table aa_tbl
as
select .....(因为每次输入的条件不同,该select返回的记录也不同,所以建立的该临时表内容也会变化。)
建立完之后,再用这个临时表联接另一个表,创建另一个查询语句,得出报表所要的记录。

现在主要的问题是,这个程序要很多人使用,而且不排除他们是同时使用,万一当某个用户对该临时表进行删除操作,而另一个用户正刚创建完这个临时表并将要进行查询语句时,这个怎么办?而且每个用户输入的条件不一样,则他们所创建的临时表也不同,如何保证他们下一个查询所用的临时表是根据他们的输入条件建立的临时表,而不是另外用户所建的临时表?

希望高手给予答复!谢谢!
...全文
73 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
6060 2003-12-27
  • 打赏
  • 举报
回复
哎,我刚才做了测试,同时在我电脑打开两个该应用程序。
分别输入不同的查询条件,报表显示的时候,两个程序的报表相同,即均为最后一个查询时的数据。
(已经是采用了‘真爱无敌'提供的方法)
怎么办???


不知哪位大虾可说得详细点?谢谢!
jimeigang 2003-12-27
  • 打赏
  • 举报
回复
用事务实现
6060 2003-12-27
  • 打赏
  • 举报
回复
哎,我刚才做了测试,同时在我电脑打开两个该应用程序。
分别输入不同的查询条件,报表显示的时候,两个程序的报表相同,即均为最后一个查询时的数据。
(已经是采用了‘真爱无敌'提供的方法)
怎么办???
DragonBill 2003-12-26
  • 打赏
  • 举报
回复
不赞成用临时表的做法。

因为临时表中的数据也是根据其它表中查出来的一个记录集,何不拿这个记录集跟另一个表join得出报表生成的记录集?

应该写SQL就可以做到。
6060 2003-12-26
  • 打赏
  • 举报
回复
up
6060 2003-12-26
  • 打赏
  • 举报
回复
顶!
6060 2003-12-26
  • 打赏
  • 举报
回复
哎,我刚才做了测试,同时在我电脑打开两个该应用程序。
分别输入不同的查询条件,报表显示的时候,两个程序的报表相同,即均为最后一个查询时的数据。
(已经是采用了‘真爱无敌'提供的方法)
怎么办???
gencan 2003-12-26
  • 打赏
  • 举报
回复
用事务控制
zfang 2003-12-26
  • 打赏
  • 举报
回复
把整段Sql语句放到事务提交前!
可以是多句一起执行!

Database1.StartTransaction
with Query do
begin
Sql.clear
Sql.Add(str1);
Sql.Add(str2);
Try
ExecSql;
//扑获异常
if DataBase1.Errors.Count = 0 then
Database1.Commit; //成功,事务提交
else
Database1.Rollback; //失败,事务回滚
Except
Database1.Rollback; //失败,事务回滚
End;
end;
zfang 2003-12-26
  • 打赏
  • 举报
回复
用事务处理

同意楼上的
6060 2003-12-26
  • 打赏
  • 举报
回复
这段语句:
with query1 do
....
drop table aa_Tbl
....
with query1 do
...
create table aa_tbl
as
select .....
应放在以下这个事务处理过程的哪里呢?

procedure TForm1.QueryApplyClick(Sender: TObject);
begin
with Query1 do
begin
Database1.StartTransaction;
try
ApplyUpdates; //写入数据库
Database1.Commit; //写入成功,提交事务
except
Database1.Rollback; //写入失败,取消修改
raise;
end;
CommitUpdates; //写入成功后,清除数据库缓存
end;
end;

tudouwujun 2003-12-26
  • 打赏
  • 举报
回复
用事务可以实现!
delphi中的事务用Database实现,建议学习相关资料!
也可以用存储过程实现!
同样写SQL语句查询,但是是把SQL语句放到了数据库服务器上,delphi中利用TStoredProc控件实现!具体办法查看数据库编程的相关资料!
6060 2003-12-26
  • 打赏
  • 举报
回复
可否说得具体点吗?谢谢!

jsyhello 2003-12-26
  • 打赏
  • 举报
回复
用一个存储过程实现你的查询
outer2000 2003-12-26
  • 打赏
  • 举报
回复
用事务控制啊;

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧