Delphi提供了兩種方式在數據庫表中查找記錄Goto方式和Find方式這兩種方式十分相似它們的主要區別在於為查找指定查找值的方法不一樣
使用Goto方式進行數據查找使用的方法有SetKey方法GotoKey方法和GotoNearest方法其實際步驟如下
①確保要查找的字段是關鍵字段或輔助索引字段
②調用SetKey方法把與表對應的TTable部件置成查找狀態
③把查找值賦給相應的字段
④調用GotoKey方法並測試它的返回值檢驗查找是否成功
假設Table對應的表中第一個字段是關鍵字段Edit是應用窗體中的一個編輯框用戶可以通過Edit輸入查找值下面的代碼將通過Goto方式進行查找
TableSetKey; {將Table置成查找狀態}
TableField[]AsString := EditText; {指定查找值}
TableGotoKey; {進行查找}
上面最後一行代碼是根據用戶指定的查找值在表中執行查找查找的結果有兩種也許成功也許失敗這是由調用GotoKey方法之後返回的布爾值來決定如果返回True那麼查找成功並且記錄指針會指向與查找值匹配的記錄如果返回Fale那麼查找失敗記錄指針的位置不發生變化下面的代碼可以測試調用GotoKey方法之後的返回值告知用戶查找是否成功
TableSetKey;
TableField[]AsString:= Smith;
If not TableGotoKey then
ShowMessage(記錄沒找到)
在這一段代碼中如果在表中沒有找到第一個字段值為Smith的記錄該應用程序會彈出一個對話框告知用戶記錄沒有找到
如果在表中存在多個關鍵字段或輔助索引中包含多個字段時你在進行查找時只想為第一個字段指定查找值那麼必須要設置TTable部件的KeyFieldCount的屬性值為如果想為多個字段指定查找值只能為相鄰的字段指定查找值例如輔助索引中共有三個字段那麼我們只能為第一個字段第一和第二個字段第一和第二以及第三個字段指定查找值而不能為第一和第三個字段指定查找值
GotoNearest方法的使用與GotoKey方法完全一樣只是它用於不精確查找它不要求查找結果與查找值精確匹配當表中有與查找值精確匹配的記錄時它將記錄指針移到該記錄處當表中沒有與查找值精確匹配的記錄時它會查找出與查找值最接近的記錄並將記錄指針移到該記錄處
下面是應用GotoNearest方法的一段代碼
TableSetKey;
TableFields[]AsString:= Sm;
TableGotoNearest;
執行上述代碼後若表中存在第一個字段值等於Sm的記錄時記錄指針將移到該記錄處若表中不存在第一個字段值等於Sm的記錄而存在第一個字段值等於Smith的記錄那麼記錄指針會移到該記錄處
如果我們不是以數據庫表中的關鍵字段作為查找字段我們也可以為TTable部件的IndexFieldName屬性中的字段或IndexName屬性中的字段指定查找值進行數據查找例如假設Customer表中有一個名叫CityIndex的輔助索引我們為CityIndex中的字段指定查找值進行查找時首先設置TTable部件的IndexName屬性為CityIndex然後再進行查找下面是具體的程序代碼
TableIndexName := CityIndex;
TableOpen;
TableSetKey;
TableFieldByName{City)AsString := EditText;
TableGotoKey;
使用Find方式使用Find方式在數據庫中進行數據查找的方法有FindNearest方法和FindKey方法
FindKey方法和FindNearest方法為數據查找提供了一個簡單的方法它們將SetKey指定查找值執行查找三個步驟融合在一步裡完成它們在指定查找值時是把各字段的查找值組成一個數組傳給FindKey或FindNearest下面是使FindKey方法的一個例子
假設Tabel對應的表中的第一個字段是關鍵字段
TableFindKey([EditText])
如果用GotoKey方法完成這一功能則需要編寫下面代碼
TableSetKey;
TableFields[]AsStrine := EditText;
TableGotoKey;
FindKey方法和FindNearest方法的區別與GotoKey和GotoNearest方法的區別是一樣的
創建主要──明細數據庫應用
TTable部件中MasterSource屬性和MasterFields屬性是用於定義兩個數據庫表的一對多的關系MasterSource屬性指定主表對應的TDataSource部件MasterFields屬性指定主表和明細表之間建立聯系的字段主表和明細表之間建立一對多關系時可能不只是基於一個字段可能有多個字段如果有多個字段那麼在說明MasterFields屬性時多個字段之間要用分號隔開如TableMasterFields := OrderNo;CustNo在設計階段可以使用字段連接設計器(Field Link Designer)為兩上表創建一對多的關系在Object Inspector 中雙擊TTable部件的MasterFields便可以打開Field Link Designer進行一對多關系的創建
Field Link Designer提供了一種可視化的方法來創建主要──明細表之間的一對多關系圖中Available Indexes組合框中存放著明細表中的關鍵字段和索引字段可以選擇索引字段進行連接在主表中選擇一個用於連接的關鍵字段然後將其與明細表中相應的關鍵字段連接單擊Add按鈕主要──明細表的連接字段將顯示在Joined Fields列表框中如
CustNo>CustNo
TDataSource部件及其應用
TDataSource部件是開發數據庫應用程序中用到的非常重要的部件它是連接數據集部件TTable或TQuery和數據浏覽部件的橋梁TDataSource部件本身十分簡單它所擁有的屬性事件和方法都比較少在使用該部件時無需作太多的工作它主要是為數據浏覽部件服務的如果在應用程序中沒有使用數據浏覽部件我們也沒有必要為應用程序設置TDataSource部件
TDataSource部件的屬性
TDataSource部件除了其他部件都擁有的Name屬性和Tag屬性之外主要有下面幾個屬性
DataSet屬性該屬性說明TDataSource部件從中獲取數據的數據集的名字它可以是TTable部件的名字也可以是TQuery部件的名字甚至還可以指定其他窗體內的數據集作為該屬性的值如在下面的程序中我們指定窗體Form中的table作為窗體Form中的DataSource的DataSet屬性值
TFormFormcreate(Sender : Tobject)
Begin
DataSourceDataSet := FormTable;
end;
Enable屬性Enable屬性可以暫時性地切斷TDataSource部件和與之相連的數據集部件的連接這是一個布爾型變量當它的值為False時TDataSource部件和數據集部件的連接被切斷且所有與TDataSource部件相連的數據浏覽部件中將變為一片空白不顯示任何數據信息當Enabled的值變為True時TDataSource部件和數據集部件的連接恢復且與TDataSource部件相連的數據浏覽部件恢復顯示數據不過要實現上述這些功能一般不使用TDataSource部件的Enabled屬性而是調用數據集部件的DisableControls方法和EnableControls 方法因為調用這兩個方法可以方便地控制與數據集部件相連的所有TDataSource部件以及與TDataSource部件相連的數據浏覽部件
AutoEdit屬性這是一個布爾型變量它用於說明是否將與TDataSource部件相連的數據集置於編輯狀態當AutoEdit的值為True時應用程序運行時與TDataSource相連的數據集部件自動地被設置成編輯狀態當用戶在與TDataSource部件相連的數據浏覽部件中輸入新的值時數據集部件中的記錄也隨之改變如果AutoEdit的值為False用戶想通過數據浏覽部件或程序修改數據集中的記錄必須要調用數據集部件的Edit方法將其置為編輯狀態之後才能夠進行
[] [] [] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/25159.html