?? 036.htm
字號(hào):
<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 數(shù)據(jù)集中的數(shù)據(jù)維護(hù) </p>
<p>數(shù)據(jù)集中的數(shù)據(jù)維護(hù)主要包括數(shù)據(jù)記錄的修改,插入和刪除。Delphi為數(shù)據(jù)集部件提供了相應(yīng)的方法用于其中的數(shù)據(jù)維護(hù)。這些方法如表15.所示。 </p>
<p>表15.3 Delphi用于數(shù)據(jù)維護(hù)的方法</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</p>
<p>方 法 名 功 能</p>
<p>──────────────────────────────</p>
<p>Edit 將數(shù)據(jù)集置為編輯狀態(tài)</p>
<p>──────────────────────────────</p>
<p>Append 投寄所有被修改的記錄,將記錄指針移到表中的最后</p>
<p>一條記錄,且將數(shù)據(jù)集置為插入狀態(tài)</p>
<p>──────────────────────────────</p>
<p>Insert 投寄所有被修改的記錄將數(shù)據(jù)集置為插入狀態(tài)</p>
<p>──────────────────────────────</p>
<p>Post 將插入的新記錄和修改的記錄寫回磁盤上的數(shù)據(jù)庫(kù)表,</p>
<p>即投寄,當(dāng)投寄成功時(shí)數(shù)據(jù)集回到瀏覽狀態(tài),若投寄</p>
<p>不成功數(shù)據(jù)集仍然保持原有狀態(tài)</p>
<p>──────────────────────────────</p>
<p>Cancel 取消當(dāng)前的操作且將數(shù)據(jù)集置為瀏覽狀態(tài)</p>
<p>──────────────────────────────</p>
<p>Delete 刪除當(dāng)前記錄指針?biāo)诘挠涗浨覍?shù)據(jù)集置為瀏覽狀態(tài)</p>
<p>──────────────────────────────</p>
<p>AppendRecord 在表的最后插入一條新記錄,記錄的各個(gè)字段值作為</p>
<p>AppendRecord的參數(shù)傳遞給新記錄</p>
<p>──────────────────────────────</p>
<p>InsertRecord 在當(dāng)前指針?biāo)谟涗浀暮竺娌迦胍粭l新記錄, 記錄的</p>
<p>各個(gè)字段值作為InsertRecord的參數(shù)傳遞給新記錄。</p>
<p>──────────────────────────────</p>
<p>SetRecords 修改當(dāng)前記錄,字段名和相應(yīng)的字段值作為SetRecords</p>
<p>的參數(shù)</p>
<p>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ </p>
<p>Edt方法:如果應(yīng)用程序想對(duì)數(shù)據(jù)集中的數(shù)據(jù)記錄進(jìn)行修改,我們必須要將數(shù)據(jù)集設(shè)置成編輯狀態(tài)。調(diào)用數(shù)據(jù)集部件的Edit方法便可以將數(shù)據(jù)集置成編輯狀態(tài),當(dāng)數(shù)據(jù)集已經(jīng)處在編輯狀態(tài)時(shí),調(diào)用Edit方法不會(huì)產(chǎn)生作用。當(dāng)數(shù)據(jù)集處于編輯狀態(tài)時(shí),移動(dòng)記錄指針或調(diào)用post方法都可以將當(dāng)前記錄的修改寫回到磁盤數(shù)據(jù)庫(kù)表中。在程序中,
Edit方法和post方法常常配合在一起使用,用于修改表中的記錄。如: </p>
<p>Table1.Edit;</p>
<p>Tabel1.FieldByName('CustNo').Asstring := '1234';</p>
<p>Table1.st; </p>
<p>在上述這一段程序代碼中,第一行程序是將Table1置成編輯狀態(tài),第二行程序是對(duì)當(dāng)前記錄指針?biāo)诘挠涗浀腃ustNo字段的值修改成'1234',第二行程序是調(diào)用post方法將對(duì)當(dāng)前記錄的修改寫回?cái)?shù)據(jù)庫(kù)表。</p>
<p>Append方法和Insert
方法:這兩個(gè)方法都是將數(shù)據(jù)集部件置成插入狀態(tài),以在表中插入新記錄,Insert方法是在當(dāng)前指針位置的記錄后面插入一打新記錄,Append方法是在表的尾部插入一打新記錄,不過(guò)這要注意,無(wú)論用戶是調(diào)用Insert方法還是Append方法插入新記錄,增加記錄到一個(gè)具有索引的表中時(shí),都是按照索引順序?qū)懭肫湮恢茫簿褪钦f(shuō)對(duì)于索引表格Insert方法和Append方法的作用是一樣的,Append僅適用于沒(méi)有索引的表。Insert方法和Append方法實(shí)際上是將數(shù)據(jù)集置成插入狀態(tài),并且插入一條空白記錄,要真正插入一條新記錄,我們必須在調(diào)用Insert或Append方法之后,還要給新記錄的各個(gè)字段賦值,最后調(diào)用post方法,將插入的記錄寫回?cái)?shù)據(jù)庫(kù)表。調(diào)用這兩種方法插入新記錄的一般步驟如下: </p>
<p>With tabe1 DO</p>
<p>Begin</p>
<p>Insert; {調(diào)用Insert方法,插入一條空記錄}</p>
<p><為記錄的各字段賦值></p>
<p>Post;</p>
<p>End; </p>
<p>Post方法:數(shù)據(jù)集中的記錄被修改或插入新記錄時(shí)調(diào)用post方法將數(shù)據(jù)集的修改寫回到數(shù)據(jù)庫(kù)表。根據(jù)數(shù)據(jù)集所處的狀態(tài)不同,post方法所產(chǎn)生的作用和效果是不一樣的:</p>
<p>● 當(dāng)數(shù)據(jù)集處于編輯狀態(tài)時(shí),調(diào)用post方法,將當(dāng)前記錄的修改寫回?cái)?shù)據(jù)庫(kù)表</p>
<p>● 當(dāng)數(shù)據(jù)集處于插入狀態(tài)時(shí),調(diào)用post方法,將插入的新記錄寫回?cái)?shù)據(jù)庫(kù)表</p>
<p>● 當(dāng)數(shù)據(jù)集處于SetKey狀態(tài)時(shí),調(diào)用post方法,將數(shù)據(jù)集置成瀏覽狀態(tài)(Browse狀態(tài))</p>
<p> </p>
<p>post方法的調(diào)用既可以顯式地調(diào)用,也可以隱含地調(diào)用,當(dāng)數(shù)據(jù)集處于編輯狀態(tài)或插入狀態(tài)時(shí),當(dāng)移動(dòng)記錄指針時(shí),Delphi會(huì)隱含地調(diào)用post方法,將將當(dāng)前記錄的修改寫回?cái)?shù)據(jù)庫(kù)表,在程序調(diào)用Insert方法或Append方法時(shí),也會(huì)隱含地調(diào)用Post方法,將先前的數(shù)據(jù)集的修改寫回?cái)?shù)據(jù)庫(kù)表。</p>
<p>Delete方法:Delete方法用于刪除表中的記錄,調(diào)用Delete方法時(shí),將會(huì)刪除表中當(dāng)前的記錄,并且自動(dòng)地將記錄指針移到被刪記錄的下一條記錄,同時(shí)將數(shù)據(jù)集置成Browse狀態(tài)。</p>
<p>Cancel方法:Cancel方法用于取消當(dāng)前的操作,當(dāng)程序還沒(méi)有調(diào)用Post方法,將對(duì)記錄的修改寫回?cái)?shù)據(jù)庫(kù)表時(shí),調(diào)用Cancel方法,可以將記錄恢復(fù)到?jīng)]有修改之前的狀態(tài)。并且在調(diào)用Cancel方法時(shí),它總是將數(shù)據(jù)集置成Browse狀態(tài)。</p>
<p>AppendRecord方法和InsertRecord方法:這兩個(gè)方法分別與Append方法和Insert方法相似。它們都是用于在表中插入一條新記錄,但AppendRecord方法和InsertRecord方法比Append和Insert方法更簡(jiǎn)單更方便一些,它們直接在表中插入一條新記錄,新記錄的各個(gè)字段值作為AppendRecord或InsertRecord方法的參數(shù)傳遞給新記錄并且不需顯式地調(diào)用post方法,將插入的新記錄寫回?cái)?shù)據(jù)庫(kù)表。在給插入的新記錄賦字段值時(shí),將由多個(gè)字段值組成的數(shù)組作為AppendRecord或InsertRecord的參數(shù),在字段值數(shù)組中可以為每一個(gè)字段提供一個(gè)值,或從左邊一列開始依次為任意多個(gè)字段賦值。也就是說(shuō),用戶可以從數(shù)據(jù)庫(kù)表的最左一列起,把許多列的值同時(shí)傳遞給InsertRecord,直到所有的字段被賦值,用戶也可以省略字段序列后面的的一些字段值,InsertRecord會(huì)用空值來(lái)填充這些字段:用戶也可以對(duì)那些明確希望用空填充的字段傳遞保留字NIl。</p>
<p>例如:如果表Country有Name,Captial,Continent,Area和Population字段,
并且數(shù)據(jù)集部件Table1與它相連,下面的代碼便可以在Country表中當(dāng)前記錄的后面插入一條新記錄。</p>
<p> </p>
<p>Table1.InsertRecord (["中國(guó)","北京","五洲"]);</p>
<p> </p>
<p>在上述代碼中沒(méi)有為Area和population字段賦值,InsertRecord會(huì)用空值來(lái)填這兩個(gè)字段。</p>
<p>SetRecords方法:調(diào)用該方法可以修改表中當(dāng)前記錄的多個(gè)字段的值,調(diào)用該方法之前必須將數(shù)據(jù)集部件置成編輯狀態(tài),調(diào)用該方法之后,還要調(diào)用post方法,才能真正將當(dāng)前記錄的修改寫回?cái)?shù)據(jù)庫(kù)表。調(diào)用SetRecord方法時(shí),被修改的字段值必須要與表中實(shí)際存在的字段名對(duì)應(yīng),并且數(shù)據(jù)類型要相匹配。例如,下面的代碼是修改上面剛剛插入的那條記錄。</p>
<p> </p>
<p>Table1.Edit;</p>
<p>Tabel1.SetRecord(, , ,9600000,1200000000);</p>
<p>Tabel1.post;</p>
<p> </p>
<p>這一段代碼是修改上面剛剛插入的那條記錄的Area 和Population
字段的值,而對(duì)Name,Continent和Captial字段沒(méi)有修改。</p>
<p>在數(shù)據(jù)集部件中,還有一個(gè)重要方法Abort方法,該方法是用于取消其他方法的調(diào)用的,如在插入記錄、修改記錄和刪除記錄之前,往往需要用戶確認(rèn)是否真的要執(zhí)行這種操作,此時(shí)調(diào)用Abort方法便可取消各種方法的調(diào)用,下面的代碼是在用戶刪除一條記之前,讓用戶確認(rèn)是否真的要執(zhí)行刪除操作。 </p>
<p>Tabel1.BeforeDelete(DataSet:TDataSet);</p>
<p>If MessageDlg('真的要?jiǎng)h除記錄嗎?',</p>
<p>mtConfirmation,mbyesNoCanel,0 <> mryes then</p>
<p>Abort; {取消刪除操作} </p>
<p>關(guān)于書簽(BookMark)操作;</p>
<p>書簽操作主要用于在表中快速地定位記錄指針,在應(yīng)用程序中常常要保存記錄指針?biāo)诘奈恢茫谶M(jìn)行其他處理之后,希望能快速地返回到先前指針?biāo)诘奈恢茫藭r(shí),使用書簽將顯得特別有用。有關(guān)書簽操作,Delphi提供了三個(gè)方法,它們是:</p>
<p>● GetBookMark</p>
<p>● GotoBookMark</p>
<p>● FreeBokMark</p>
<p> </p>
<p>這三個(gè)方法一般都是在一起使用,GetBookMark方法返回一個(gè)TBookMark類型的變量,該變量包含著指向當(dāng)前記錄的指針,GotoMark方法用于快速地將記錄指針定位到具有書簽的記錄處。FreeBookmark方法是與GetBookMark方法相反的操作,它釋放書簽標(biāo)志。下面的程序代碼闡述了書簽操作的一般方法:</p>
<p> </p>
<p>BookMark : TBookMark;</p>
<p><Do something></p>
<p>BookMark := Table1.GetBookMark; {對(duì)當(dāng)前記錄作書簽標(biāo)志}</p>
<p>Table1.DisalbeControls; {切斷Table1與數(shù)據(jù)察覺(jué)部件的聯(lián)系}</p>
<p>Table.First</p>
<p>While Not EOF Do {對(duì)表中全部記錄進(jìn)行其他處理}</p>
<p>begin</p>
<p><Do something></p>
<p>Tabel1.Next;</p>
<p>end;</p>
<p>Tabel1.GotoBookMark(BookMark) </p>
<p>Table1.enableControls; {重新定位記錄指針回到原來(lái)的位置}</p>
<p>Tabel1.FreeBookMark(BookMark); {刪除書簽BookMark標(biāo)志} </p>
<p>15.3.5 數(shù)據(jù)集部件與數(shù)據(jù)瀏覽部件的連接 </p>
<p> 數(shù)據(jù)集部件TTabel和TQuery具有三個(gè)方法,DisableControls
方法、EnableControls方法、Refresh方法用于控制數(shù)據(jù)集部件和與其相連的數(shù)據(jù)瀏覽部件之間的連接,以及控制數(shù)據(jù)瀏覽部件的顯示。在用戶修改和更新以及遍歷數(shù)據(jù)庫(kù)表中的記錄時(shí),調(diào)用DisableControls方法具有重要意義,調(diào)用DisbaleControls方法以切斷TTable或TQuery部件與數(shù)據(jù)瀏覽部件的連接,使數(shù)據(jù)瀏覽部件暫時(shí)失效,否則,在對(duì)TTable或TQuery部件的每次修改之后,窗體中所有與它們相連的數(shù)據(jù)瀏覽部件都要更新其顯示內(nèi)容,這親顯然會(huì)減慢處理速度。當(dāng)遍歷表中的記錄時(shí)記錄指針每移動(dòng)一下,窗體中的數(shù)據(jù)瀏覽部件也隨之更新一下其中的顯示內(nèi)容,在屏幕上產(chǎn)生閃爍。</p>
<p>EnableControls方法的作用與DisbaleControls方法的作用是相反的,調(diào)用EnableControls方法,使TTable或TQuery部件恢復(fù)與數(shù)據(jù)瀏覽部件的連接,使暫時(shí)失效的數(shù)據(jù)瀏覽部件恢復(fù)到正常顯示表中記錄信息的狀態(tài)。</p>
<p>Refresh方法用于刷新數(shù)據(jù)瀏覽部件中的顯示。在調(diào)用Refresh方法時(shí),必須要確保TTable或TQuery部件是打開的。當(dāng)數(shù)據(jù)集中的記錄被修改之后,調(diào)用Refresh方法,數(shù)據(jù)瀏覽部件中顯示的信息也隨之改變。</font></p>
<p> </p>
<hr color="#EE9B73" size="1" width="94%">
</TD>
<TD CLASS="tt3" VALIGN="bottom" width="8%" bgcolor="#e0e0e0"><strong><A HREF="037.htm"><FONT style="FONT-SIZE: 9pt">后一頁(yè)</font></A><BR>
<A HREF="035.htm"><FONT style="FONT-SIZE: 9pt">前一頁(yè)</font></A><BR>
<A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目錄</font></A><BR>
<A HREF="../../../../index.htm"><FONT style="FONT-SIZE: 9pt">回首頁(yè)</font></A><BR>
</strong>
</TD>
</TR>
</table>
</BODY></HTML>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -