首先数据量很大。
使用TQuery控件存放sql查询的结果。自己用sql server查询,结果超过100万条记录,但是看了下TQuery.recordcount只有80多万条。
另外,我试着遍历Query,把每一条结果记录到一个文件中,发现到某一条记录时,报错:Temporary Table resource limit!
使用TQuery控件存放sql查询的结果。自己用sql server查询,结果超过100万条记录,但是看了下TQuery.recordcount只有80多万条。
另外,我试着遍历Query,把每一条结果记录到一个文件中,发现到某一条记录时,报错:Temporary Table resource limit!
解决方案 »
- 关于ServerSocket判断clientsocket是否异常断开的问题
- 我在组件面板上点击右键,出现菜单,选择到Tabs,可为什么这个Tabs的子菜单是向上出现的?
- 在主窗体打开以后,再想自动打开一个提示窗体,该如何实现
- delphi 7 的报表
- ★挑战CSDN高手★DELPHI中的线程使用!
- 用CreateOleObject创建的对象是否需要显式地释放?怎样释放?
- d2007
- 请问panel2.caption:=format('origin:(%d,%d)',[x,y])如何解释?
- 有DEPHI还需要分析建造数据结构吗?
- 关于paradox数据库的两个问题
- 请问有没些比较准的在线加密网站呢?
- WebBrowser获取网页信息
这个临时表是大小不可以调节吗?据说通过设置BDE参数可以提高数据查询效率
建议
1、 写日志,记录写到第几行记录出错。
2、 有可能是写入的文件容量有限制。检查硬盘空间。
3、 用ADOquery替换。
4、 分段导出,用主键划分。如1到十万,十万到二十万试试。
我认为问题是Avan_Lau所说的临时表大小限制
100万查询出来后经过计算筛选,报表呈现的就几千的样子(但是sql语句中不好直接进行这些筛选)。
如何分页请指教!!我在程序中写:query.BLOCKREADSIZE := 50,0000; 貌似无效,这个值还是默认的0
100w是SQL查询出来的必要的数据,客户看到的是经过筛选等处理后的几百几千条记录而已。
数据库的表已经定下了,程序的写法,用的控件已经定下了,都不能改,这是个用了好多年的商业软件,不是说改就改的,涉及很多东西的。现在有bug只能是‘调整’。
那个分页倒是挺可以的,但是基类里已经写死了,与数据库交互一次找出这100w的东西(这个我不能改)
我最想知道的是有无办法改变bde临时表大小!!
然后在循环过程中,每次取前50W到Query中,让它循环处理去,完了再取这样做对效率有些影响,但是临时表操作比硬盘I/O要快很多,所以估计也不会差太远吧,而且至少解决问题了 呵呵~~
学了下分页sql,somemak兄,多谢!
1.先取出总的记录数(count)
2.计算出分页的页数 :取整(总记录数/分页的记录数),有余数就再加1
3.在循环过程中,每次取数到Query中,让它循环处理去,完了再取,循环的次数就是计算出来的那个分页的页数,这里要动态的写SQL分页语句
例如:
总记录数:100W,分页的记录数:10W,就要循环10次。
第一次读取第1至10W记录,按需求处理
第二次读取第10W+1至20W记录,按需求处理
循环后,就得出你的最终结果集