如何加速程序,数据库的(共300分,预付100分:)(100分)

  • 主题发起人 主题发起人 oceanwave
  • 开始时间 开始时间
由于手工CREATE窗体,所以出现了一个问题,不知如何解决?
窗体frmCL有一DBGRID,窗体frmCLSet是设置frmCL中
DBGRID可显示的字段,比如:
在frmCLSet的formshow中是这样的
chkContractNo.Checked:=frmCL.DBGrid.Columns[0].Visible;
也就当由frmCL到进入frmCLSet时,frmCLSet中的复选钮就被设为frmCL中对应字段的可显示
性。
在frmCLSet的确定按钮的OnClick事件中是这样的:
if chkContractNo.Checked then
begin
if strField='' then
strField:=' C.ContractNo'
else
strField:=strField+',C.ContractNo';
strOrder_ContractNo:='C.ContractNo';
end
也就是当对应的复选钮选中时,将把对应的SELECT语句和ORDER BY语句返回给frmCL,
当我让程序自动创建这些窗体的时候,没问题,但自己手动创建里,就报错,如何解决呢?
“Access violation at address 005A54DC in module 'KLTP.exe'. Read of address 0000002F0'
请指教:)
 
你投过来吧,我帮你看看

sead2000@21cn.com
 
用动态BPL试试,不但速度快而且可把程序分成模块
 
to homejun:
能说详细点儿吗?我愿给300分,谢谢!
 
用Diamond Access,它采用DAO访问数据库,速度还可以。
如果程序启动太慢的话,可以用代码动态生成窗体,使用完数据库后,立即关闭它。
 
在菜单Project|Options...的Forms标签页下,将那些暂时不要启动的窗体从“Auto-create forms”下转移到“Available forms”中,
然后楼上各位大哥说的创建窗体的方法也很详细了
 
难道你就没学过软件工程,哪怕只学了一点点,你一定会有办法的。你可以参考模块,进程,资源,对象
你可以把整个程序分成几个大的模块,再用一个专门的程序调用几个独立的模块(EXE程序)。(模块化)
尽量减少数据库控件的数量,其实一个数据库控件能在不同时间动态地创建不同的数据。(进程)
数据没必要同时全部打开,因为用户一次不会看到很多数据表的,如果当前只用到一个,
就把其它的全部关闭,这样也可节约内存。(资源)
以上方法看起来好象要对程序作很大变动,其实不然,因为他面对的对象都有相同的属性,
用几个带参数的函数或过程,在适当的地方调用他们的接口(对象)
当然,你的程序首先应具有较高的内聚性和耦合性。
你自己慢慢琢磨吧。
 
谢谢各位的指教,
DAO我用过了,但在主从表结构上不是很灵,特别是缓冲更新方面。我在很多非主从表结构的
程序中用到了它,确定快多了。
手动CREATE窗体的代码工作我也基本上完成,只剩一个上面提到的两个窗体之间互调互设控
件属性的问题,尚未能解决。
因为客户要求及易用性的考虑,大部分的窗体都能访问至少一个以上的其它窗体,而且很难
说那个是可以简单的独立出来的。而且对不同EXE之间的数据模块共享的问题,我一无所知
请anita多指教,愿另开题目给分:)
 
1.窗体应该在使用时才被创建,如果不被使用那么叫不应该预先创建——也就是说你的
program单元中,Application.CreateForm(。。);仅仅只有必须开始就使用的窗体(可以用
Project->Option中将打开不立即用的全部放在available forms中),这样可以减少窗体
自动创建需要的时间。
2.如果是使用了COM/COM+,那么使用DLL肯定在速度上要比EXE要快,但是如果不复杂而且
不用复用的话,那么没有必要使用这些技术——同样情况下,再快也不如一个程序里面快。
 
3.你数据表控件TQUERY或TADOQUERY仅仅在使用前才OPEN,不要在程序启动时打开太多的表单,
仅仅打开不得不打开的表单
4.如果实在ADO和ODBC不能满足需要的话,那么建议使用DAO,因为DAO是专门设计存取
ACCESS数据库的,因此非常富有效率——注意换成其它数据库可就没有效率了。
5.程序中用的资源也要进行控制,不要在程序启动时加载太多的资源——图片、图标、光标等,
大内存的资源可以使用使用时动态加载。
 
请问Create(nil)和Create(application)有何区别,不好意思,菜鸟问题:)
 
用中间件吧,做一个层结构的,那样可以"瘦"客户端的程序.
或者全部大型查询做成存储过程,一部份做成触发器,再将没用的包
去掉.
 
delphi帮助
TComponent redefines Create so that, for components, Create also:
1 establishes the relationship of a component and its Owner, as indicated by the AOwner parameter
2 sets the ComponentStyle property to csInheritable, meaning that the component
can be inherited by a descendant form type

Application是TApplication的实例,你一定熟悉create(self)了,一样的道理
 
给分了,不然这点分数,委屈大家了,我会另开题目讨论的,欢迎大家来捧场:)
 
后退
顶部