由于以前一直从事ASP开发,没有接触过delphi,只是在以前用过vb几天。现在接到业务,客户要求做一个实时查询,也就是说从大约12万左右用户中查询数据。要求每次输入姓的时候就可以在一个listbox中列出这个姓的人员列表(比如最新增加的100个),比如查询一个“王二小”,我在输入“王”的时候显示最新增加的100个姓王的用户,输入“王二”的时候,显示前100两个字个叫“王二”的用户,由于数据大,查询一次要3秒左右,所以做成多线程查询,但是有个问题就是我只要快速输入信息,程序就会报错。查询资料说是上一个线程没有完成,相当于是两个线程同时对listbox写数据就会报错。但是我不知道怎么写这个判断上一个线程结束?
查询了好多资料,复制了别人说的一些代码,问题依旧,想上来问问大家有没有做个这个程序的,有的话提供点代码。
各位老大先谢了!
查询了好多资料,复制了别人说的一些代码,问题依旧,想上来问问大家有没有做个这个程序的,有的话提供点代码。
各位老大先谢了!
解决方案 »
- 如何把RICHEDIT中带格式的内容保存到MS SQL数据的字段中?在线等待!
- 把一个MDI风格的窗体封装在一个DLL里,但是调用出错
- 设为主键好一点,还是设为UNIQUE好一点呢?
- case的问题
- 大富翁论坛的帖子只能看到标题,点击标题弹出页面还是没有内容,为什么?
- 在chart中不同的曲线能不能用不同纵坐标?
- spcomm怎么返回的AT指令的值不对啊??急,急………………
- 帮帮小鸟飞吧!!
- 请教个问题,路由器不做端口映射的话,数据库还会被攻击吗?
- 如何用函数返回一个记录集集?
- 请问:Delphi dbExpress 不能访问Oracle数据库表TimeStamp字段的解决办法
- 如何用Delphi更新Oracle中的图片字段?
var
FAutoComplete: IAutoComplete2;
FStrings: IUnknown; // 把名字都读入FStrings FAutoComplete := CreateComObject(CLSID_AutoComplete) as IAutoComplete2;
OleCheck(FAutoComplete.SetOptions(ACO_AUTOSUGGEST or ACO_UPDOWNKEYDROPSLIST));
OleCheck(FAutoComplete.Init(QueryEdit.Handle, FStrings, nil, nil)); //QueryEdit 输入框
不知你是不是要这样的?
如果有一万个人姓王,你的Listbox可够受的了.
我感觉你应该做一个目录。
你非要用多线程的话,可以用Thread.Synchronize 来调用写数据的方法,线程是不应该对VCL可视件直接操作的
另楼主可以试试在循环里加入一句Application.ProcessMessages;
这样也许可以满足你的要求