当前位置: 首页 > news >正文

Delphi5数据控制组件——查询

文章目录

    • 效果图
    • 参考
    • 查询
      • Free方法
      • Close方法
      • 总结
      • 通俗理解
    • 完整代码

效果图

在这里插入图片描述

参考

本文是在上一篇的基础上,将查询页面重新写一次。

在这里插入图片描述

查询

{点击查询}
procedure TForm2.Button1Click(Sender: TObject);
vartj,tj1,tj2,tj3,tj4,tj5,tj6,tj7:string;
begin//按照工号查找tj1:='1=1 ';//select * from RenYuanDangAn where GH like '%95%';//''表示'if CheckBox1.Checked thentj1:='GH like '''+'%'+Edit1.Text+'%'+'''';//按照姓名查找//select * from RenYuanDangAn where Xm like '%J%';tj2:='1=1';if CheckBox2.Checked thentj2:='Xm like '''+'%'+edit2.Text+'%'+'''';//按照性别查找//select * from RenYuanDangAn where Xb like '女';tj3:='1=1';if CheckBox3.Checked thenbeginif RadioGroup1.ItemIndex=0 thentj3:='Xb like '''+'%女%'+''''elsetj3:='Xb like '''+'%男%'+'''';end;//按照生日查找//select * from RenYuanDangAn where Csrq <='2024-1-1' and Csrq >= '1990-1-1';tj4:='1=1';if CheckBox4.Checked thentj4:='Csrq >='''+datetostr(DateTimePicker1.Date)+ ''' and Csrq <='''+datetostr(DateTimePicker2.Date)+'''';//按照婚否tj5:='1=1';if CheckBox5.Checked thenif CheckBox6.Checked thentj5:=' Hf=1 'elsetj5:=' Hf=0 ';//按照职称tj6:='1=1';if CheckBox7.Checked thentj6:=' Zc like '''+combobox1.Text+'''';//按照工资tj7:='1=1';if CheckBox8.Checked thentj7:=' Gz >='+edit3.Text+' and Gz<='+edit4.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)。

完整代码

在这。

http://www.lryc.cn/news/433565.html

相关文章:

  • git pull之后发现项目错误,如何回到之前的版本方法
  • 防跌倒识别摄像机
  • MyQql性能诊断与实践
  • 有序序列判断
  • 【Kubernetes知识点问答题】健康检查
  • 【Prometheus】PromQL数据类型以及常用的计算函数用法详解
  • STM32高级定时器生成互补PWM的原理与代码实现
  • 双指针题总结
  • [数据集][目标检测]人脸口罩佩戴目标检测数据集VOC+YOLO格式8068张3类别
  • JVM3-双亲委派机制
  • 经典文献阅读之--DEviLOG(使用合成数据和真实世界数据的数据驱动占用网格映射基于Transformer的BEV方案量产方案)
  • ssh之登录服务器后,自动进入目录(四十七)
  • 如何看待IBM中国研发部裁员?
  • 计算机毕业设计选题推荐-土地承包管理系统-Java/Python项目实战(亮点:数据可视化分析、账号锁定、智能推荐)
  • 2024年高校辅导员考试题库及答案
  • 使用python对股票市场进行数据挖掘的书籍资料有哪些
  • Python 将字典转换为 JSON
  • 就服务器而言,ARM架构与X86架构有什么区别?各自的优势在哪里?
  • [论文笔记]Dimensionality Reduction by Learning an Invariant Mapping
  • 链表算法题(下)
  • UE4_后期处理_后期处理材质及后期处理体积二
  • Linux系统与高效进程控制的实战技巧
  • 陈文自媒体:抖音创作者伙伴计划,你不知道的几点!
  • 便携式气象仪器的主要特点
  • 【开源风云】从若依系列脚手架汲取编程之道(四)
  • 华为 HCIP-Datacom H12-821 题库 (15)
  • MT6895(天玑8100)处理器规格参数_MTK联发科平台方案
  • 从 0 开始搞定 RAG 应用系列(第一篇):构建简单 RAG
  • 接口(Interface)和端点(Endpoint)的区别
  • 小米汽车再陷“抄袭”争议,上汽高管直言“真不要脸”