📄 036.htm
字号:
<p> </p><p>procedure TQueryForm.ListBox1Click(Sender: TObject);</p><p>var</p><p>strValue: string; { Holds the alias selected by the user }</p><p>bIsLocal: Boolean; { Indicates whether or not an alias is local }</p><p>slParams: TStringList; { Holds the parameters of the selected alias }</p><p>iCounter: Integer; { An integer counter variable for loops}</p><p>begin</p><p> </p><p>{ Determine the alias name selected by the user }</p><p> </p><p>with ListBox1 do</p><p>strValue := Items.Strings[ItemIndex];</p><p> </p><p>{ Get the names of the tables in the alias and put them in the</p><p>appropriate list box, making sure the user's choices are reflected</p><p>in the list. } </p><p>ListBox2.Items.Clear;</p><p>Session.GetTableNames(strValue, { alias to enumerate }</p><p>'', { pattern to match } </p><p>15.3.4 数据集中的数据维护 </p><p>数据集中的数据维护主要包括数据记录的修改,插入和删除。Delphi为数据集部件提供了相应的方法用于其中的数据维护。这些方法如表15.所示。 </p><p>表15.3 Delphi用于数据维护的方法</p><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p><p>方 法 名 功 能</p><p>──────────────────────────────</p><p>Edit 将数据集置为编辑状态</p><p>──────────────────────────────</p><p>Append 投寄所有被修改的记录,将记录指针移到表中的最后</p><p>一条记录,且将数据集置为插入状态</p><p>──────────────────────────────</p><p>Insert 投寄所有被修改的记录将数据集置为插入状态</p><p>──────────────────────────────</p><p>Post 将插入的新记录和修改的记录写回磁盘上的数据库表,</p><p>即投寄,当投寄成功时数据集回到浏览状态,若投寄</p><p>不成功数据集仍然保持原有状态</p><p>──────────────────────────────</p><p>Cancel 取消当前的操作且将数据集置为浏览状态</p><p>──────────────────────────────</p><p>Delete 删除当前记录指针所在的记录且将数据集置为浏览状态</p><p>──────────────────────────────</p><p>AppendRecord 在表的最后插入一条新记录,记录的各个字段值作为</p><p>AppendRecord的参数传递给新记录</p><p>──────────────────────────────</p><p>InsertRecord 在当前指针所在记录的后面插入一条新记录, 记录的</p><p>各个字段值作为InsertRecord的参数传递给新记录。</p><p>──────────────────────────────</p><p>SetRecords 修改当前记录,字段名和相应的字段值作为SetRecords</p><p>的参数</p><p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p><p>Edt方法:如果应用程序想对数据集中的数据记录进行修改,我们必须要将数据集设置成编辑状态。调用数据集部件的Edit方法便可以将数据集置成编辑状态,当数据集已经处在编辑状态时,调用Edit方法不会产生作用。当数据集处于编辑状态时,移动记录指针或调用post方法都可以将当前记录的修改写回到磁盘数据库表中。在程序中,Edit方法和post方法常常配合在一起使用,用于修改表中的记录。如: </p><p>Table1.Edit;</p><p>Tabel1.FieldByName('CustNo').Asstring := '1234';</p><p>Table1.st; </p><p>在上述这一段程序代码中,第一行程序是将Table1置成编辑状态,第二行程序是对当前记录指针所在的记录的CustNo字段的值修改成'1234',第二行程序是调用post方法将对当前记录的修改写回数据库表。</p><p>Append方法和Insert方法:这两个方法都是将数据集部件置成插入状态,以在表中插入新记录,Insert方法是在当前指针位置的记录后面插入一打新记录,Append方法是在表的尾部插入一打新记录,不过这要注意,无论用户是调用Insert方法还是Append方法插入新记录,增加记录到一个具有索引的表中时,都是按照索引顺序写入其位置,也就是说对于索引表格Insert方法和Append方法的作用是一样的,Append仅适用于没有索引的表。Insert方法和Append方法实际上是将数据集置成插入状态,并且插入一条空白记录,要真正插入一条新记录,我们必须在调用Insert或Append方法之后,还要给新记录的各个字段赋值,最后调用post方法,将插入的记录写回数据库表。调用这两种方法插入新记录的一般步骤如下: </p><p>With tabe1 DO</p><p>Begin</p><p>Insert; {调用Insert方法,插入一条空记录}</p><p><为记录的各字段赋值></p><p>Post;</p><p>End; </p><p>Post方法:数据集中的记录被修改或插入新记录时调用post方法将数据集的修改写回到数据库表。根据数据集所处的状态不同,post方法所产生的作用和效果是不一样的:</p><p>● 当数据集处于编辑状态时,调用post方法,将当前记录的修改写回数据库表</p><p>● 当数据集处于插入状态时,调用post方法,将插入的新记录写回数据库表</p><p>● 当数据集处于SetKey状态时,调用post方法,将数据集置成浏览状态(Browse状态)</p><p> </p><p>post方法的调用既可以显式地调用,也可以隐含地调用,当数据集处于编辑状态或插入状态时,当移动记录指针时,Delphi会隐含地调用post方法,将将当前记录的修改写回数据库表,在程序调用Insert方法或Append方法时,也会隐含地调用Post方法,将先前的数据集的修改写回数据库表。</p><p>Delete方法:Delete方法用于删除表中的记录,调用Delete方法时,将会删除表中当前的记录,并且自动地将记录指针移到被删记录的下一条记录,同时将数据集置成Browse状态。</p><p>Cancel方法:Cancel方法用于取消当前的操作,当程序还没有调用Post方法,将对记录的修改写回数据库表时,调用Cancel方法,可以将记录恢复到没有修改之前的状态。并且在调用Cancel方法时,它总是将数据集置成Browse状态。</p><p>AppendRecord方法和InsertRecord方法:这两个方法分别与Append方法和Insert方法相似。它们都是用于在表中插入一条新记录,但AppendRecord方法和InsertRecord方法比Append和Insert方法更简单更方便一些,它们直接在表中插入一条新记录,新记录的各个字段值作为AppendRecord或InsertRecord方法的参数传递给新记录并且不需显式地调用post方法,将插入的新记录写回数据库表。在给插入的新记录赋字段值时,将由多个字段值组成的数组作为AppendRecord或InsertRecord的参数,在字段值数组中可以为每一个字段提供一个值,或从左边一列开始依次为任意多个字段赋值。也就是说,用户可以从数据库表的最左一列起,把许多列的值同时传递给InsertRecord,直到所有的字段被赋值,用户也可以省略字段序列后面的的一些字段值,InsertRecord会用空值来填充这些字段:用户也可以对那些明确希望用空填充的字段传递保留字NIl。</p><p>例如:如果表Country有Name,Captial,Continent,Area和Population字段,并且数据集部件Table1与它相连,下面的代码便可以在Country表中当前记录的后面插入一条新记录。</p><p> </p><p>Table1.InsertRecord (["中国","北京","五洲"]);</p><p> </p><p>在上述代码中没有为Area和population字段赋值,InsertRecord会用空值来填这两个字段。</p><p>SetRecords方法:调用该方法可以修改表中当前记录的多个字段的值,调用该方法之前必须将数据集部件置成编辑状态,调用该方法之后,还要调用post方法,才能真正将当前记录的修改写回数据库表。调用SetRecord方法时,被修改的字段值必须要与表中实际存在的字段名对应,并且数据类型要相匹配。例如,下面的代码是修改上面刚刚插入的那条记录。</p><p> </p><p>Table1.Edit;</p><p>Tabel1.SetRecord(, , ,9600000,1200000000);</p><p>Tabel1.post;</p><p> </p><p>这一段代码是修改上面刚刚插入的那条记录的Area 和Population字段的值,而对Name,Continent和Captial字段没有修改。</p><p>在数据集部件中,还有一个重要方法Abort方法,该方法是用于取消其他方法的调用的,如在插入记录、修改记录和删除记录之前,往往需要用户确认是否真的要执行这种操作,此时调用Abort方法便可取消各种方法的调用,下面的代码是在用户删除一条记之前,让用户确认是否真的要执行删除操作。 </p><p>Tabel1.BeforeDelete(DataSet:TDataSet);</p><p>If MessageDlg('真的要删除记录吗?',</p><p>mtConfirmation,mbyesNoCanel,0 <> mryes then</p><p>Abort; {取消删除操作} </p><p>关于书签(BookMark)操作;</p><p>书签操作主要用于在表中快速地定位记录指针,在应用程序中常常要保存记录指针所在的位置,在进行其他处理之后,希望能快速地返回到先前指针所在的位置,此时,使用书签将显得特别有用。有关书签操作,Delphi提供了三个方法,它们是:</p><p>● GetBookMark</p><p>● GotoBookMark</p><p>● FreeBokMark</p><p> </p><p>这三个方法一般都是在一起使用,GetBookMark方法返回一个TBookMark类型的变量,该变量包含着指向当前记录的指针,GotoMark方法用于快速地将记录指针定位到具有书签的记录处。FreeBookmark方法是与GetBookMark方法相反的操作,它释放书签标志。下面的程序代码阐述了书签操作的一般方法:</p><p> </p><p>BookMark : TBookMark;</p><p><Do something></p><p>BookMark := Table1.GetBookMark; {对当前记录作书签标志}</p><p>Table1.DisalbeControls; {切断Table1与数据察觉部件的联系}</p><p>Table.First</p><p>While Not EOF Do {对表中全部记录进行其他处理}</p><p>begin</p><p><Do something></p><p>Tabel1.Next;</p><p>end;</p><p>Tabel1.GotoBookMark(BookMark) </p><p>Table1.enableControls; {重新定位记录指针回到原来的位置}</p><p>Tabel1.FreeBookMark(BookMark); {删除书签BookMark标志} </p><p>15.3.5 数据集部件与数据浏览部件的连接 </p><p> 数据集部件TTabel和TQuery具有三个方法,DisableControls方法、EnableControls方法、Refresh方法用于控制数据集部件和与其相连的数据浏览部件之间的连接,以及控制数据浏览部件的显示。在用户修改和更新以及遍历数据库表中的记录时,调用DisableControls方法具有重要意义,调用DisbaleControls方法以切断TTable或TQuery部件与数据浏览部件的连接,使数据浏览部件暂时失效,否则,在对TTable或TQuery部件的每次修改之后,窗体中所有与它们相连的数据浏览部件都要更新其显示内容,这亲显然会减慢处理速度。当遍历表中的记录时记录指针每移动一下,窗体中的数据浏览部件也随之更新一下其中的显示内容,在屏幕上产生闪烁。</p><p>EnableControls方法的作用与DisbaleControls方法的作用是相反的,调用EnableControls方法,使TTable或TQuery部件恢复与数据浏览部件的连接,使暂时失效的数据浏览部件恢复到正常显示表中记录信息的状态。</p><p>Refresh方法用于刷新数据浏览部件中的显示。在调用Refresh方法时,必须要确保TTable或TQuery部件是打开的。当数据集中的记录被修改之后,调用Refresh方法,数据浏览部件中显示的信息也随之改变。</font></p><p> </p><hr width="94%"></TD><TD CLASS="tt3" VALIGN="bottom" width="8%" ><strong><A HREF="037.htm"><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR><A HREF="035.htm"><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR><A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR></strong></TD></TR></table></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -