1。TDataSet.RecNo如何应用 ? 2。.......(50分)

  • 主题发起人 主题发起人 m&m
  • 开始时间 开始时间
M

m&m

Unregistered / Unconfirmed
GUEST, unregistred user!
1.下面这段话什么意思 ?TDataSet.RecNo如何应用 ?
As implemented in TDataSet, the value of RecNo is always -1. Ordinarily an application does not access RecNo at the TDataSet level. Instead a redeclared and implemented RecNo property in a descendant class such as TTable is accessed. RecNo provides a fallback property for derived datasets that do not support record numbers.(25分)
2.以前用其他工具编程序从来没考虑过释放内存,请告诉我在DELPHI 里全
那些情况需要释放内存???(25分)
 
Sorry ,我忘了换行。在下面:

As implemented in TDataSet, the value of RecNo is always -1.
Ordinarily an application does not access RecNo at the TDataSet
level. Instead a redeclared and implemented RecNo property in a
descendant class such as TTable is accessed. RecNo provides a
fallback property for derived datasets that do not support record
numbers.(25分)

 
1.没用过这个东东
2.自己在程序中动态创建的对象要释放,一般用 object.free
 
1. 就是说不支持recno的数据库里recno总是-1. 如sqlserver...大部分sql数据库.
2. 呵呵, 看来你以前只用vb... 如果是point类型的都需要释放内存, 另外动态建立
的object.....
 
1.看你是什么数据库,如果是本地的ISAM数据库,比如paradox,dbase等,
可以使用query.RecNo,其他的关系数据库不支持该属性
2.凡是你<font color=red>自己</font>用类似Getmem,Create等申请了内存的,最后都要自己用
相应的FreeMem,free等释放.
 
1:
在TDataSet的实现代码中RecNo的值永远为-1,
一般来说应用程序不应该在TDataSet这一级访问RecNo属性,
而应该访问在TDataSet的后继类(如TTable)中重新定义并实现RecNo属性,
对于不支持记录数的数据集来说,RecNo提供了一个可用的属性。

这段话的意思是:
->TDataSet定义了RecNo这么一个概念,本身并没有真正地实现,
因为具体的数据集的实现方法不同
->记录数只在文件型数据库中支持,SQL数据集不支持记录数,因此
有了RecNo就增加了一种可用的属性,当然后继类应该实现它

2:
->组件(TComponent)不需要显式释放,当Owner被释放时会自动释放
Components属性中的所有下级组件。如果是显式Create,并且没有指定
Owner,就要自己写代码释放了
->函数、过程中的局部变量,返回时系统自动释放
->自己创建的普通对象,如TStream、TStrings之类,需要释放
->自己申请的内存区,如GetMem、New,需要释放
 
自创的构件需要释放,其它控件自动释放。
 
得寸进尺,再问一个问题:TDataSet.CurrentRecord 属性如何应用?
 
Next, Post, First, Last...等方法以后得到的当前记录。
 
没用, 只有在继承TDataSet的类中才能看到. 外界看不到这个属性.
提供这个属性用于继承类中跟踪当前正在处理的记录在cache中的顺序号.
比如dbgrid刷新时, currentrecord将遍历所有需要显示的记录. 只是内部
使用中提供继承类一个跟踪当前处理记录的机会. 对外界没有丝毫意义.
 
有时,我也需要用RecNo这个属性。情况是这样的:
用户希望能在查询显示的时候,第一列显示序号,即第几条记录。
我没有办法,只好加了一列Calculated Field,在QUERY的OnCalcFields事件
中计算当前行,而且计算起来很麻烦,我预读很多东西,计算起来也很慢。

不知各位大虾有没有良策?或者已经有此类构件了?
若有,请E_Mail我:yck.fudan.edu

 
那是因为用户也用fox系列习惯了.其实说穿了,第几条纪录和用户有什么关系?
他只要关心自己的数据就可以了.

 
提到释放内存问题,我有个疑问:
在MDI程序中,只见到在主窗口中
MDIChild := TMDIChild.Create(Self);
却没见到窗口关闭后的
MDIChild.Free;
那么,这个窗口到底有没有被释放呢?
是不是MDICHild的OnClose事件中加了
Action := caFree;
它就能够把它的资源全部释放掉?可事实上我用NT的Windows任务管理器
监视Delphi的标准程序mdiapp.exe(用new->project->MDI Application
创建),在没有子窗口的情况下内存使用为2624K,开了5个字窗口
后为2740K,全部关掉后为还是2740K,Action := caFree是设置了的。
关闭子窗口什么都没有释放?我以前还专门用了个TList类保存了所有
新创建的MDICHild的地址,在关闭MDIChild的时候Free对应的MDICHild,
但是不能Free,一用就说非法。这些MDI的内存到底该怎么释放呢?

这个
 
不对。
因为有的时候确实需要。
有时,用户需要看看排名情况,若记录有1000多条,你说到了200多条时你
能说的清楚这是第几条?
 
加一个计算字段就可以了.
 
多人接受答案了。
 
后退
顶部