鸣翠柳 發表於 2019-7-3 15:46:00

delphi 参数化sql

<p>曾经查过资料,后来忘了,现在做一下记录。</p>
<p>---------</p>
<p>在 sql 语句里占位使用 一个冒号和一个用来表示这个位置的符号, 例如:SELECT * FROM aTableName WHERE aCol =&nbsp; :ColVal</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">SELECT</span> <span style="color: rgba(128, 128, 128, 1)">*</span> <span style="color: rgba(0, 0, 255, 1)">FROM</span> aTableName <span style="color: rgba(0, 0, 255, 1)">WHERE</span> aCol <span style="color: rgba(128, 128, 128, 1)">=</span>:ColVal</pre>
</div>
<p>对占位了的地方赋值这里使用的是 paremeters 属性的 paramByName 作的, 例如:</p>
<div class="cnblogs_code">
<pre>LDataSet.Parameters.ParamByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ColVal</span><span style="color: rgba(128, 0, 0, 1)">'</span>).Value := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">SomeValue</span><span style="color: rgba(128, 0, 0, 1)">'</span>;</pre>
</div>
<p>---------</p>
<p>最近在 Delphi 7 中通过参数化的方式存汉字字符串,出现只存入了一部分的情况,搜索资料并测试之后,发现设置 DataType = ftWideString 可以解决。</p>
<p>示例:</p>
<div class="cnblogs_code">
<pre>LCommand.Parameters.ParamByName(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">AKeyName</span><span style="color: rgba(128, 0, 0, 1)">'</span>).DataType :=<span style="color: rgba(0, 0, 0, 1)"> ftWideString;
LCommand.Parameters.ParamByName(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">AKeyName</span><span style="color: rgba(128, 0, 0, 1)">'</span>).Value := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">我没有,我不是,别瞎说</span><span style="color: rgba(128, 0, 0, 1)">'</span>;</pre>
</div>
<p>DataType 的类型:DB.pas/TFieldType</p>
<p>--date=2019-08-16</p>
<p>&nbsp;</p>
<p>---------</p>
<p>为了使贴出来的代码具有完成性和尽量的简单性, 把以前的代码改写了一下, 现在的代码是控制台程序,</p>
<p>在程序体中对数据库访问代码作了简单的调用.</p>
<p>---------</p>
<p>今天重新看了一遍代码,发现一个问题,就是 程序入口里的变量 QueryResult 所使用过的对象都没有释放!!!</p>
<p>--date=2019-09-11</p>
<p>---------</p>
<p>数据访问单元的代码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">unit</span><span style="color: rgba(0, 0, 0, 1)"> uDBAccesser;
</span><span style="color: rgba(0, 128, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 255, 1)">interface</span>
<span style="color: rgba(0, 128, 128, 1)">4</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 255, 1)">uses</span>
<span style="color: rgba(0, 128, 128, 1)">6</span> <span style="color: rgba(0, 0, 0, 1)">System.Generics.Collections, Data.Win.ADODB;
</span><span style="color: rgba(0, 128, 128, 1)">7</span>
<span style="color: rgba(0, 128, 128, 1)">8</span>
<span style="color: rgba(0, 128, 128, 1)">9</span> <span style="color: rgba(0, 0, 255, 1)">type</span> TTAbleInfo = <span style="color: rgba(0, 0, 255, 1)">record</span>
<span style="color: rgba(0, 128, 128, 1)"> 10</span> <span style="color: rgba(0, 0, 0, 1)">DataSource : String;
</span><span style="color: rgba(0, 128, 128, 1)"> 11</span> <span style="color: rgba(0, 0, 0, 1)">DbName   : String;
</span><span style="color: rgba(0, 128, 128, 1)"> 12</span> <span style="color: rgba(0, 0, 0, 1)">Username   : String;
</span><span style="color: rgba(0, 128, 128, 1)"> 13</span> <span style="color: rgba(0, 0, 0, 1)">Password   : String;
</span><span style="color: rgba(0, 128, 128, 1)"> 14</span> <span style="color: rgba(0, 0, 0, 1)">Name       : String;
</span><span style="color: rgba(0, 128, 128, 1)"> 15</span> <span style="color: rgba(0, 0, 0, 1)">IntCol   : String;
</span><span style="color: rgba(0, 128, 128, 1)"> 16</span> <span style="color: rgba(0, 0, 0, 1)">TxtCol   : String;
</span><span style="color: rgba(0, 128, 128, 1)"> 17</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 18</span>
<span style="color: rgba(0, 128, 128, 1)"> 19</span> <span style="color: rgba(0, 0, 255, 1)">type</span> TEntity = <span style="color: rgba(0, 0, 255, 1)">record</span>
<span style="color: rgba(0, 128, 128, 1)"> 20</span> <span style="color: rgba(0, 0, 0, 1)">SomeInt : Integer;
</span><span style="color: rgba(0, 128, 128, 1)"> 21</span> <span style="color: rgba(0, 0, 0, 1)">SomeTxt : String;
</span><span style="color: rgba(0, 128, 128, 1)"> 22</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 23</span>
<span style="color: rgba(0, 128, 128, 1)"> 24</span> <span style="color: rgba(0, 0, 255, 1)">type</span> TDBAccesser = <span style="color: rgba(0, 0, 255, 1)">class</span>
<span style="color: rgba(0, 128, 128, 1)"> 25</span>   <span style="color: rgba(0, 0, 255, 1)">private</span>
<span style="color: rgba(0, 128, 128, 1)"> 26</span> <span style="color: rgba(0, 0, 0, 1)">    FConn : TADOConnection;
</span><span style="color: rgba(0, 128, 128, 1)"> 27</span>
<span style="color: rgba(0, 128, 128, 1)"> 28</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> Query( <span style="color: rgba(0, 0, 255, 1)">const</span> ASql : String; <span style="color: rgba(0, 0, 255, 1)">const</span> AParams : TDictionary&lt;String, Variant&gt;) : TList&lt;TEntity&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 29</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 广泛含义的更新</span>
<span style="color: rgba(0, 128, 128, 1)"> 30</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> Update(Const ASql : String; <span style="color: rgba(0, 0, 255, 1)">const</span> AParams : TDictionary&lt;String, Variant&gt;) : Boolean; <span style="color: rgba(0, 0, 255, 1)">overload</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 31</span>   <span style="color: rgba(0, 0, 255, 1)">public</span>
<span style="color: rgba(0, 128, 128, 1)"> 32</span>   <span style="color: rgba(0, 0, 255, 1)">constructor</span> <span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)"> 33</span>   <span style="color: rgba(0, 0, 255, 1)">destructor</span><span style="color: rgba(0, 0, 255, 1)">Destroy</span>(); <span style="color: rgba(0, 0, 255, 1)">override</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 34</span>
<span style="color: rgba(0, 128, 128, 1)"> 35</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> QueryAll() : TList&lt;TEntity&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 36</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> QueryByInt(<span style="color: rgba(0, 0, 255, 1)">const</span> AInt : Integer) : TList&lt;TEntity&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> QueryByTxt(<span style="color: rgba(0, 0, 255, 1)">const</span> ATxt : String ) : TList&lt;TEntity&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 38</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> InsertOne(<span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> AEntity : TEntity) : Boolean;
</span><span style="color: rgba(0, 128, 128, 1)"> 39</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> Delete(<span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> AEntity : TEntity) : Boolean;
</span><span style="color: rgba(0, 128, 128, 1)"> 40</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 狭义的更新</span>
<span style="color: rgba(0, 128, 128, 1)"> 41</span>   <span style="color: rgba(0, 0, 255, 1)">function</span> Update(<span style="color: rgba(0, 0, 255, 1)">const</span> AOldValue : TEntity; <span style="color: rgba(0, 0, 255, 1)">const</span> ANewValue : TEntity) : Boolean; <span style="color: rgba(0, 0, 255, 1)">overload</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 42</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 43</span>
<span style="color: rgba(0, 128, 128, 1)"> 44</span>
<span style="color: rgba(0, 128, 128, 1)"> 45</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)"> 46</span> <span style="color: rgba(0, 0, 0, 1)">TableInfo : TTableInfo;
</span><span style="color: rgba(0, 128, 128, 1)"> 47</span>
<span style="color: rgba(0, 128, 128, 1)"> 48</span> <span style="color: rgba(0, 0, 255, 1)">implementation</span>
<span style="color: rgba(0, 128, 128, 1)"> 49</span>
<span style="color: rgba(0, 128, 128, 1)"> 50</span> <span style="color: rgba(0, 0, 255, 1)">uses</span>
<span style="color: rgba(0, 128, 128, 1)"> 51</span> <span style="color: rgba(0, 0, 0, 1)">System.SysUtils, System.Variants, Winapi.ActiveX;
</span><span style="color: rgba(0, 128, 128, 1)"> 52</span>
<span style="color: rgba(0, 128, 128, 1)"> 53</span>
<span style="color: rgba(0, 128, 128, 1)"> 54</span> <span style="color: rgba(0, 0, 255, 1)">constructor</span> TDBAccesser.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)"> 55</span> <span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> MS SQL</span>
<span style="color: rgba(0, 128, 128, 1)"> 56</span>   LConnStrFormat : String = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">provider=SQLOLEDB.1;password=%s;User ID=%s;</span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)"> 57</span>                           + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Initial CataLog=%s;Data source=%s;</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 58</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)"> 59</span> <span style="color: rgba(0, 0, 0, 1)">LConnStr : String;
</span><span style="color: rgba(0, 128, 128, 1)"> 60</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 61</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)"> 62</span>   LConnStr :=<span style="color: rgba(0, 0, 0, 1)"> Format(LConnStrFormat, [TableInfo.Password, TableInfo.Username,
</span><span style="color: rgba(0, 128, 128, 1)"> 63</span> <span style="color: rgba(0, 0, 0, 1)">                                        TableInfo.DbName, TableInfo.DataSource]);
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span>
<span style="color: rgba(0, 128, 128, 1)"> 65</span>   Self.FConn := TADOConnection.<span style="color: rgba(0, 0, 255, 1)">Create</span>(<span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 66</span>   Self.FConn.ConnectionString :=<span style="color: rgba(0, 0, 0, 1)"> LConnStr;
</span><span style="color: rgba(0, 128, 128, 1)"> 67</span>   Self.FConn.LoginPrompt :=<span style="color: rgba(0, 0, 0, 1)"> False;
</span><span style="color: rgba(0, 128, 128, 1)"> 68</span>   Self.FConn.Connected   :=<span style="color: rgba(0, 0, 0, 1)"> True;
</span><span style="color: rgba(0, 128, 128, 1)"> 69</span>   <span style="color: rgba(0, 0, 255, 1)">except</span>
<span style="color: rgba(0, 128, 128, 1)"> 70</span>   on Err : Exception <span style="color: rgba(0, 0, 255, 1)">do</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 71</span>       <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(Self.FConn);
</span><span style="color: rgba(0, 128, 128, 1)"> 72</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Error on create DBAccesser: </span><span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> Err.Message);
</span><span style="color: rgba(0, 128, 128, 1)"> 73</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 74</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 75</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 76</span>
<span style="color: rgba(0, 128, 128, 1)"> 77</span> <span style="color: rgba(0, 0, 255, 1)">destructor</span> TDBAccesser.<span style="color: rgba(0, 0, 255, 1)">Destroy</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 78</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 79</span>   <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(Self.FConn);
</span><span style="color: rgba(0, 128, 128, 1)"> 80</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 81</span>
<span style="color: rgba(0, 128, 128, 1)"> 82</span>
<span style="color: rgba(0, 128, 128, 1)"> 83</span> <span style="color: rgba(0, 0, 255, 1)">function</span> TDBAccesser.Query(<span style="color: rgba(0, 0, 255, 1)">const</span> ASql: <span style="color: rgba(0, 0, 255, 1)">string</span>; <span style="color: rgba(0, 0, 255, 1)">const</span> AParams: TDictionary&lt;System.<span style="color: rgba(0, 0, 255, 1)">string</span>,System.Variant&gt;) : TList&lt;TEntity&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 84</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)"> 85</span> <span style="color: rgba(0, 0, 0, 1)">LDataSet : TADODataSet;
</span><span style="color: rgba(0, 128, 128, 1)"> 86</span> <span style="color: rgba(0, 0, 0, 1)">LRow : TEntity;
</span><span style="color: rgba(0, 128, 128, 1)"> 87</span> <span style="color: rgba(0, 0, 0, 1)">LKey : String;
</span><span style="color: rgba(0, 128, 128, 1)"> 88</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 89</span>   LDataSet := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 90</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)"> 91</span>   LDataSet := TADODataSet.<span style="color: rgba(0, 0, 255, 1)">Create</span>(<span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 92</span>   LDataSet.Connection:=<span style="color: rgba(0, 0, 0, 1)"> Self.FConn;
</span><span style="color: rgba(0, 128, 128, 1)"> 93</span>   LDataSet.CommandText :=<span style="color: rgba(0, 0, 0, 1)"> ASql;
</span><span style="color: rgba(0, 128, 128, 1)"> 94</span>
<span style="color: rgba(0, 128, 128, 1)"> 95</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 我印象有篇文章说这句必须要有, 但不写也没发现问题</span>
<span style="color: rgba(0, 128, 128, 1)"> 96</span> <span style="color: rgba(0, 0, 0, 1)">    LDataSet.Parameters.ParseSQL(LDataSet.CommandText, True);
</span><span style="color: rgba(0, 128, 128, 1)"> 97</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (AParams &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span>) <span style="color: rgba(0, 0, 255, 1)">then</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 98</span>       <span style="color: rgba(0, 0, 255, 1)">for</span> LKey <span style="color: rgba(0, 0, 255, 1)">in</span> AParams.Keys <span style="color: rgba(0, 0, 255, 1)">do</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 99</span>         LDataSet.Parameters.ParamByName(LKey).Value :=<span style="color: rgba(0, 0, 0, 1)"> AParams.Items;
</span><span style="color: rgba(0, 128, 128, 1)">100</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">101</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">102</span>
<span style="color: rgba(0, 128, 128, 1)">103</span> <span style="color: rgba(0, 0, 0, 1)">    LDataSet.Open;
</span><span style="color: rgba(0, 128, 128, 1)">104</span> <span style="color: rgba(0, 0, 0, 1)">    LDataSet.First;
</span><span style="color: rgba(0, 128, 128, 1)">105</span>
<span style="color: rgba(0, 128, 128, 1)">106</span>   Result := TList&lt;TEntity&gt;.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)">107</span>   <span style="color: rgba(0, 0, 255, 1)">while</span> <span style="color: rgba(0, 0, 255, 1)">not</span> LDataSet.Eof <span style="color: rgba(0, 0, 255, 1)">do</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">108</span>       LRow.SomeInt := LDataSet.FieldByName(TableInfo.IntCol).AsInteger; <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 也可以这种格式 LDataSet.Fields.AsBoolean;</span>
<span style="color: rgba(0, 128, 128, 1)">109</span>       LRow.SomeTxt :=<span style="color: rgba(0, 0, 0, 1)"> LDataSet.FieldByName(TableInfo.TxtCol).AsString;
</span><span style="color: rgba(0, 128, 128, 1)">110</span>
<span style="color: rgba(0, 128, 128, 1)">111</span> <span style="color: rgba(0, 0, 0, 1)">      Result.Add(LRow);
</span><span style="color: rgba(0, 128, 128, 1)">112</span>
<span style="color: rgba(0, 128, 128, 1)">113</span> <span style="color: rgba(0, 0, 0, 1)">      LDataSet.Next;
</span><span style="color: rgba(0, 128, 128, 1)">114</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">115</span>   <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">116</span>   <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(LDataSet);
</span><span style="color: rgba(0, 128, 128, 1)">117</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">118</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">119</span>
<span style="color: rgba(0, 128, 128, 1)">120</span> <span style="color: rgba(0, 0, 255, 1)">function</span> TDBAccesser.Update(Const ASql : String; <span style="color: rgba(0, 0, 255, 1)">const</span> AParams : TDictionary&lt;String, Variant&gt;<span style="color: rgba(0, 0, 0, 1)">) : Boolean;
</span><span style="color: rgba(0, 128, 128, 1)">121</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">122</span> <span style="color: rgba(0, 0, 0, 1)">LCmd : TADOCommand;
</span><span style="color: rgba(0, 128, 128, 1)">123</span> <span style="color: rgba(0, 0, 0, 1)">LKey : String;
</span><span style="color: rgba(0, 128, 128, 1)">124</span> <span style="color: rgba(0, 0, 0, 1)">LRowsAffected : Integer;
</span><span style="color: rgba(0, 128, 128, 1)">125</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">126</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> False;
</span><span style="color: rgba(0, 128, 128, 1)">127</span>   LCmd := <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">128</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">129</span>   LCmd := TADOCommand.<span style="color: rgba(0, 0, 255, 1)">Create</span>(<span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">130</span>   LCmd.Connection:=<span style="color: rgba(0, 0, 0, 1)"> Self.FConn;
</span><span style="color: rgba(0, 128, 128, 1)">131</span>   LCmd.CommandText :=<span style="color: rgba(0, 0, 0, 1)"> ASql;
</span><span style="color: rgba(0, 128, 128, 1)">132</span>
<span style="color: rgba(0, 128, 128, 1)">133</span> <span style="color: rgba(0, 0, 0, 1)">    LCmd.Parameters.ParseSQL(LCmd.CommandText, True);
</span><span style="color: rgba(0, 128, 128, 1)">134</span>
<span style="color: rgba(0, 128, 128, 1)">135</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (AParams &lt;&gt; <span style="color: rgba(0, 0, 255, 1)">nil</span>) <span style="color: rgba(0, 0, 255, 1)">then</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">136</span>       <span style="color: rgba(0, 0, 255, 1)">for</span> LKey <span style="color: rgba(0, 0, 255, 1)">in</span> AParams.Keys <span style="color: rgba(0, 0, 255, 1)">do</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">137</span>         LCmd.Parameters.ParamByName(LKey).Value :=<span style="color: rgba(0, 0, 0, 1)"> AParams.Items;
</span><span style="color: rgba(0, 128, 128, 1)">138</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">139</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">140</span>
<span style="color: rgba(0, 128, 128, 1)">141</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 也可以直接在 EmptyParam 的位置直接写 格式的内容,</span>
<span style="color: rgba(0, 128, 128, 1)">142</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 而不使用上面的 Parameters,两者不能同时使用,</span>
<span style="color: rgba(0, 128, 128, 1)">143</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 但具体什么情况我也忘了,相应代码也找不到了,要想知道真实情况,还得再动手去摸索</span>
<span style="color: rgba(0, 128, 128, 1)">144</span> <span style="color: rgba(0, 0, 0, 1)">    LCmd.Execute(LRowsAffected, EmptyParam);
</span><span style="color: rgba(0, 128, 128, 1)">145</span>
<span style="color: rgba(0, 128, 128, 1)">146</span>   <span style="color: rgba(0, 0, 255, 1)">if</span> (LRowsAffected &gt; <span style="color: rgba(128, 0, 128, 1)">0</span>) <span style="color: rgba(0, 0, 255, 1)">then</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">147</span>       Result :=<span style="color: rgba(0, 0, 0, 1)"> True;
</span><span style="color: rgba(0, 128, 128, 1)">148</span>   <span style="color: rgba(0, 0, 255, 1)">end</span>
<span style="color: rgba(0, 128, 128, 1)">149</span>   <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">150</span>       Result :=<span style="color: rgba(0, 0, 0, 1)"> False;
</span><span style="color: rgba(0, 128, 128, 1)">151</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">152</span>   <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">153</span>   <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(LCmd);
</span><span style="color: rgba(0, 128, 128, 1)">154</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">155</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">156</span>
<span style="color: rgba(0, 128, 128, 1)">157</span>
<span style="color: rgba(0, 128, 128, 1)">158</span> <span style="color: rgba(0, 0, 255, 1)">function</span> TDBAccesser.QueryAll() : TList&lt;TEntity&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">159</span> <span style="color: rgba(0, 0, 255, 1)">const</span>
<span style="color: rgba(0, 128, 128, 1)">160</span>   LSqlFormat : String = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">SELECT %s, %s FROM %s</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">161</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">162</span> <span style="color: rgba(0, 0, 0, 1)">LSql : String;
</span><span style="color: rgba(0, 128, 128, 1)">163</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">164</span>   LSql :=<span style="color: rgba(0, 0, 0, 1)"> Format(LSqlFormat, );
</span><span style="color: rgba(0, 128, 128, 1)">165</span>
<span style="color: rgba(0, 128, 128, 1)">166</span>   Result := Self.Query(LSql, <span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">167</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">168</span>
<span style="color: rgba(0, 128, 128, 1)">169</span> <span style="color: rgba(0, 0, 255, 1)">function</span> TDBAccesser.QueryByInt(<span style="color: rgba(0, 0, 255, 1)">const</span> AInt: Integer) : TList&lt;TEntity&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">170</span> <span style="color: rgba(0, 0, 255, 1)">const</span>
<span style="color: rgba(0, 128, 128, 1)">171</span>   LSqlFormat : String = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">SELECT %s, %s FROM %s WHERE %s = :$Int </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">172</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">173</span> <span style="color: rgba(0, 0, 0, 1)">LSql : String;
</span><span style="color: rgba(0, 128, 128, 1)">174</span>   LParams : TDictionary&lt;String, Variant&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">175</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">176</span>   LParams := TDictionary&lt;String, Variant&gt;.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)">177</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">178</span>   LSql :=<span style="color: rgba(0, 0, 0, 1)"> Format(LSqlFormat, [TableInfo.TxtCol, TableInfo.IntCol,
</span><span style="color: rgba(0, 128, 128, 1)">179</span> <span style="color: rgba(0, 0, 0, 1)">                              TableInfo.Name, TableInfo.IntCol]);
</span><span style="color: rgba(0, 128, 128, 1)">180</span>
<span style="color: rgba(0, 128, 128, 1)">181</span>   LParams.Add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">$Int</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, AInt);
</span><span style="color: rgba(0, 128, 128, 1)">182</span>
<span style="color: rgba(0, 128, 128, 1)">183</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> Self.Query(LSql, LParams);
</span><span style="color: rgba(0, 128, 128, 1)">184</span>   <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">185</span>   <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(LParams);
</span><span style="color: rgba(0, 128, 128, 1)">186</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">187</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">188</span>
<span style="color: rgba(0, 128, 128, 1)">189</span> <span style="color: rgba(0, 0, 255, 1)">function</span> TDBAccesser.QueryByTxt(<span style="color: rgba(0, 0, 255, 1)">const</span> ATxt: String) : TList&lt;TEntity&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">190</span> <span style="color: rgba(0, 0, 255, 1)">const</span>
<span style="color: rgba(0, 128, 128, 1)">191</span>   LSqlFormat : String = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">SELECT %s, %s FROM %s WHERE %s = :$Txt </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">192</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">193</span> <span style="color: rgba(0, 0, 0, 1)">LSql : String;
</span><span style="color: rgba(0, 128, 128, 1)">194</span>   LParams : TDictionary&lt;String, Variant&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">195</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">196</span>   LParams := TDictionary&lt;String, Variant&gt;.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)">197</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">198</span>   LSql :=<span style="color: rgba(0, 0, 0, 1)"> Format(LSqlFormat, [TableInfo.TxtCol, TableInfo.IntCol,
</span><span style="color: rgba(0, 128, 128, 1)">199</span> <span style="color: rgba(0, 0, 0, 1)">                              TableInfo.Name, TableInfo.TxtCol]);
</span><span style="color: rgba(0, 128, 128, 1)">200</span>
<span style="color: rgba(0, 128, 128, 1)">201</span>   LParams.Add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">$Txt</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, ATxt);
</span><span style="color: rgba(0, 128, 128, 1)">202</span>
<span style="color: rgba(0, 128, 128, 1)">203</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> Self.Query(LSql, LParams);
</span><span style="color: rgba(0, 128, 128, 1)">204</span>   <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">205</span>   <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(LParams);
</span><span style="color: rgba(0, 128, 128, 1)">206</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">207</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">208</span>
<span style="color: rgba(0, 128, 128, 1)">209</span> <span style="color: rgba(0, 0, 255, 1)">function</span> TDBAccesser.InsertOne(<span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> AEntity: TEntity) : Boolean;
</span><span style="color: rgba(0, 128, 128, 1)">210</span> <span style="color: rgba(0, 0, 255, 1)">const</span>
<span style="color: rgba(0, 128, 128, 1)">211</span>   LSqlFormat : String = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">INSERT INTO %s (%s, %s) </span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">212</span>                     + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">VALUES (:$Txt, :$Int) </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">213</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">214</span> <span style="color: rgba(0, 0, 0, 1)">LSql : String;
</span><span style="color: rgba(0, 128, 128, 1)">215</span>   LParams : TDictionary&lt;String, Variant&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">216</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">217</span>   LParams := TDictionary&lt;String, Variant&gt;.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)">218</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">219</span>   LSql :=<span style="color: rgba(0, 0, 0, 1)"> Format(LSqlFormat, );
</span><span style="color: rgba(0, 128, 128, 1)">220</span>
<span style="color: rgba(0, 128, 128, 1)">221</span>   LParams.Add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">$Txt</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, AEntity.SomeTxt);
</span><span style="color: rgba(0, 128, 128, 1)">222</span>   LParams.Add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">$Int</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, AEntity.SomeInt);
</span><span style="color: rgba(0, 128, 128, 1)">223</span>
<span style="color: rgba(0, 128, 128, 1)">224</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> Self.Update(LSql, LParams);
</span><span style="color: rgba(0, 128, 128, 1)">225</span>   <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">226</span>   <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(LParams);
</span><span style="color: rgba(0, 128, 128, 1)">227</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">228</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">229</span>
<span style="color: rgba(0, 128, 128, 1)">230</span> <span style="color: rgba(0, 0, 255, 1)">function</span> TDBAccesser.Delete(<span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> AEntity: TEntity) : Boolean;
</span><span style="color: rgba(0, 128, 128, 1)">231</span> <span style="color: rgba(0, 0, 255, 1)">const</span>
<span style="color: rgba(0, 128, 128, 1)">232</span>   LSqlFormat : String = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">DELETE FROM %s </span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">233</span>                     + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">WHERE %s = :$Txt AND %s = :$Int </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">234</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">235</span> <span style="color: rgba(0, 0, 0, 1)">LSql : String;
</span><span style="color: rgba(0, 128, 128, 1)">236</span>   LParams : TDictionary&lt;String, Variant&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">237</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">238</span>   LParams := TDictionary&lt;String, Variant&gt;.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)">239</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">240</span>   LSql :=<span style="color: rgba(0, 0, 0, 1)"> Format(LSqlFormat, );
</span><span style="color: rgba(0, 128, 128, 1)">241</span>
<span style="color: rgba(0, 128, 128, 1)">242</span>   LParams.Add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">$Txt</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, AEntity.SomeTxt);
</span><span style="color: rgba(0, 128, 128, 1)">243</span>   LParams.Add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">$Int</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, AEntity.SomeInt);
</span><span style="color: rgba(0, 128, 128, 1)">244</span>
<span style="color: rgba(0, 128, 128, 1)">245</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> Self.Update(LSql, LParams);
</span><span style="color: rgba(0, 128, 128, 1)">246</span>   <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">247</span>   <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(LParams);
</span><span style="color: rgba(0, 128, 128, 1)">248</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">249</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">250</span>
<span style="color: rgba(0, 128, 128, 1)">251</span> <span style="color: rgba(0, 0, 255, 1)">function</span> TDBAccesser.Update(<span style="color: rgba(0, 0, 255, 1)">const</span> AOldValue: TEntity; <span style="color: rgba(0, 0, 255, 1)">const</span><span style="color: rgba(0, 0, 0, 1)"> ANewValue: TEntity) : Boolean;
</span><span style="color: rgba(0, 128, 128, 1)">252</span> <span style="color: rgba(0, 0, 255, 1)">const</span>
<span style="color: rgba(0, 128, 128, 1)">253</span>   LSqlFormat : String = <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">UPDATE %s </span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">254</span>                     + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">SET %s = :$TxtVal, %s = :$IntVal </span><span style="color: rgba(128, 0, 0, 1)">'</span>
<span style="color: rgba(0, 128, 128, 1)">255</span>                     + <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">WHERE %s = :$OldTxtVal AND %s = :$OldIntVal </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">256</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)">257</span> <span style="color: rgba(0, 0, 0, 1)">LSql : String;
</span><span style="color: rgba(0, 128, 128, 1)">258</span>   LParams : TDictionary&lt;String, Variant&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">259</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">260</span>   LParams := TDictionary&lt;String, Variant&gt;.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)">261</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)">262</span>   LSql :=<span style="color: rgba(0, 0, 0, 1)"> Format(LSqlFormat, [TableInfo.Name,
</span><span style="color: rgba(0, 128, 128, 1)">263</span> <span style="color: rgba(0, 0, 0, 1)">                              TableInfo.TxtCol, TableInfo.IntCol,
</span><span style="color: rgba(0, 128, 128, 1)">264</span> <span style="color: rgba(0, 0, 0, 1)">                              TableInfo.TxtCol, TableInfo.IntCol]);
</span><span style="color: rgba(0, 128, 128, 1)">265</span>
<span style="color: rgba(0, 128, 128, 1)">266</span>   LParams.Add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">$TxtVal</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, ANewValue.SomeTxt);
</span><span style="color: rgba(0, 128, 128, 1)">267</span>   LParams.Add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">$IntVal</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, ANewValue.SomeInt);
</span><span style="color: rgba(0, 128, 128, 1)">268</span>
<span style="color: rgba(0, 128, 128, 1)">269</span>   LParams.Add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">$OldTxtVal</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, AOldValue.SomeTxt);
</span><span style="color: rgba(0, 128, 128, 1)">270</span>   LParams.Add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">$OldIntVal</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, AOldValue.SomeInt);
</span><span style="color: rgba(0, 128, 128, 1)">271</span>
<span style="color: rgba(0, 128, 128, 1)">272</span>   Result :=<span style="color: rgba(0, 0, 0, 1)"> Self.Update(LSql, LParams);
</span><span style="color: rgba(0, 128, 128, 1)">273</span>   <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">274</span>   <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(LParams);
</span><span style="color: rgba(0, 128, 128, 1)">275</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">276</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">277</span>
<span style="color: rgba(0, 128, 128, 1)">278</span>
<span style="color: rgba(0, 128, 128, 1)">279</span> <span style="color: rgba(0, 0, 255, 1)">initialization</span>
<span style="color: rgba(0, 128, 128, 1)">280</span>   TableInfo.DataSource := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">.</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">281</span>   TableInfo.DbName   := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">simpleTestByX</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">282</span>   TableInfo.Username   := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">sa</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">283</span>   TableInfo.Password   := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">284</span>   TableInfo.Name       := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">tab_simple_test</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">285</span>   TableInfo.IntCol   := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">some_int</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">286</span>   TableInfo.TxtCol   := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">some_txt</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">287</span>
<span style="color: rgba(0, 128, 128, 1)">288</span>   CoInitialize(<span style="color: rgba(0, 0, 255, 1)">nil</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">289</span>
<span style="color: rgba(0, 128, 128, 1)">290</span> <span style="color: rgba(0, 0, 255, 1)">finalization</span>
<span style="color: rgba(0, 128, 128, 1)">291</span> <span style="color: rgba(0, 0, 0, 1)">CoUninitialize();
</span><span style="color: rgba(0, 128, 128, 1)">292</span>
<span style="color: rgba(0, 128, 128, 1)">293</span>
<span style="color: rgba(0, 128, 128, 1)">294</span> <span style="color: rgba(0, 0, 255, 1)">end</span>.</pre>
</div>
<p>&nbsp;</p>
<p>控制台程序入口代码,对上面的单元进行简单的调用:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">program</span><span style="color: rgba(0, 0, 0, 1)"> ProjectParameterizedSql;
</span><span style="color: rgba(0, 128, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">$APPTYPE CONSOLE</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">4</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 128, 0, 1)">{</span><span style="color: rgba(0, 128, 0, 1)">$R *.res</span><span style="color: rgba(0, 128, 0, 1)">}</span>
<span style="color: rgba(0, 128, 128, 1)">6</span>
<span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 0, 255, 1)">uses</span>
<span style="color: rgba(0, 128, 128, 1)">8</span> <span style="color: rgba(0, 0, 0, 1)">System.SysUtils,
</span><span style="color: rgba(0, 128, 128, 1)">9</span> <span style="color: rgba(0, 0, 0, 1)">System.Generics.Collections,
</span><span style="color: rgba(0, 128, 128, 1)"> 10</span>   uDBAccesser <span style="color: rgba(0, 0, 255, 1)">in</span> <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">uDBAccesser.pas</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 11</span>
<span style="color: rgba(0, 128, 128, 1)"> 12</span>
<span style="color: rgba(0, 128, 128, 1)"> 13</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> FormatEntity(AEntity : TEntity) : String;
</span><span style="color: rgba(0, 128, 128, 1)"> 14</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 15</span>   Result := Format(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"> SomeInt = %d, SomeTxt = %s </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, );
</span><span style="color: rgba(0, 128, 128, 1)"> 16</span> <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 17</span>
<span style="color: rgba(0, 128, 128, 1)"> 18</span>
<span style="color: rgba(0, 128, 128, 1)"> 19</span> <span style="color: rgba(0, 0, 255, 1)">var</span>
<span style="color: rgba(0, 128, 128, 1)"> 20</span> <span style="color: rgba(0, 0, 0, 1)">DBAccesser      : TDBAccesser;
</span><span style="color: rgba(0, 128, 128, 1)"> 21</span> <span style="color: rgba(0, 0, 0, 1)">EntityQuery   : TEntity;
</span><span style="color: rgba(0, 128, 128, 1)"> 22</span> <span style="color: rgba(0, 0, 0, 1)">EntityInsert    : TEntity;
</span><span style="color: rgba(0, 128, 128, 1)"> 23</span> <span style="color: rgba(0, 0, 0, 1)">EntityDelete    : TEntity;
</span><span style="color: rgba(0, 128, 128, 1)"> 24</span> <span style="color: rgba(0, 0, 0, 1)">EntityUpdateNew : TEntity;
</span><span style="color: rgba(0, 128, 128, 1)"> 25</span> <span style="color: rgba(0, 0, 0, 1)">EntityUpdateOld : TEntity;
</span><span style="color: rgba(0, 128, 128, 1)"> 26</span> <span style="color: rgba(0, 0, 0, 1)">EntityCommon    : TEntity;
</span><span style="color: rgba(0, 128, 128, 1)"> 27</span>   QueryResult   : TList&lt;TEntity&gt;<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 28</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 29</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)"> 30</span>   DBAccesser := TDBAccesser.<span style="color: rgba(0, 0, 255, 1)">Create</span><span style="color: rgba(0, 0, 0, 1)">();
</span><span style="color: rgba(0, 128, 128, 1)"> 31</span>   <span style="color: rgba(0, 0, 255, 1)">try</span>
<span style="color: rgba(0, 128, 128, 1)"> 32</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1) insert one: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 33</span>
<span style="color: rgba(0, 128, 128, 1)"> 34</span>       EntityInsert.SomeInt := <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 35</span>       EntityInsert.SomeTxt := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">Hello</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 36</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">entity = </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, FormatEntity(EntityInsert));
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span>
<span style="color: rgba(0, 128, 128, 1)"> 38</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">insert success? </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, DBAccesser.InsertOne(EntityInsert));
</span><span style="color: rgba(0, 128, 128, 1)"> 39</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 40</span>
<span style="color: rgba(0, 128, 128, 1)"> 41</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">2) query all: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 42</span>
<span style="color: rgba(0, 128, 128, 1)"> 43</span>       QueryResult :=<span style="color: rgba(0, 0, 0, 1)"> DBAccesser.QueryAll();
</span><span style="color: rgba(0, 128, 128, 1)"> 44</span>
<span style="color: rgba(0, 128, 128, 1)"> 45</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">total = </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, QueryResult.Count);
</span><span style="color: rgba(0, 128, 128, 1)"> 46</span>       <span style="color: rgba(0, 0, 255, 1)">for</span> EntityCommon <span style="color: rgba(0, 0, 255, 1)">in</span> QueryResult <span style="color: rgba(0, 0, 255, 1)">do</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 47</span>         WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, FormatEntity(EntityCommon));
</span><span style="color: rgba(0, 128, 128, 1)"> 48</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 49</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 50</span>
<span style="color: rgba(0, 128, 128, 1)"> 51</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">3) update: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 52</span>
<span style="color: rgba(0, 128, 128, 1)"> 53</span>       EntityUpdateOld :=<span style="color: rgba(0, 0, 0, 1)"> EntityInsert;
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span>       EntityUpdateNew.SomeInt := <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 55</span>       EntityUpdateNew.SomeTxt := <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">World</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 56</span>
<span style="color: rgba(0, 128, 128, 1)"> 57</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">old : </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, FormatEntity(EntityUpdateOld));
</span><span style="color: rgba(0, 128, 128, 1)"> 58</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">new : </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, FormatEntity(EntityUpdateNew));
</span><span style="color: rgba(0, 128, 128, 1)"> 59</span>
<span style="color: rgba(0, 128, 128, 1)"> 60</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">update success? </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, DBAccesser.Update(EntityUpdateOld, EntityUpdateNew));
</span><span style="color: rgba(0, 128, 128, 1)"> 61</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 62</span>
<span style="color: rgba(0, 128, 128, 1)"> 63</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">4) query by int:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span>
<span style="color: rgba(0, 128, 128, 1)"> 65</span>       EntityQuery :=<span style="color: rgba(0, 0, 0, 1)"> EntityUpdateNew;
</span><span style="color: rgba(0, 128, 128, 1)"> 66</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">int = </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, EntityQuery.SomeInt);
</span><span style="color: rgba(0, 128, 128, 1)"> 67</span>
<span style="color: rgba(0, 128, 128, 1)"> 68</span>       QueryResult :=<span style="color: rgba(0, 0, 0, 1)"> DBAccesser.QueryByInt(EntityQuery.SomeInt);
</span><span style="color: rgba(0, 128, 128, 1)"> 69</span>
<span style="color: rgba(0, 128, 128, 1)"> 70</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">total : </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, QueryResult.Count);
</span><span style="color: rgba(0, 128, 128, 1)"> 71</span>       <span style="color: rgba(0, 0, 255, 1)">for</span> EntityCommon <span style="color: rgba(0, 0, 255, 1)">in</span> QueryResult <span style="color: rgba(0, 0, 255, 1)">do</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 72</span>         WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, FormatEntity(EntityCommon));
</span><span style="color: rgba(0, 128, 128, 1)"> 73</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 74</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 75</span>
<span style="color: rgba(0, 128, 128, 1)"> 76</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">5) query by txt:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 77</span>
<span style="color: rgba(0, 128, 128, 1)"> 78</span>       EntityQuery :=<span style="color: rgba(0, 0, 0, 1)"> EntityUpdateNew;
</span><span style="color: rgba(0, 128, 128, 1)"> 79</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">txt = </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, EntityQuery.SomeTxt);
</span><span style="color: rgba(0, 128, 128, 1)"> 80</span>
<span style="color: rgba(0, 128, 128, 1)"> 81</span>       QueryResult :=<span style="color: rgba(0, 0, 0, 1)"> DBAccesser.QueryByTxt(EntityQuery.SomeTxt);
</span><span style="color: rgba(0, 128, 128, 1)"> 82</span>
<span style="color: rgba(0, 128, 128, 1)"> 83</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">total : </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, QueryResult.Count);
</span><span style="color: rgba(0, 128, 128, 1)"> 84</span>       <span style="color: rgba(0, 0, 255, 1)">for</span> EntityCommon <span style="color: rgba(0, 0, 255, 1)">in</span> QueryResult <span style="color: rgba(0, 0, 255, 1)">do</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)"> 85</span>         WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, FormatEntity(EntityCommon));
</span><span style="color: rgba(0, 128, 128, 1)"> 86</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 87</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 88</span>
<span style="color: rgba(0, 128, 128, 1)"> 89</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">6) delete:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 90</span>
<span style="color: rgba(0, 128, 128, 1)"> 91</span>       EntityDelete :=<span style="color: rgba(0, 0, 0, 1)"> EntityUpdateNew;
</span><span style="color: rgba(0, 128, 128, 1)"> 92</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">entity = </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, FormatEntity(EntityDelete));
</span><span style="color: rgba(0, 128, 128, 1)"> 93</span>
<span style="color: rgba(0, 128, 128, 1)"> 94</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">delete success? </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, DBAccesser.Delete(EntityDelete));
</span><span style="color: rgba(0, 128, 128, 1)"> 95</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 96</span>
<span style="color: rgba(0, 128, 128, 1)"> 97</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">7) query all: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 98</span>
<span style="color: rgba(0, 128, 128, 1)"> 99</span>       QueryResult :=<span style="color: rgba(0, 0, 0, 1)"> DBAccesser.QueryAll();
</span><span style="color: rgba(0, 128, 128, 1)">100</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">total : </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, QueryResult.Count);
</span><span style="color: rgba(0, 128, 128, 1)">101</span>       <span style="color: rgba(0, 0, 255, 1)">for</span> EntityCommon <span style="color: rgba(0, 0, 255, 1)">in</span> QueryResult <span style="color: rgba(0, 0, 255, 1)">do</span> <span style="color: rgba(0, 0, 255, 1)">begin</span>
<span style="color: rgba(0, 128, 128, 1)">102</span>         WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, FormatEntity(EntityCommon));
</span><span style="color: rgba(0, 128, 128, 1)">103</span>       <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">104</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">----------------</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">105</span>
<span style="color: rgba(0, 128, 128, 1)">106</span>       WriteLn(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">--- THE END ---</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">107</span>   <span style="color: rgba(0, 0, 255, 1)">finally</span>
<span style="color: rgba(0, 128, 128, 1)">108</span>       <span style="color: rgba(0, 0, 255, 1)">FreeAndNil</span><span style="color: rgba(0, 0, 0, 1)">(DBAccesser);
</span><span style="color: rgba(0, 128, 128, 1)">109</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">110</span>   <span style="color: rgba(0, 0, 255, 1)">except</span>
<span style="color: rgba(0, 128, 128, 1)">111</span>   on E: Exception <span style="color: rgba(0, 0, 255, 1)">do</span>
<span style="color: rgba(0, 128, 128, 1)">112</span>       Writeln(E.ClassName, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, E.Message);
</span><span style="color: rgba(0, 128, 128, 1)">113</span>   <span style="color: rgba(0, 0, 255, 1)">end</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">114</span> <span style="color: rgba(0, 0, 0, 1)">ReadLn;
</span><span style="color: rgba(0, 128, 128, 1)">115</span> <span style="color: rgba(0, 0, 255, 1)">end</span>.</pre>
</div>
<p>&nbsp;</p>
<p>--------- THE END ---------</p><br><br>
来源:https://www.cnblogs.com/shadow-abyss/p/11126900.html
頁: [1]
查看完整版本: delphi 参数化sql