数据库 类 的问题 ( 积分: 100 )

  • 主题发起人 主题发起人 sgpxd
  • 开始时间 开始时间
S

sgpxd

Unregistered / Unconfirmed
GUEST, unregistred user!
请问:<br>我声明了一个类,其中有对数据库的添加,删除,修改等方法。<br><br>在程序中,调用删除运行正常,调用添加和删除后,程序就死了,delphi的cpu占用率变高了。<br><br>把这两个方法的实现部分注释掉,提示stack&nbsp;overflow<br><br>类声明如下&nbsp;//添加部分有2个子过程,<br>type<br>&nbsp;&nbsp;//员工<br>&nbsp;&nbsp;TEmployee&nbsp;=&nbsp;class&nbsp;(TObject)<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;Fid&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Integer;&nbsp;&nbsp;&nbsp;&nbsp;//id<br>&nbsp;&nbsp;&nbsp;&nbsp;FCode&nbsp;&nbsp;:&nbsp;string;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;编码<br>&nbsp;&nbsp;&nbsp;&nbsp;FName&nbsp;&nbsp;:&nbsp;string;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;姓名<br>&nbsp;&nbsp;&nbsp;&nbsp;FDepID&nbsp;:&nbsp;Integer;&nbsp;&nbsp;&nbsp;&nbsp;//部门id<br>&nbsp;&nbsp;&nbsp;&nbsp;FMob&nbsp;&nbsp;&nbsp;:&nbsp;string;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//移动电话<br>&nbsp;&nbsp;&nbsp;&nbsp;FTel&nbsp;&nbsp;&nbsp;:&nbsp;string;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//电话<br>&nbsp;&nbsp;&nbsp;&nbsp;FEMail&nbsp;:&nbsp;string;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//电子邮件<br>&nbsp;&nbsp;&nbsp;&nbsp;FOicq&nbsp;&nbsp;:&nbsp;string;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Oicq<br>&nbsp;&nbsp;&nbsp;&nbsp;FMSN&nbsp;&nbsp;&nbsp;:&nbsp;string;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//MSN<br>&nbsp;&nbsp;&nbsp;&nbsp;FBal&nbsp;&nbsp;&nbsp;:&nbsp;Real;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//余额<br>&nbsp;&nbsp;&nbsp;&nbsp;FRemark&nbsp;&nbsp;&nbsp;:&nbsp;string;&nbsp;&nbsp;//备注<br>&nbsp;&nbsp;&nbsp;&nbsp;FDepName&nbsp;:&nbsp;string;&nbsp;&nbsp;&nbsp;//部门名称<br>&nbsp;&nbsp;&nbsp;&nbsp;FQuery&nbsp;:&nbsp;TADOQuery;<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;Setid(const&nbsp;Val&nbsp;:&nbsp;Integer);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetCode(const&nbsp;Val&nbsp;:&nbsp;string);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetName(const&nbsp;Val&nbsp;:&nbsp;string);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetDepID(const&nbsp;Val&nbsp;:&nbsp;Integer);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetMob(const&nbsp;Val&nbsp;:&nbsp;string);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetTel(const&nbsp;Val&nbsp;:&nbsp;string);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetEmail(const&nbsp;Val&nbsp;:&nbsp;string);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetOicq(const&nbsp;Val&nbsp;:&nbsp;string);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetMSN(const&nbsp;Val&nbsp;:&nbsp;string);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetBal(const&nbsp;Val&nbsp;:&nbsp;Real);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetRemark(const&nbsp;Val&nbsp;:&nbsp;string);<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetDepName(const&nbsp;Val&nbsp;:&nbsp;string);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;id&nbsp;:&nbsp;Integer&nbsp;read&nbsp;Fid&nbsp;write&nbsp;Setid;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;Code&nbsp;:&nbsp;string&nbsp;read&nbsp;FCode&nbsp;write&nbsp;SetCode;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;Name&nbsp;:&nbsp;string&nbsp;read&nbsp;FName&nbsp;write&nbsp;SetName;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;DepID&nbsp;:&nbsp;Integer&nbsp;read&nbsp;FDepID&nbsp;write&nbsp;SetDepID;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;Mob&nbsp;:&nbsp;string&nbsp;read&nbsp;FMob&nbsp;write&nbsp;SetMob;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;Tel&nbsp;:&nbsp;string&nbsp;read&nbsp;FTel&nbsp;write&nbsp;SetTel;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;EMail&nbsp;:&nbsp;string&nbsp;read&nbsp;FEMail&nbsp;write&nbsp;SetEMail;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;Oicq&nbsp;:&nbsp;string&nbsp;read&nbsp;FOicq&nbsp;write&nbsp;SetOicq;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;MSN&nbsp;:&nbsp;string&nbsp;read&nbsp;FMSN&nbsp;write&nbsp;SetMSN;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;Bal&nbsp;:&nbsp;Real&nbsp;read&nbsp;FBal&nbsp;write&nbsp;SetBal;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;Remark&nbsp;:&nbsp;string&nbsp;read&nbsp;FRemark&nbsp;write&nbsp;SetRemark;<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;DepName&nbsp;:&nbsp;string&nbsp;read&nbsp;FDepName&nbsp;write&nbsp;SetDepName;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Insert&nbsp;:&nbsp;Boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Amend&nbsp;(id&nbsp;:&nbsp;Integer):&nbsp;Boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;Delete&nbsp;(id&nbsp;:&nbsp;Integer)&nbsp;:&nbsp;Boolean;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;GetAllField(const&nbsp;xQuery&nbsp;:&nbsp;TADOQuery);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;constructor&nbsp;create;&nbsp;overload;<br>&nbsp;&nbsp;&nbsp;&nbsp;destructor&nbsp;destroy;&nbsp;override;<br>&nbsp;&nbsp;end;<br><br>//初始化<br>constructor&nbsp;TEmployee.create;<br>begin<br>&nbsp;&nbsp;inherited&nbsp;create;<br>//&nbsp;&nbsp;FQuery&nbsp;:=&nbsp;TADOQuery.Create(nil);<br>//&nbsp;&nbsp;FQuery.Connection&nbsp;:=&nbsp;dm.con1;<br>end;<br><br>//修改<br>function&nbsp;TEmployee.Amend(id&nbsp;:&nbsp;Integer):&nbsp;Boolean;<br>begin<br>&nbsp;{&nbsp;Result&nbsp;:=&nbsp;False;<br>&nbsp;&nbsp;if&nbsp;id&nbsp;&gt;0&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;with&nbsp;FQuery&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('insert&nbsp;into&nbsp;dm_yg&nbsp;set&nbsp;ygxm=:ygxm,depid=:depid,stdh=:stdh,');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('ggdh=:ggdh,dzyx=:dzyx,qq=:qq,msn=:msn,bz=:bz,zhje=:zhje&nbsp;where&nbsp;[id]=:id');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('ygxm').Value&nbsp;:=&nbsp;FName;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('depid').Value&nbsp;:=&nbsp;FDepID;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('stdh').Value&nbsp;:=&nbsp;FMob;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('ggdh').Value&nbsp;:=&nbsp;FTel;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('dzyx').Value&nbsp;:=&nbsp;FEMail;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('qq').Value&nbsp;:=&nbsp;FOicq;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('msn').Value&nbsp;:=&nbsp;FMSN;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('bz').Value&nbsp;:=&nbsp;FRemark;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('zhje').Value&nbsp;:=&nbsp;FBal;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('id').Value&nbsp;:=&nbsp;id;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExecSQL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;True;<br>&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox('修改失败,请重新运行程序!',&nbsp;MB_Title,&nbsp;MB_OK&nbsp;+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MB_ICONSTOP&nbsp;+&nbsp;MB_TOPMOST);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=&nbsp;False;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;&nbsp;}<br>end;<br><br><br>//从数据库删除<br>function&nbsp;TEmployee.Delete(id&nbsp;:&nbsp;Integer):&nbsp;Boolean;<br>begin<br>&nbsp;&nbsp;Result&nbsp;:=&nbsp;False;<br>&nbsp;&nbsp;if&nbsp;ID&nbsp;&gt;&nbsp;0&nbsp;then<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;FQuery&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Application.MessageBox('是否删除该项数据?',&nbsp;MB_Title,&nbsp;MB_YESNO&nbsp;+&nbsp;MB_ICONQUESTION&nbsp;+&nbsp;MB_TOPMOST)&nbsp;=&nbsp;IDNO&nbsp;then&nbsp;Exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;FQuery&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('select&nbsp;*&nbsp;from&nbsp;dm_yg&nbsp;where&nbsp;[id]=:id');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('id').Value&nbsp;:=&nbsp;ID;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;RecordCount&nbsp;&gt;&nbsp;0&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Application.MessageBox('该数据项正被其他数据使用,是否删除?',&nbsp;&nbsp;MB_Title,&nbsp;MB_YESNO&nbsp;+&nbsp;MB_ICONWARNING&nbsp;+&nbsp;MB_TOPMOST)&nbsp;=&nbsp;IDNO&nbsp;then&nbsp;Exit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Add('delete&nbsp;from&nbsp;dm_yg&nbsp;where&nbsp;[id]=:id');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParamByName('id').Value&nbsp;:=&nbsp;ID;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExecSQL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;True;<br>&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.MessageBox('无法删除,请重新运行程序!',&nbsp;MB_Title,&nbsp;MB_OK&nbsp;+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MB_ICONSTOP&nbsp;+&nbsp;MB_TOPMOST);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result:=False;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br>end;<br><br>//析构<br>destructor&nbsp;TEmployee.destroy;<br>begin<br>&nbsp;&nbsp;inherited;<br>&nbsp;&nbsp;FQuery.Close;<br>&nbsp;&nbsp;FreeAndNil(FQuery);<br>end;
 
