成都网站设计创新互联,短视频制作团队哪里找,网站空间多大合适,牛商网建设的食品网站文章目录 效果图参考查询Free方法Close方法总结通俗理解 完整代码 效果图 参考
本文是在上一篇的基础上#xff0c;将查询页面重新写一次。 查询
{点击查询}
procedure TForm2.Button1Click(Sender: TObject);
vartj,tj1,tj2,tj3,tj4,tj5,tj6,tj7:string;
begin//按照工号查… 文章目录 效果图参考查询Free方法Close方法总结通俗理解 完整代码 效果图 参考
本文是在上一篇的基础上将查询页面重新写一次。 查询
{点击查询}
procedure TForm2.Button1Click(Sender: TObject);
vartj,tj1,tj2,tj3,tj4,tj5,tj6,tj7:string;
begin//按照工号查找tj1:11 ;//select * from RenYuanDangAn where GH like %95%;//表示if CheckBox1.Checked thentj1:GH like %Edit1.Text%;//按照姓名查找//select * from RenYuanDangAn where Xm like %J%;tj2:11;if CheckBox2.Checked thentj2:Xm like %edit2.Text%;//按照性别查找//select * from RenYuanDangAn where Xb like 女;tj3:11;if CheckBox3.Checked thenbeginif RadioGroup1.ItemIndex0 thentj3:Xb like %女%elsetj3:Xb like %男%;end;//按照生日查找//select * from RenYuanDangAn where Csrq 2024-1-1 and Csrq 1990-1-1;tj4:11;if CheckBox4.Checked thentj4:Csrq datetostr(DateTimePicker1.Date) and Csrq datetostr(DateTimePicker2.Date);//按照婚否tj5:11;if CheckBox5.Checked thenif CheckBox6.Checked thentj5: Hf1 elsetj5: Hf0 ;//按照职称tj6:11;if CheckBox7.Checked thentj6: Zc like combobox1.Text;//按照工资tj7:11;if CheckBox8.Checked thentj7: Gz edit3.Text and Gzedit4.Text;tj:select * from RenYuanDangAn where tj1 and tj2 and tj3 and tj4 and tj5 and tj6 and tj7;
// showmessage(tj);Query1.Close;Query1.SQL.Clear;Query1.SQL.Add(tj);Query1.Open;
end;Free方法
作用Free方法用于释放对象所占用的内存资源。在Delphi中当你创建一个对象如窗体、控件等时系统会在内存中为该对象分配一定的空间。当你不再需要这个对象时应该调用Free方法来释放它所占用的内存以避免内存泄漏。特点 Free方法通常与Destroy方法结合使用。Destroy是一个虚方法负责执行对象销毁前的清理工作如释放子对象、关闭文件句柄等。Free方法会检查对象是否为nil如果不是则调用Destroy方法来销毁对象。需要注意的是Free方法只会释放对象所占用的内存并不会将对象的引用指针设置为nil。因此在调用Free后如果还持有该对象的引用可能会导致野指针问题。为了避免这种情况Delphi 5及以后的版本提供了FreeAndNil方法该方法会先调用Free然后将对象的引用设置为nil。
Close方法
作用Close方法主要用于关闭窗体或数据流如文件、数据库连接等。对于窗体而言Close方法的行为类似于隐藏窗体Hide但它还会触发窗体的Close事件和OnClose事件处理程序。这些事件处理程序可以执行额外的清理工作如保存数据、询问用户是否真的要关闭窗体等。特点 Close方法并不直接释放窗体所占用的内存。如果你只是想关闭窗体并希望稍后能够重新打开它那么应该使用Close方法而不是Free方法。在OnClose事件处理程序中你可以通过设置Action参数来控制窗体的关闭行为。例如你可以将Action设置为caFree来在关闭窗体后释放其内存。但是这通常是在非模态窗体的上下文中进行的因为模态窗体会在ShowModal方法返回时自动处理资源释放。
总结
为什么会有这个思考呢是因为我在主窗体新建了模态查询窗口关闭查询窗口时选择free掉而不是close因此再次使用查询窗口时会出现内存错误的问题。
Free方法用于释放对象所占用的内存资源应与Destroy方法结合使用并注意处理对象的引用以避免野指针问题。Close方法用于关闭窗体或数据流并触发相应的事件处理程序以执行额外的清理工作。它并不直接释放窗体所占用的内存而是依赖于OnClose事件处理程序中的逻辑来决定是否释放。
通俗理解
想象你有一个装满书的书架书架就是对象书就是对象所占用的资源书架旁边有一个便签便签就是对象的引用或指针。当你不再需要书架上的书时你可以决定清空书架这相当于调用Free方法释放对象所占用的内存但是你没有撕掉或丢弃旁边的便签这相当于没有将对象的引用设置为nil。
现在如果你还保留着那个便签即持有对象的引用并尝试根据便签上的信息去找书架上的书即尝试访问对象你会发现问题书架已经空了但便签还在它指向的是一个已经不存在的书架即野指针。这种情况下你可能会感到困惑、失望甚至可能走入错误的房间即程序崩溃或不稳定。
为了避免这种情况当你清空书架时你也应该同时撕掉或丢弃那个便签这样你就不会根据一个无效的信息去寻找东西了。在Delphi中这相当于在调用Free方法后立即将对象的引用设置为nil这通常是通过FreeAndNil方法完成的它会自动为你完成这两个步骤。
所以简单来说Free方法只负责清空书架释放内存但不会自动撕掉便签不设置引用为nil这可能导致你根据错误的便签信息去寻找东西野指针问题。为了避免这个问题你应该确保在清空书架后也撕掉便签即将引用设置为nil。
完整代码
在这。