<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title></title><link>http://evelee.net/blog/</link><description>不要用淡泊明志，来掩盖内心的求而不得!　　　evelee.net</description><item><title>MOS场效应晶体管</title><link>http://evelee.net/blog/?id=78</link><description>&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong&gt;一. 简介&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;MOS管（也称场效应管），是MOSFET的缩写。场效应管分为PMOS管（P沟道型）和NMOS（N沟道型）管，属于绝缘栅场效应管。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;场效应管分为结型（JFET）和金属-氧化物-半导体型（MOSFET）两种类型。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;JFET的英文全称是Junction Field-Effect Transistor，也分为N沟道和P沟道两种，在实际中几乎不用。&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;MOSFET英文全称是Metal-Oxide-Semiconductor Field-Effect Transistor，应用广泛，MOSFET一般称MOS管。MOSFET有增强型和耗尽型两大类，增强型和耗尽型每一类下面都有NMOS和PMOS。增强型MOS管的英文为Enhancement MOS或者EMOS，耗尽型MOS管的英文为Depletion MOS或者DMOS。&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;一般PCB上使用最多的是增强型MOS管，NMOS最多，一般多用在信号控制上，其次是PMOS，多用在电源开关等方面，耗尽型几乎不用。所以，在实际应用中，应用最多的是增强型NMOS管,其次是增强型PMOS管。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong&gt;二.基础&lt;/strong&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;如下中间衬底箭头指向G极的为NMOS，箭头背向G极的为PMOS。&lt;/p&gt;&lt;p&gt;栅极G(gate)，单独在一边的。&lt;/p&gt;&lt;p&gt;源极S(source)，不论是P沟道还是N沟道，两根线相交的就是。&lt;/p&gt;&lt;p&gt;漏极D(drain)，不论是P沟道还是N沟道，是单独引线的。&lt;br/&gt;&lt;/p&gt;&lt;p&gt;由于生产工艺，一般的MOS管会有一个寄生二极管，也叫体二极管。可以看出NMOS和PMOS寄生二极管方向不一样，NMOS是由S极→D极，PMOS是由D极→S极。中间衬底箭头方向和寄生二极管的箭头方向总是一致的。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2025/06/202506038670_6122.png&quot; title=&quot;01.png&quot; alt=&quot;01.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;NMOS：D极接输入，S极接输出 。如果接反，电流就会从寄生二极管流走无法控制。&lt;/p&gt;&lt;p&gt;PMOS：S极接输入，D极接输出&amp;nbsp;。如果接反，电流就会从寄生二极管流走无法控制。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2025/06/202506037054_2683.png&quot; title=&quot;02.png&quot; alt=&quot;02.png&quot;/&gt;&amp;nbsp;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2025/06/202506038994_544.png&quot; title=&quot;03.png&quot; alt=&quot;03.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;对NMOS来说，Vg-Vs&amp;gt;Vgs(th)，即G极和S极的压差大于一定值，MOS管会导通，就是NMOS高电平导通。&lt;/p&gt;&lt;p&gt;对PMOS来说，Vs-Vg&amp;gt;Vgs(th)，即S极和G极的压差大于一定值，MOS管会导通，就是PMOS低电平导通。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style=&quot;white-space: normal; font-size: 16px;&quot;&gt;三.上管和下管&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;N管常做下管(低端驱动), 因为S极直接接地固定电压时, G极和S极之间的压差容易控制. 而当S极电压不固定时, 栅源电压较难确定, 电路比较麻烦。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2025/06/202506034613_4196.png&quot; title=&quot;05.png&quot; alt=&quot;05.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;PMOS 一般做上管(高端驱动). 同理, 用S极接VCC 电压固定, 这时G极电压容易计算及控制, 反之, 用S极接负载, S极电压不能稳定, G极电压就更难确定, 电路上也比较麻烦.&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2025/06/202506033972_3923.png&quot; title=&quot;06.png&quot; alt=&quot;06.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style=&quot;white-space: normal; font-size: 16px;&quot;&gt;四.NMOS电路&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下图是常用的NMOS下管电路。R(GS)为泄放电阻，通常取值10K。R(IN)通常取1K~4.7K。&lt;/p&gt;&lt;p&gt;泄放电阻用来泄放GS极间的电荷。加它的原因是因为MOS的GS极间的阻值非常高，通常为M欧以上，并且GS间还有结电容，这就导致GS一旦充电，就很难释放掉。如果没有这个泄放电阻，在G极通入高电平，负载会工作，而将G极上的控制信号拿开，由于结电容的存在，GS间的电压会维持在导通阀值以上很长一段时间，负载仍会继续工作。而加了泄放电阻，会加快泄放速度，使电路功能更加合理易用。&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2025/06/202506034867_7786.png&quot; title=&quot;07.png&quot; alt=&quot;07.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style=&quot;white-space: normal; font-size: 16px;&quot;&gt;五.MOS管重要参数&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2025/06/202506038979_9348.png&quot; title=&quot;08.png&quot; alt=&quot;08.png&quot;/&gt;&amp;nbsp;&amp;nbsp;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2025/06/202506036720_759.png&quot; title=&quot;09.png&quot; alt=&quot;09.png&quot;/&gt;&lt;/p&gt;&lt;p&gt;①封装&amp;nbsp;&lt;/p&gt;&lt;p&gt;②类型（NMOS、PMOS）&amp;nbsp;&lt;/p&gt;&lt;p&gt;③耐压Vds（器件在断开状态下漏极和源极所能承受的最大的电压）&amp;nbsp;&lt;/p&gt;&lt;p&gt;④饱和电流Id&amp;nbsp;&lt;/p&gt;&lt;p&gt;⑤导通阻抗Rds&amp;nbsp;&lt;/p&gt;&lt;p&gt;⑥栅极阈值电压Vgs(th)&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style=&quot;white-space: normal; font-size: 16px;&quot;&gt;六.MOS管和三极管的区别&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style=&quot;white-space: normal; font-size: 16px;&quot;&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2025/06/202506033534_9772.png&quot; title=&quot;10.png&quot; alt=&quot;10.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2025/06/202506033126_5380.png&quot; title=&quot;11.png&quot; alt=&quot;11.png&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;三极管是电流控制，MOS管是电压控制，主要有如下的区别：&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;1，只容许从信号源取少量电流的情况下，选用MOS管；在信号电压较低，有容许从信号源取较多电流的条件下，选用三极管。&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;2，MOS管是单极性器件（靠一种多数载流子导电），三极管是双极性器件（既有多数载流子，也要少数载流子导电）。&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;3，有些MOS管的源极和漏极可以互换运用，栅极也可正可负，灵活性比三极管好。&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;4，MOS管应用普遍，可以在很小电流和很低电压下工作。&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;5，MOS管输入阻抗大，低噪声，MOS管较贵，三极管的损耗大。&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;6，MOS管常用来作为电源开关，以及大电流开关电路、高频高速电路中，三极管常用来数字电路开关控制。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 03 Jun 2025 09:50:42 +0800</pubDate></item><item><title>DGUS II - 简要开发流程</title><link>http://evelee.net/blog/?id=77</link><description>&lt;ol class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: decimal;&quot;&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp;新建工程，选择分辨率和存储位置&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;制作背景图片放在image文件夹，命名00.png ,01.png等等&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;制作图标文件放在ICON文件夹&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;在DGUS IDE左侧的Images View里倒入背景图&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;在文件菜单里点击保存&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;在欢迎页面里打开ICL生成工具&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;加载所有背景图，生成32_bg.icl，保存到DWIN_SET文件夹&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;加载所有图标，生成xx_icon.icl，保存到DWIN_SET文件夹&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;在欢迎页面里打开配置文件生成工具&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;设置相关参数&lt;/p&gt;&lt;p&gt;ICL位置必须和第7步的icl文件相同，默认32&lt;/p&gt;&lt;p&gt;22默认不加载&lt;/p&gt;&lt;p&gt;触控变量自动上传要选择自动上传&lt;/p&gt;&lt;p&gt;保存配置文件名必须是T5LCFG.CFG，&lt;span style=&quot;text-wrap: wrap;&quot;&gt;保存到&lt;/span&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;DWIN_SET文件夹&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;制作或者拷贝0_DWIN_ASC.HZK到&lt;span style=&quot;text-wrap: wrap;&quot;&gt;DWIN_SET文件夹&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;把&lt;span style=&quot;text-wrap: wrap;&quot;&gt;DWIN_SET文件夹拷贝到TF卡，下载到串口屏&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: wrap;&quot;&gt;33&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;</description><pubDate>Thu, 02 Nov 2023 14:17:25 +0800</pubDate></item><item><title>Delphi Tbytes 和数组作为函数或过程的参数</title><link>http://evelee.net/blog/?id=76</link><description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2020/12/202012037700_5760.jpg&quot; title=&quot;0015.jpg&quot; alt=&quot;0015.jpg&quot; style=&quot;white-space: normal; text-align: center;&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;Tbytes 就是动态数组 array of byte。以下代码在 Delphi 10 中编译通过&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #4F81BD; font-size: 16px;&quot;&gt;&lt;strong&gt;1. 静态数组&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button1Click(Sender:&amp;nbsp;TObject);
var
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I:Byte;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:string;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Buf:array[0..3]&amp;nbsp;of&amp;nbsp;Byte;
begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//---------------------------传址是Buf[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;I&amp;nbsp;:=&amp;nbsp;0&amp;nbsp;to&amp;nbsp;3&amp;nbsp;do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Buf[I]:=1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Test(Buf[0]);//同Test(Buf);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:=&amp;#39;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;I&amp;nbsp;:=&amp;nbsp;0&amp;nbsp;to&amp;nbsp;3&amp;nbsp;do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:=s+inttostr(Buf[I]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showmessage(s);&amp;nbsp;//输出结果是：2211
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//---------------------------更改一下传址
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;I&amp;nbsp;:=&amp;nbsp;0&amp;nbsp;to&amp;nbsp;3&amp;nbsp;do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Buf[I]:=1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Test(Buf[1]);//改为&amp;nbsp;Buf[1]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:=&amp;#39;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;I&amp;nbsp;:=&amp;nbsp;0&amp;nbsp;to&amp;nbsp;3&amp;nbsp;do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:=s+inttostr(Buf[I]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showmessage(s);&amp;nbsp;//输出结果是：1221
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #4F81BD;&quot;&gt;2. TBytes 和动态数组&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button2Click(Sender:&amp;nbsp;TObject);
var
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;I:Byte;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:string;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Buf:TBytes;//同&amp;nbsp;Buf:array&amp;nbsp;of&amp;nbsp;Byte;
begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Setlength(Buf,4);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//---------------------------传址是Buf[0]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;I&amp;nbsp;:=&amp;nbsp;0&amp;nbsp;to&amp;nbsp;3&amp;nbsp;do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Buf[I]:=1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Test(Buf);//同Test(Buf);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:=&amp;#39;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;I&amp;nbsp;:=&amp;nbsp;0&amp;nbsp;to&amp;nbsp;3&amp;nbsp;do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:=s+inttostr(Buf[I]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showmessage(s);&amp;nbsp;//输出结果是：2211
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//---------------------------更改一下传址
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;I&amp;nbsp;:=&amp;nbsp;0&amp;nbsp;to&amp;nbsp;3&amp;nbsp;do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Buf[I]:=1;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Test(Buf[1]);//改为&amp;nbsp;Buf[1]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:=&amp;#39;&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;I&amp;nbsp;:=&amp;nbsp;0&amp;nbsp;to&amp;nbsp;3&amp;nbsp;do
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:=s+inttostr(Buf[I]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;End;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showmessage(s);&amp;nbsp;//输出结果是：1221
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Test(var&amp;nbsp;Buf:array&amp;nbsp;of&amp;nbsp;Byte);
begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Buf[0]:=2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Buf[1]:=2;
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 13 Apr 2022 10:14:17 +0800</pubDate></item><item><title>Delphi 函数和过程传递参数的修饰符 var const out</title><link>http://evelee.net/blog/?id=75</link><description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2020/12/202012037700_5760.jpg&quot; title=&quot;0015.jpg&quot; alt=&quot;0015.jpg&quot; style=&quot;white-space: normal; text-align: center;&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;默认参数（传值），var（传址），out（输出），const（常量）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button1Click(Sender:&amp;nbsp;TObject);
var
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;str:string;
begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;str:=&amp;#39;abc&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Test1(str);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Showmessage(str);//输出&amp;#39;abc123&amp;#39;,var可理解是变量，可以修改
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;str:=&amp;#39;abc&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Test2(str);//编译不能通过，const可理解是常量，不能修改
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Showmessage(str);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;str:=&amp;#39;abc&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Test3(str);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Showmessage(str);//输出&amp;#39;123&amp;#39;,out是用于返回赋值的，而对out的任何输入都会被忽略
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;str:=&amp;#39;abc&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Test4(str);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Showmessage(str);//输出&amp;#39;abc&amp;#39;,&amp;nbsp;默认参数，没有修饰符
end;


procedure&amp;nbsp;TForm1.Test1(var&amp;nbsp;s:string);&amp;nbsp;//传址
begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:=s&amp;nbsp;+&amp;nbsp;&amp;#39;123&amp;#39;;
end;

procedure&amp;nbsp;TForm1.Test2(const&amp;nbsp;s:string);&amp;nbsp;//常量
begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:=s&amp;nbsp;+&amp;nbsp;&amp;#39;123&amp;#39;;&amp;nbsp;//这是无法编译的
end;

procedure&amp;nbsp;TForm1.Test3(out&amp;nbsp;s:string);&amp;nbsp;//输出
begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:=s&amp;nbsp;+&amp;nbsp;&amp;#39;123&amp;#39;;
end;

procedure&amp;nbsp;TForm1.Test4(s:string);&amp;nbsp;//默认参数，没有修饰符
begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s:=s&amp;nbsp;+&amp;nbsp;&amp;#39;123&amp;#39;;&amp;nbsp;//创建了一个新的变量s，而不会对原来的变量值做修改
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 12 Apr 2022 22:10:40 +0800</pubDate></item><item><title>FireDAC 和 Sqlite 八：Blob类型数据的插入和读取</title><link>http://evelee.net/blog/?id=74</link><description>&lt;p style=&quot;font-size: medium; white-space: normal; text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2022/03/202203242795_433.jpg&quot; title=&quot;0051.jpg&quot; alt=&quot;0051.jpg&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;Firedac是Delphi开发跨平台的数据库应用程序的通用数据访问组件，同样适用于C++ Builder和FreePascal。这里是Firedac操作Sqlite的学习笔记。文中代码在Delphi 11中编译通过。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;先将“&lt;/span&gt;&lt;a href=&quot;http://evelee.net/blog/?id=67&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 129, 189); font-size: 14px; text-decoration: underline;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;FireDAC 和 Sqlite 一 ：基本控件和设置&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;”一篇中提到的常用控件加入Form，并做好关联。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;再按照“&lt;/span&gt;&lt;a href=&quot;http://evelee.net/blog/?id=68&quot; target=&quot;_blank&quot; style=&quot;font-size: 14px; text-decoration: underline;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;FireDAC 和 Sqlite 二：创建数据库和表&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;”一篇中介绍建立数据库和表。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #4F81BD; font-size: 14px;&quot;&gt;&lt;strong&gt;例子一&lt;/strong&gt;&lt;/span&gt;：把内存流写入数据库后，再读出到另一个内存流，进行比对&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button1Click(Sender:&amp;nbsp;TObject);
var
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stm1,stm2:TmemoryStream;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Buf:TBytes;
const
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Data:&amp;nbsp;Array[0..2]&amp;nbsp;of&amp;nbsp;byte&amp;nbsp;=(200,201,202);
begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//初始化
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetLength(Buf,3);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stm1:=TmemoryStream.Create;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stm2:=TmemoryStream.Create;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stm1.Write(Data,3);//把Data数据写入stm1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//插入
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.SQL.Clear;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.SQL.Text&amp;nbsp;:=&amp;#39;INSERT&amp;nbsp;INTO&amp;nbsp;MyTable(Name,&amp;nbsp;Age,Picture)&amp;nbsp;VALUES(:name,&amp;nbsp;:age,&amp;nbsp;:Picture)&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.ParamByName(&amp;#39;Name&amp;#39;).AsString&amp;nbsp;:=&amp;nbsp;&amp;#39;Tom&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.ParamByName(&amp;#39;age&amp;#39;).AsByte&amp;nbsp;:=&amp;nbsp;12;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.ParamByName(&amp;#39;Picture&amp;#39;).LoadFromStream(stm1,ftBlob&amp;nbsp;,-1);//数据从stm1写入数据库
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.ExecSQL;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.Open(&amp;#39;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;MyTable&amp;#39;);//如果是修改打开的表，改完要重新打开
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//读取
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.SQL.Clear;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.SQL.Text&amp;nbsp;:=&amp;nbsp;&amp;#39;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;MyTable&amp;nbsp;WHERE&amp;nbsp;Age&amp;nbsp;=&amp;nbsp;:x&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.ParamByName(&amp;#39;x&amp;#39;).AsInteger&amp;nbsp;:=&amp;nbsp;12;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.Open();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TBlobField(FDQuery1.FieldByName(&amp;#39;Picture&amp;#39;)).SaveToStream(stm2);//数据读出到stm2
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//TBlobField(FDQuery1.FindField(&amp;#39;Picture&amp;#39;)).SaveToStream(stm2);//与上同
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stm2.position:=0;//重新定位
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stm2.Read(Buf,3);//把stm1数据写入Buf
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//显示比对
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Memo1.Text:=FDQuery1.FieldByName(&amp;#39;Name&amp;#39;).AsString;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Memo1.Text:=FDQuery1.FindField(&amp;#39;Name&amp;#39;).AsString;//与上同
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Memo1.Lines.Add(inttostr(Buf[0]));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Memo1.Lines.Add(inttostr(Buf[1]));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Memo1.Lines.Add(inttostr(Buf[2]));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//释放内存流
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stm1.Free;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stm2.Free;
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #4F81BD;&quot;&gt;&lt;strong&gt;例子二&lt;/strong&gt;&lt;/span&gt;：把内存流写入数据库后，再以数组的形式读出，进行比对&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button20Click(Sender:&amp;nbsp;TObject);
var
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stm1:TmemoryStream;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Buf:TBytes;
const
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Data:&amp;nbsp;Array[0..2]&amp;nbsp;of&amp;nbsp;byte&amp;nbsp;=(200,201,202);
begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//初始化
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SetLength(Buf,3);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stm1:=TmemoryStream.Create;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stm1.Write(Data,3);//把Data数据写入stm1
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//插入
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.SQL.Clear;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.SQL.Text&amp;nbsp;:=&amp;#39;INSERT&amp;nbsp;INTO&amp;nbsp;MyTable(Name,&amp;nbsp;Age,Picture)&amp;nbsp;VALUES(:name,&amp;nbsp;:age,&amp;nbsp;:Picture)&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.ParamByName(&amp;#39;Name&amp;#39;).AsString&amp;nbsp;:=&amp;nbsp;&amp;#39;Tom&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.ParamByName(&amp;#39;age&amp;#39;).AsByte&amp;nbsp;:=&amp;nbsp;12;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.ParamByName(&amp;#39;Picture&amp;#39;).LoadFromStream(stm1,ftBlob&amp;nbsp;,-1);//数据从stm1写入
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.ExecSQL;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.Open(&amp;#39;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;MyTable&amp;#39;);//如果是修改打开的表，改完要重新打开
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//读取
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.SQL.Clear;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.SQL.Text&amp;nbsp;:=&amp;nbsp;&amp;#39;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;MyTable&amp;nbsp;WHERE&amp;nbsp;Age&amp;nbsp;=&amp;nbsp;:x&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.ParamByName(&amp;#39;x&amp;#39;).AsInteger&amp;nbsp;:=&amp;nbsp;12;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.Open();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Buf:=FDQuery1.FindField(&amp;#39;Picture&amp;#39;).AsBytes;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//显示比对
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Memo1.Text:=FDQuery1.FindField(&amp;#39;Name&amp;#39;).AsString;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Memo1.Lines.Add(inttostr(Buf[0]));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Memo1.Lines.Add(inttostr(Buf[1]));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Memo1.Lines.Add(inttostr(Buf[2]));
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//释放内存流
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stm1.Free;
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Fri, 01 Apr 2022 13:49:15 +0800</pubDate></item><item><title>FireDAC 和 Sqlite 七：事务</title><link>http://evelee.net/blog/?id=73</link><description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2022/03/202203242795_433.jpg&quot; title=&quot;0051.jpg&quot; alt=&quot;0051.jpg&quot; style=&quot;font-size: medium; white-space: normal; text-align: center;&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;事务（Transaction）是一个对数据库执行工作单元。是以逻辑顺序完成的工作单位或序列，可以是由用户手动操作完成，也可以是由某种数据库程序自动完成。。它是一种机制，用以维护数据库的完整性。所谓的事务，它是一个操作序列，这些操作要么都执行，要么都不执行，它是一个不可分割的工作单位。一个事务可以是一条SQL语句、一组SQL语句或整个程序。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #4F81BD; font-size: 14px;&quot;&gt;&lt;strong&gt;事务的语句&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;开始事务：BEGIN TRANSACTION（事务）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;提交事务：COMMIT TRANSACTION（事务）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;回滚事务：ROLLBACK TRANSACTION（事务）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #4F81BD; font-size: 14px;&quot;&gt;&lt;strong&gt;事务的属性&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;事务（Transaction）具有以下四个标准属性，通常根据首字母缩写为 ACID：&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot; style=&quot;list-style-type: square;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;原子性（Atomicity）：确保工作单位内的所有操作都成功完成，否则，事务会在出现故障时终止，之前的操作也会回滚到以前的状态。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;一致性（Consistency)：确保数据库在成功提交的事务上正确地改变状态。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;隔离性（Isolation）：使事务操作相互独立和透明。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;持久性（Durability）：确保已提交事务的结果或效果在系统发生故障的情况下仍然存在。&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;begin
&amp;nbsp;&amp;nbsp;FDConnection1.StartTransaction;&amp;nbsp;//开始
&amp;nbsp;&amp;nbsp;try
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//可能会出错的代码
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDConnection1.Commit;&amp;nbsp;//提交
&amp;nbsp;&amp;nbsp;except
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDConnection1.Rollback;&amp;nbsp;//回滚
&amp;nbsp;&amp;nbsp;end;
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 29 Mar 2022 15:04:39 +0800</pubDate></item><item><title>FireDAC 和 Sqlite 六：加密</title><link>http://evelee.net/blog/?id=72</link><description>&lt;p style=&quot;font-size: medium; white-space: normal; text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2022/03/202203242795_433.jpg&quot; title=&quot;0051.jpg&quot; alt=&quot;0051.jpg&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;Firedac是Delphi开发跨平台的数据库应用程序的通用数据访问组件，同样适用于C++ Builder和FreePascal。这里是Firedac操作Sqlite的学习笔记。文中代码在Delphi 11中编译通过。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;先将“&lt;/span&gt;&lt;a href=&quot;http://evelee.net/blog/?id=67&quot; target=&quot;_blank&quot; style=&quot;text-decoration: underline; color: rgb(79, 129, 189); font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #4F81BD; font-size: 14px;&quot;&gt;FireDAC 和 Sqlite 一 ：基本控件和设置&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;”一篇中提到的常用控件加入Form，并做好关联。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;Firedac支持数据库加密方式有：aes-128,aes-192,aes-256, aes-ctr-128,aes-ctr-192,aes-ctr-256, aes-ecb-128,aes-ecb-192,aes-ecb-256&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #4F81BD; font-size: 14px;&quot;&gt;&lt;strong&gt;一. 创建和打开有密码的数据库&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button1Click(Sender:&amp;nbsp;TObject);
begin
&amp;nbsp;&amp;nbsp;FDConnection1.Params.Add(&amp;#39;DriverID=SQLite&amp;#39;);
&amp;nbsp;&amp;nbsp;FDConnection1.Params.Add(&amp;#39;Database=D:\SQLite\FireDAC.db&amp;#39;);
&amp;nbsp;&amp;nbsp;FDConnection1.Params.Add(&amp;#39;Password=mima&amp;#39;);&amp;nbsp;//与&amp;nbsp;Password=aes-256:mima;相同
&amp;nbsp;&amp;nbsp;FDConnection1.Connected&amp;nbsp;:=&amp;nbsp;True;
&amp;nbsp;&amp;nbsp;FDQuery1.Open(&amp;#39;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;MyTable&amp;#39;);
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #4F81BD; font-size: 14px;&quot;&gt;&lt;strong&gt;二. 修改密码&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button1Click(Sender:&amp;nbsp;TObject);
begin
&amp;nbsp;&amp;nbsp;FDConnection1.Params.Add(&amp;#39;DriverID=SQLite&amp;#39;);
&amp;nbsp;&amp;nbsp;FDConnection1.Params.Add(&amp;#39;Database=D:\SQLite\FireDAC.db&amp;#39;);
&amp;nbsp;&amp;nbsp;FDConnection1.Params.Add(&amp;#39;Password=mima&amp;#39;);
&amp;nbsp;&amp;nbsp;FDConnection1.Params.Add(&amp;#39;NewPassword=&amp;#39;);&amp;nbsp;//新密码,&amp;nbsp;这里留空表示取消密码
&amp;nbsp;&amp;nbsp;FDConnection1.Connected&amp;nbsp;:=&amp;nbsp;True;
&amp;nbsp;&amp;nbsp;FDConnection1.Connected&amp;nbsp;:=&amp;nbsp;False;
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 29 Mar 2022 14:34:22 +0800</pubDate></item><item><title>FireDAC 和 Sqlite 五：备份、整理碎片</title><link>http://evelee.net/blog/?id=71</link><description>&lt;p style=&quot;font-size: medium; white-space: normal; text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2022/03/202203242795_433.jpg&quot; title=&quot;0051.jpg&quot; alt=&quot;0051.jpg&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;Firedac是Delphi开发跨平台的数据库应用程序的通用数据访问组件，同样适用于C++ Builder和FreePascal。这里是Firedac操作Sqlite的学习笔记。文中代码在Delphi 11中编译通过。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;先将“&lt;/span&gt;&lt;a href=&quot;http://evelee.net/blog/?id=67&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 129, 189); font-size: 14px; text-decoration: underline;&quot;&gt;&lt;span style=&quot;color: #4F81BD; font-size: 14px;&quot;&gt;FireDAC 和 Sqlite 一 ：基本控件和设置&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;”一篇中提到的常用控件加入Form，并做好关联。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;color: #4F81BD; font-size: 14px;&quot;&gt;&lt;strong&gt;一. 备份&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;先向Form中加入FDSQLiteBackup控件，位置在FireDAC Services里。&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button1Click(Sender:&amp;nbsp;TObject);
begin
&amp;nbsp;&amp;nbsp;//先建立一个空的数据库，即要生成的备份文件
&amp;nbsp;&amp;nbsp;FDConnection1.DriverName&amp;nbsp;:=&amp;nbsp;&amp;#39;SQLite&amp;#39;;
&amp;nbsp;&amp;nbsp;FDConnection1.Params.Add(&amp;#39;Database=D:\SQLite\FireDAC_Bak.db&amp;#39;);
&amp;nbsp;&amp;nbsp;FDConnection1.Open();
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;//备份
&amp;nbsp;&amp;nbsp;FDSQLiteBackup1.DriverLink&amp;nbsp;:=&amp;nbsp;FDPhysSQLiteDriverLink1;&amp;nbsp;//也可以在该控件的属性里设置
&amp;nbsp;&amp;nbsp;FDSQLiteBackup1.Database&amp;nbsp;:=&amp;nbsp;&amp;#39;D:\SQLite\FireDAC.db&amp;#39;;&amp;nbsp;//需要备份的数据库，支持&amp;nbsp;Url
&amp;nbsp;&amp;nbsp;FDSQLiteBackup1.DestDatabaseObj&amp;nbsp;:=&amp;nbsp;FDConnection1.CliObj;
&amp;nbsp;&amp;nbsp;FDSQLiteBackup1.Backup;
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #4F81BD; font-size: 14px;&quot;&gt;&lt;strong&gt;二. 整理碎片&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;先向Form中加入FDSQLiteValidate控件，位置在FireDAC Services里。&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button1Click(Sender:&amp;nbsp;TObject);
begin
&amp;nbsp;&amp;nbsp;FDSQLiteValidate1.DriverLink&amp;nbsp;:=&amp;nbsp;FDPhysSQLiteDriverLink1;//也可以在该控件的属性里设置
&amp;nbsp;&amp;nbsp;FDSQLiteValidate1.Database&amp;nbsp;:=&amp;nbsp;&amp;#39;D:\SQLite\FireDAC.db&amp;#39;;
&amp;nbsp;&amp;nbsp;FDSQLiteValidate1.Sweep;
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 29 Mar 2022 13:52:25 +0800</pubDate></item><item><title>FireDAC 和 Sqlite 四：排序</title><link>http://evelee.net/blog/?id=70</link><description>&lt;p style=&quot;font-size: medium; white-space: normal; text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2022/03/202203242795_433.jpg&quot; title=&quot;0051.jpg&quot; alt=&quot;0051.jpg&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;Firedac是Delphi开发跨平台的数据库应用程序的通用数据访问组件，同样适用于C++ Builder和FreePascal。这里是Firedac操作Sqlite的学习笔记。文中代码在Delphi 11中编译通过。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;先将“&lt;/span&gt;&lt;a href=&quot;http://evelee.net/blog/?id=67&quot; target=&quot;_blank&quot; style=&quot;text-decoration: underline; color: rgb(79, 129, 189); font-size: 14px;&quot;&gt;&lt;span style=&quot;color: #4F81BD; font-size: 14px;&quot;&gt;FireDAC 和 Sqlite 一 ：基本控件和设置&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;”一篇中提到的常用控件加入Form，并做好关联。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;SQLite 内部是按二进制排序, 可以支持 ANSI。 FireDAC 通过 TFDSQLiteCollation 支持了 Unicode 排序, 并可通过其 OnCompare 事件自定义排序。先向Form中加入FDSQLiteCollation控件，位置在FireDAC Services里。&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button1Click(Sender:&amp;nbsp;TObject);
begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDSQLiteCollation1.DriverLink&amp;nbsp;:=&amp;nbsp;FDPhysSQLiteDriverLink1;//也可以在该控件的属性里设置
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDSQLiteCollation1.CollationKind&amp;nbsp;:=&amp;nbsp;scCompareString;&amp;nbsp;//默认值Unicode&amp;nbsp;不区分大小写
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDSQLiteCollation1.LocaleName&amp;nbsp;:=&amp;nbsp;&amp;#39;zh-CN&amp;#39;;//也可以在该控件的属性里设置
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDSQLiteCollation1.Flags&amp;nbsp;:=&amp;nbsp;[sfIgnoreCase];//也可以在该控件的属性里设置
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDSQLiteCollation1.CollationName&amp;nbsp;:=&amp;nbsp;&amp;#39;MyCol&amp;#39;;//下面所有的调用全要依赖这个名称
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDSQLiteCollation1.Active&amp;nbsp;:=&amp;nbsp;True;//也可以在该控件的属性里设置
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.Open(&amp;#39;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;MyTable&amp;#39;);&amp;nbsp;//不排序
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.Open(&amp;#39;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;MyTable&amp;nbsp;ORDER&amp;nbsp;BY&amp;nbsp;Name&amp;#39;);&amp;nbsp;//SQLite&amp;nbsp;内置排序&amp;nbsp;Name字段
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.Open(&amp;#39;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;MyTable&amp;nbsp;ORDER&amp;nbsp;BY&amp;nbsp;Name&amp;nbsp;COLLATE&amp;nbsp;MyCol&amp;#39;);&amp;nbsp;//FireDAC&amp;nbsp;排序&amp;nbsp;Name字段
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 29 Mar 2022 10:36:34 +0800</pubDate></item><item><title>FireDAC 和 Sqlite 三：数据的操作</title><link>http://evelee.net/blog/?id=69</link><description>&lt;p style=&quot;font-size: medium; white-space: normal; text-align: center;&quot;&gt;&lt;img class=&quot;ue-image&quot; src=&quot;http://pic.evelee.net/blog/pic/2022/03/202203242795_433.jpg&quot; title=&quot;0051.jpg&quot; alt=&quot;0051.jpg&quot;/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;br/&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;Firedac是Delphi开发跨平台的数据库应用程序的通用数据访问组件，同样适用于C++ Builder和FreePascal。这里是Firedac操作Sqlite的学习笔记。文中代码在Delphi 11中编译通过。&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;先将“&lt;/span&gt;&lt;a href=&quot;http://evelee.net/blog/?id=67&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 129, 189); font-size: 14px; text-decoration: underline;&quot;&gt;&lt;span style=&quot;color: #4F81BD; font-size: 14px;&quot;&gt;FireDAC 和 Sqlite 一：基本控件和设置&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;”一篇中提到的常用控件加入Form，并做好关联。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #4F81BD; font-size: 16px;&quot;&gt;&lt;strong&gt;一. 数据的插入&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button1Click(Sender:&amp;nbsp;TObject);
const
&amp;nbsp;&amp;nbsp;Table:string&amp;nbsp;=&amp;nbsp;&amp;#39;CREATE&amp;nbsp;TABLE&amp;nbsp;MyTable(Id&amp;nbsp;Integer&amp;nbsp;PRIMARY&amp;nbsp;KEY&amp;nbsp;AUTOINCREMENT,&amp;nbsp;Name&amp;nbsp;String(10),&amp;nbsp;Age&amp;nbsp;Byte)&amp;#39;;
&amp;nbsp;&amp;nbsp;//Id,&amp;nbsp;Name,&amp;nbsp;Age&amp;nbsp;三个字段
&amp;nbsp;&amp;nbsp;//Integer&amp;nbsp;PRIMARY&amp;nbsp;KEY&amp;nbsp;AUTOINCREMENT:&amp;nbsp;自增字段
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;Insert:string&amp;nbsp;=&amp;nbsp;&amp;#39;INSERT&amp;nbsp;INTO&amp;nbsp;MyTable(Name,&amp;nbsp;Age)&amp;nbsp;VALUES(:name,&amp;nbsp;:age)&amp;#39;;
begin
&amp;nbsp;&amp;nbsp;//先创建表
&amp;nbsp;&amp;nbsp;FDConnection1.ExecSQL(Table);
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;//方法一
&amp;nbsp;&amp;nbsp;FDQuery1.Open(&amp;#39;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;MyTable&amp;#39;);
&amp;nbsp;&amp;nbsp;FDConnection1.ExecSQL(Insert,&amp;nbsp;[&amp;#39;AAA&amp;#39;,&amp;nbsp;11]);
&amp;nbsp;&amp;nbsp;FDConnection1.ExecSQL(Insert,&amp;nbsp;[&amp;#39;BBB&amp;#39;,&amp;nbsp;22]);
&amp;nbsp;&amp;nbsp;FDConnection1.ExecSQL(Insert,&amp;nbsp;[&amp;#39;CCC&amp;#39;,&amp;nbsp;33]);
&amp;nbsp;&amp;nbsp;FDQuery1.Refresh;//如果是修改打开的表，改完只要刷新即可
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;//方法二
&amp;nbsp;&amp;nbsp;FDQuery1.SQL.Clear;
&amp;nbsp;&amp;nbsp;FDQuery1.SQL.Text&amp;nbsp;:=Insert;
&amp;nbsp;&amp;nbsp;FDQuery1.ParamByName(&amp;#39;Name&amp;#39;).AsString&amp;nbsp;:=&amp;nbsp;&amp;#39;FFF&amp;#39;;
&amp;nbsp;&amp;nbsp;FDQuery1.ParamByName(&amp;#39;age&amp;#39;).AsByte&amp;nbsp;:=&amp;nbsp;66;
&amp;nbsp;&amp;nbsp;FDQuery1.ExecSQL;
&amp;nbsp;&amp;nbsp;FDQuery1.Open(&amp;#39;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;MyTable&amp;#39;);//如果是修改打开的表，改完要重新打开
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong style=&quot;white-space: normal; color: rgb(79, 129, 189);&quot;&gt;二. 数据的&lt;/strong&gt;&lt;strong style=&quot;white-space: normal; color: rgb(79, 129, 189);&quot;&gt;更&lt;/strong&gt;&lt;strong style=&quot;white-space: normal; color: rgb(79, 129, 189);&quot;&gt;新&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button2Click(Sender:&amp;nbsp;TObject);
begin
&amp;nbsp;&amp;nbsp;FDConnection1.ExecSQL(&amp;#39;UPDATE&amp;nbsp;MyTable&amp;nbsp;SET&amp;nbsp;Age=:a&amp;nbsp;WHERE&amp;nbsp;Name=:n&amp;#39;,&amp;nbsp;[Random(100),&amp;nbsp;&amp;#39;AAA&amp;#39;]);
&amp;nbsp;&amp;nbsp;FDQuery1.Refresh;
end;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;strong style=&quot;color: rgb(79, 129, 189);&quot;&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;span style=&quot;font-size: 16px;&quot;&gt;&lt;strong style=&quot;white-space: normal; color: rgb(79, 129, 189);&quot;&gt;三. 数据的删除&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button3Click(Sender:&amp;nbsp;TObject);
begin
&amp;nbsp;&amp;nbsp;FDConnection1.ExecSQL(&amp;#39;DELETE&amp;nbsp;FROM&amp;nbsp;MyTable&amp;nbsp;WHERE&amp;nbsp;Age&amp;gt;33&amp;#39;);
&amp;nbsp;&amp;nbsp;FDQuery1.Refresh;
end;&lt;/pre&gt;&lt;p style=&quot;font-size: medium; white-space: normal;&quot;&gt;&lt;strong style=&quot;white-space: normal; color: rgb(79, 129, 189);&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/strong&gt;&lt;strong style=&quot;white-space: normal; font-size: 16px; color: rgb(79, 129, 189);&quot;&gt;四. 数据的查询&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button4Click(Sender:&amp;nbsp;TObject);
var
&amp;nbsp;&amp;nbsp;V:&amp;nbsp;Variant;
begin
&amp;nbsp;&amp;nbsp;//方法一：
&amp;nbsp;&amp;nbsp;//通过年龄查名字
&amp;nbsp;&amp;nbsp;V&amp;nbsp;:=&amp;nbsp;FDConnection1.ExecSQLScalar(&amp;#39;SELECT&amp;nbsp;Name&amp;nbsp;FROM&amp;nbsp;MyTable&amp;nbsp;WHERE&amp;nbsp;Age&amp;nbsp;=&amp;nbsp;:x&amp;#39;,&amp;nbsp;[&amp;#39;22&amp;#39;]);
&amp;nbsp;&amp;nbsp;ShowMessage(V);
&amp;nbsp;&amp;nbsp;//通过名字查年龄
&amp;nbsp;&amp;nbsp;V&amp;nbsp;:=&amp;nbsp;FDConnection1.ExecSQLScalar(&amp;#39;SELECT&amp;nbsp;Age&amp;nbsp;FROM&amp;nbsp;MyTable&amp;nbsp;WHERE&amp;nbsp;Name&amp;nbsp;=&amp;nbsp;:x&amp;#39;,&amp;nbsp;[&amp;#39;FFF&amp;#39;]);
&amp;nbsp;&amp;nbsp;ShowMessage(V);
&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;//方法二：
&amp;nbsp;&amp;nbsp;//通过年龄查名字
&amp;nbsp;&amp;nbsp;FDQuery1.SQL.Clear;
&amp;nbsp;&amp;nbsp;FDQuery1.SQL.Text&amp;nbsp;:=&amp;nbsp;&amp;#39;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;MyTable&amp;nbsp;WHERE&amp;nbsp;Age&amp;nbsp;=&amp;nbsp;:x&amp;#39;;
&amp;nbsp;&amp;nbsp;FDQuery1.ParamByName(&amp;#39;x&amp;#39;).AsInteger&amp;nbsp;:=&amp;nbsp;22;
&amp;nbsp;&amp;nbsp;FDQuery1.Open();
&amp;nbsp;&amp;nbsp;Memo1.Text:=FDQuery1.FieldByName(&amp;#39;Name&amp;#39;).AsString;&amp;nbsp;&amp;nbsp;
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong style=&quot;white-space: normal; font-size: 16px; color: rgb(79, 129, 189);&quot;&gt;五. 获取Insert的自增ID&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-pascal&quot;&gt;procedure&amp;nbsp;TForm1.Button11Click(Sender:&amp;nbsp;TObject);
begin
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//方法一：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showmessage(&amp;nbsp;FDConnection1.GetLastAutoGenValue(&amp;#39;MyTable&amp;#39;)&amp;nbsp;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//方法二：
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.Open(&amp;#39;SELECT&amp;nbsp;last_insert_rowid()&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;showmessage(FDQuery1.Fields[0].Value);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FDQuery1.Open(&amp;#39;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;MyTable&amp;#39;);//如果是查询打开的表，查完后要重新打开
end;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Fri, 25 Mar 2022 14:18:58 +0800</pubDate></item></channel></rss><!--40.90 ms , 7 query , 430kb memory , 0 error-->