C/S结构用ADO 查询时电脑死屏现象!? 困扰我很长时间了! 期待高手参与!! 我用SQL+ADO编写了一个C\S的软件, 当在客户端统计数据时,数量大时屏幕就停滞了. 用鼠标一点就白屏了. 困扰我很长时间了, 试过多线程查询, 好像说ADO不能多线程查询. 想达到如下效果: 查询时显示进度条, 用户可以中断查询,最好不用等待. 这样该从哪个方向去思考呢? 拜求真解!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在客户端统计数据?记录数再多,返回的结果也仅仅只是一个整数而已说明慢在数据库服务器的统计处理,而是返回的数据量大数据库服务器的统计处理慢,需要优化sql、表结构,甚至需要把统计结果、中间结果预先处理好,存起来——以空间换时间 先优化你的SQL语句再看看效果。一步一步解决 先看看你的SQL 建索引没有,如果数据量大,索引很重要。一般来说SQL SERVER 查询个几十万条数据也不致于你说的还要等很久。还有,你说的ADO不支持多线程不知如何理解,我是经常用多线程来处理数据的。比如说:我在系统启动之后,要得到一些数据处理结果,你不可能在程序启动中等待它的执行,所以就用线程放在后台去处理,等到处理完之后再传给相关的显示控件效果感觉还可以。值得注意:如果有几个线程同时要执行,必须是给他们独立的ADOQuery,道理很简单了。我曾犯过这种低级错误,还查了很久。:( 分页查询应该就可以满足你的要求了。直接把sql脚本给dbgrid 就能看到类似分页效果的 数据库是什么的,先将sql在数据库中执行看看效果先将数据库端优化一下,看看数据量有多大,如果太大慢是肯定的,可以采用分页形式 应该是后台查询时间的过长导致,优化一下sql另外前台控制上,让进度条与sql处理多线程 时间长的查询,除了考虑优化外,给用户界面加个“请等待”的窗体(不用做进度条),就可以了。白屏主要是windows消息被堵塞了导致。 ADO不能多线程查询----------------可以。记得:function ThreadFunc(P: Pointer): LongInt; stdcall;begin ActiveX.CoInitialize(nil); //... ActiveX.CoUninitialize; Result := 1;end; 如果在客户端调用了多次,每调一句,都加个application.process 显示进度条几乎不可能,除非你用个gif(假的);要想无假死,这个必须得用到线程来做了。 怎麽樣修改查詢值 高手?? 做服务程序遇到的问题.为什么启动一下之后,什么也没有呢? 一个简单的函数的问题! 我想学习三层!谁给我一个例子学学啊![email protected] 高手们,如何解决Delphi图标的问题!! ■■■如何使ListView中的项目按照点击的column排序?■■■ 初学,关于RAS问题 一个读取数据的问题 怎样用鼠标拖动选中Dbgrid中的多条记录(不用CTrl键) delphi XE5 编译的APK启动时短暂黑屏,如何解决? 如何连MSSERVER数据库 问一个内存修改的问题
记录数再多,返回的结果也仅仅只是一个整数而已
说明慢在数据库服务器的统计处理,而是返回的数据量大数据库服务器的统计处理慢,需要优化sql、表结构,甚至需要把统计结果、中间结果预先处理好,存起来——以空间换时间
一步一步解决
台去处理,等到处理完之后再传给相关的显示控件效果感觉还可以。值得注意:如果有几个线程同时要执行,
必须是给他们独立的ADOQuery,道理很简单了。我曾犯过这种低级错误,还查了很久。:(
先将数据库端优化一下,看看数据量有多大,如果太大慢是肯定的,可以采用分页形式
另外前台控制上,让进度条与sql处理多线程
----------------
可以。记得:
function ThreadFunc(P: Pointer): LongInt; stdcall;
begin
ActiveX.CoInitialize(nil); //... ActiveX.CoUninitialize;
Result := 1;
end;
要想无假死,这个必须得用到线程来做了。