取消类的法再试一试,如果没有问题应该是你的类有问题了。
 
我把amend中间的代码全部注释掉了,编译执行提示stack&nbsp;overflow<br>如果不注释掉的话,连提示都没有就直接死了
 
//析构<br>destructor&nbsp;TEmployee.destroy;<br>begin<br>&nbsp;&nbsp;<br>&nbsp;&nbsp;FQuery.Close;<br>&nbsp;&nbsp;FreeAndNil(FQuery);<br>inherited;&nbsp;//我看到好多此句是在最后的,你试一下吧<br><br>end;
 
1&nbsp;constructor&nbsp;create;&nbsp;overload;<br>改为&nbsp;constructor&nbsp;create;&nbsp;override;<br><br>2&nbsp;constructor&nbsp;TEmployee.create;<br>begin<br>&nbsp;&nbsp;inherited&nbsp;create;<br>//&nbsp;&nbsp;FQuery&nbsp;:=&nbsp;TADOQuery.Create(nil);<br>//&nbsp;&nbsp;FQuery.Connection&nbsp;:=&nbsp;dm.con1;<br>end;<br>中&nbsp;//&nbsp;&nbsp;FQuery&nbsp;:=&nbsp;TADOQuery.Create(nil);<br>//&nbsp;&nbsp;FQuery.Connection&nbsp;:=&nbsp;dm.con1;<br>不能给注释掉了
 
