查询等待时间过长,程序像死了一样,怎么办?

thunderzhu 2003-10-09 01:55:58
超长查询,从开始查询到读取第一条记录,要半个小时以上,如何让程序在这段时间内能接受按键、鼠标操作,以便能取消查询?

环境:pb8.03 + oracle 8i
...全文
103 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
119119 2003-11-05
  • 打赏
  • 举报
回复
我并不同意用多线程在PB里面,谈不上真正的多线程。
劝你多用存储过程试一试,可能时间可以省一半多。
fhongke 2003-10-30
  • 打赏
  • 举报
回复
所有PB程序是低级的程序员也就顺理成章了!
哥们,可悲啊,快离开PB!!
fhongke 2003-10-30
  • 打赏
  • 举报
回复
SharedObject实现多线程有问题:如果你有多线程运行中,用鼠标拖动窗口的标题栏,然后就会发现多线程变单线程了。
这也是PB TMD差的地方,都9。0版了还不能实现多线程,现在操作系统都是分时、多任务的,很难再找到不支持多线程的开发工具!
PB真TMD差!!!!
herhu 2003-10-30
  • 打赏
  • 举报
回复
我觉得需要优化一下查询,降低复杂度,尽可能少嵌套。
liliang800207 2003-10-29
  • 打赏
  • 举报
回复
使用存储过程,在表中建立索引
daomei 2003-10-29
  • 打赏
  • 举报
回复
我想怎么都不可能,无论多大的表都不会超过半个小时,还是你的sql语句有问题,还是在你的优化上多下工夫吧
qqjj7758 2003-10-29
  • 打赏
  • 举报
回复
你比我幸福 我还没机会用ORACLE
thunderzhu 2003-10-29
  • 打赏
  • 举报
回复
nvo_thread的of_start函数脚本:

datastore dt_1
dt_1=create datastore
i_pipe = CREATE up_pipe1
i_pipe.i_thread=inv_arg
i_pipe.syntax=ls_syntax //ls_syntax是定义好的创建管道的语法
inv_arg.triggerevent('ue_thread2')
i_ret=i_pipe.start(cdma,sqlca,dt_1)
l_rowscount=i_pipe.rowswritten
inv_arg.triggerevent('ue_thread')
return 1
thunderzhu 2003-10-23
  • 打赏
  • 举报
回复
下面贴出异步和同步方式的脚本代码,请BeachBoy2001(沙滩小子)等帮忙看看,异步方式执行失败,同步方式就可以。难道是脚本的问题?

////异步方式启动数据管道
//sharedobjectunregister("object1'")
//sharedobjectregister("nvo_thread","object1")
//sharedobjectget("object1",i_thread)
//i_thread.setparent(inv_arg1)
//i_thread.post of_start()
////等待数据管道执行完成
//ib_pipeend=false
//do
// yield()
// if ib_cancel then return
//loop until ib_pipeend

//同步方式启动管道
if isvalid(i_thread) then destroy(i_thread)
i_thread=create nvo_thread
i_thread.setparent(inv_arg1)
i_thread.of_start()
zzutligang 2003-10-22
  • 打赏
  • 举报
回复
你的数据有多少?你的数据比电信的程控交换数据还多吗?要半个多小时!好好设计一下你的数据库是首要任务。再说,你有必要一次检索这么多的数据吗?
鸡翅多 2003-10-22
  • 打赏
  • 举报
回复
查一下ORACLE的书,对你所需要用到的表进行优化
shiller 2003-10-22
  • 打赏
  • 举报
回复
使用存储过程吧
mittee 2003-10-22
  • 打赏
  • 举报
回复
千万不要在 RetrieveRow 里写,那会大大影响性能。
langel 2003-10-22
  • 打赏
  • 举报
回复
试试yield函数
thunderzhu 2003-10-22
  • 打赏
  • 举报
回复
再说明一下,首先,数据源我只有查询权限,更改表结构之类的建议不可行,其次,关键是源表数据量大,还要多表关联才能提取出所需的数据,类似于数据挖掘,第三我是用数据管道做数据导入。还想再强调一点,我提出这个问题,希望pb能有个解决办法。感谢各位的热心帮助,根据各位的指点,我认为线程是最好的解决方案。但是在共享对象里,能否创建并执行数据管道,我没做成功,所以有所怀疑,如果有做过的,请帮帮我,给我点信心。
BeachBoy2001 2003-10-21
  • 打赏
  • 举报
回复
我碰到过这种问题,还是脚本的问题,优化脚本,楼主不妨把代码贴出来让大家看看
thunderzhu 2003-10-21
  • 打赏
  • 举报
回复
在sharedobject中pipeline执行失败,返回 -1 Pipe open failed,为什么?如果pipeline不能通过sharedobject方式异步执行,我真是无法可想了。
我定义了一个nonvisualobject的用户对象nvo_pipe,在其of_start函数中创建了数据管道的一个实例,并执行这个数据管道。
在某个cb的clicked事件脚本中,如果创建nvo_pipe的实例并执行of_start,数据管道能正确执行处理;如果使用sharedobject方式,of_start函数中的数据管道不能正常执行处理,返回-1,管道打开失败。
请各位大侠继续关注,不吝赐教。
yanghongfeng 2003-10-19
  • 打赏
  • 举报
回复
用idle()、yield()看一看吧
langel 2003-10-16
  • 打赏
  • 举报
回复
UP
xh308 2003-10-15
  • 打赏
  • 举报
回复
晕,这么大的数据量?
加载更多回复(14)

740

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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