继续死机<br>在<br>x:&nbsp;temployee;<br>x:=temployee.create;<br>x.setname('X001');<br>x.amend(x.id);<br>这个时候就死了,应该还没到destroy才对。<br><br>x.id&nbsp;不是空的。
 
constructor&nbsp;create;&nbsp;override;<br>can't&nbsp;override&nbsp;a&nbsp;static&nbsp;method.
 
can't&nbsp;override&nbsp;a&nbsp;static&nbsp;method?报错
 
没看出什么大问题来,调试时跟一下,看在哪个地方出问题了。
 
谢谢各位帮忙。。<br><br>原因找到了。。。<br><br><br>因为没有delphi环境,用文本写的时候,敲错了一个字段。。
 
unit&nbsp;Unit2;<br><br>interface<br><br>type<br>&nbsp;&nbsp;TEmployee&nbsp;=&nbsp;class(TObject)<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;FDepName:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetDepName(const&nbsp;Value:&nbsp;string);<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Private&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;DepName&nbsp;:&nbsp;string&nbsp;read&nbsp;FDepName&nbsp;write&nbsp;SetDepName;<br>&nbsp;&nbsp;&nbsp;&nbsp;constructor&nbsp;create;<br>&nbsp;&nbsp;&nbsp;&nbsp;destructor&nbsp;destroy;&nbsp;override;<br>&nbsp;&nbsp;end;<br><br>implementation<br><br>{&nbsp;TForm1&nbsp;}<br><br>constructor&nbsp;TEmployee.create;<br>begin<br>&nbsp;&nbsp;inherited;<br>&nbsp;&nbsp;DepName:=&nbsp;'lisongmagic';<br>end;<br><br>destructor&nbsp;TEmployee.destroy;<br>begin<br><br>&nbsp;&nbsp;inherited;<br>end;<br><br>procedure&nbsp;TEmployee.SetDepName(const&nbsp;Value:&nbsp;string);<br>begin<br>&nbsp;&nbsp;FDepName&nbsp;:=&nbsp;Value;<br>end;<br><br>end.<br>*******************************************************************<br><br>unit&nbsp;Unit1;<br><br>interface<br><br>uses<br>&nbsp;&nbsp;Windows,&nbsp;Messages,&nbsp;SysUtils,&nbsp;Variants,&nbsp;Classes,&nbsp;Graphics,&nbsp;Controls,&nbsp;Forms,<br>&nbsp;&nbsp;Dialogs,&nbsp;StdCtrls;<br><br>type<br>&nbsp;&nbsp;TForm1&nbsp;=&nbsp;class(TForm)<br>&nbsp;&nbsp;&nbsp;&nbsp;Button1:&nbsp;TButton;<br>&nbsp;&nbsp;&nbsp;&nbsp;Edit1:&nbsp;TEdit;<br>&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;Button1Click(Sender:&nbsp;TObject);<br>&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Private&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Public&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;end;<br><br>var<br>&nbsp;&nbsp;Form1:&nbsp;TForm1;<br><br>implementation<br>uses&nbsp;&nbsp;unit2;<br><br>{$R&nbsp;*.dfm}<br><br>procedure&nbsp;TForm1.Button1Click(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;aEmployee:&nbsp;TEmployee;<br>begin<br>&nbsp;&nbsp;aEmployee:=&nbsp;TEmployee.create;<br>&nbsp;&nbsp;Edit1.Text:=&nbsp;aEmployee.DepName;<br>end;<br><br>end.<br>我的就没问题.<br>to:<br>继续死机<br>在<br>x:&nbsp;temployee;<br>x:=temployee.create;<br>x.setname('X001');<br>x.amend(x.id);<br>这个时候就死了,应该还没到destroy才对。<br>x.id&nbsp;不是空的。<br><br>为什么&nbsp;要这样用&nbsp;x.setname('X001'),而不是&nbsp;x.name:=&nbsp;'X001';<br>setname等这些属性的写方法为什么都要放到&nbsp;public权限下?
 
呵呵,用文本写?怎么调试?晕哦
 
为什么&nbsp;要这样用&nbsp;x.setname('X001'),而不是&nbsp;x.name:=&nbsp;'X001';<br>setname等这些属性的写方法为什么都要放到&nbsp;public权限下?<br>第一个<br>防止手误。。。。<br><br>第二个<br>以前放入private中,在其他单元无法使用&nbsp;-_-!<br><br>我也不知道为什么。。<br><br>按说F字段都能访问到。。。。<br><br>这些都是看来的。
 
nicai_wgl<br><br>我也不想啊,我公司的电脑有点问题。<br><br>每次写的程序回家修改的时候,总会有.dcu的文件不能写<br>都要把dcu和临时文件清掉才行。。。。
 
按说F字段都能访问到。。。。<br>错!类的私有变量只供本身和其实例调用<br>property&nbsp;还是放到Published里<br>另外你定义那么多属性,要我只要一个记录类型就OK
 
恩,这是盗版DELPHI的问题,看帖子<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3674550
 
马丁路德<br>在private中的字段<br>只要在public&nbsp;中声明property就可以在其他单元访问了,<br>但是同样的,如果把过程在private中声明了,即使在public中声明了property方法。<br>在其他单元中还是不能访问。<br><br>public&nbsp;和published。。。书上说的看不出有什么区别.<br>能否请详细解释下。<br><br>属性可以放到纪录类型,但是还有些过程。。。<br>PS我只是学习下oo。。。。
 
在private中的字段<br>&nbsp;&nbsp;只要在public&nbsp;中声明property就可以在其他单元访问了<br>这是因为一般你定义一个字段之后,都会用一个方法来访问它,<br>例如&nbsp;property&nbsp;Ffont:&nbsp;TFont;&nbsp;read&nbsp;getfont&nbsp;write&nbsp;setfont;<br>或者干脆:property&nbsp;Ffont:&nbsp;Tfont;&nbsp;read&nbsp;ffont&nbsp;write&nbsp;ffont<br>但是这做没有什么意义,因为你定义私有变量的目的就是为了<br>把数据和方法隔离。<br>如果这样你还不如直接把它放到Public里.<br>Published是在属性面板里可以直接控制的(我的理解)。<br>如果你把这个类做成一个组件安装到delphi里就能看出来了<br>另外设计write方法的目的一般是为了对用户的输入进行过滤<br>比如是否越界等等<br>一般的做法:定义字段在private域,设计read&nbsp;和write<br>(如果只读就不需要了)方法(也在private),然后设计一个<br>property&nbsp;(Published),这是组件的一般设计方法。<br>如果你不用组件的话,直接公开read和write方法就行了
 
我定义了write方法就是为了控制越界问题<br>/lh<br>谢谢你的解释,不过我现在还没做成组件。
 

Similar threads

I
回复
0
查看
728
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
551
import
I
后退
顶部