作者:高素梅
設定資料引擎(BDE、SQL Link)的簡單方法
在資料庫程式分發時,需要攜帶資料引擎(BDE、SQL Link),且在客戶端安裝完程式後還需要設定資料引擎,如使用者名稱(username)、密碼(PassWord)等等。如果手動配置的話,工作量比較大,這時,我們可利用InstallShield For Delphi輕鬆實現配置。在用InstallShield For Delphi製作安裝程式時,在產生安裝程式的目錄裡有一個*.iwz的文字文件,只要在[IDAPI Alias]片段中手動加入即可。 例如:
[IDAPI Alias]
username=SYSDBA
password=masterkey
安裝程式後數據引擎自動設定完成。
做快速按鈕條的方法
快速按鈕條上的每一個圖形按鈕都代表著一個常用的功能,同時,這些圖形按鈕尺寸較普通的圖標大,可以放置更大、更形象的圖形,甚至可以帶上簡短的提示,這對於使用者執行最常用的功能很有幫助。基於上述原因,越來越多的Windows應用程式採用快速按鈕條來改善應用程式的介面。作者在用Delphi編程時,採用了兩種不同的方法來實現快速按鈕條,本文結合製作一個具有兩組、共六個按鈕的快速按鈕條的實例,列出了這兩種方法的具體設計步驟。
1.組合生成法
(1)在窗體上放置一個Panel1對象,作為圖形按鈕的載體。
(2)設定Panel1的屬性Caption為空,屬性Align為alTop,調整其高度至適當尺寸。
(3)在Panel1上放置六個SpeedButton按鈕(選用SpeedButton,是因它具有浮動特性)。
(4)在Panel1上放置兩個Bevel對象,調整其位置和大小,用於分隔按鈕組。
(5)調整SpeedButton1的大小及在Panel1中的位置。
(6)選擇SpeedButton1,設定其屬性Flat為True。
(7)點選SpeedButton1的屬性Glyph所對應的省略號小按鈕,開啟PictureEditor窗口,選擇一個象徵「查詢」的圖示。設定屬性ShowHint為True,屬性Hint為「查詢」。
(8)依步驟(5)至(7)的方法,分別設定其餘幾個SpeedButton按鈕的屬性。
這樣,一個快速按鈕條就製作完成了。運作時,快速按鈕均以浮動方式顯示,當滑鼠移至其上時,即顯示按鈕外框,並顯示小提示。
2.借用ToolBar生成法
(1)在窗體上放置一個ToolBar1物件。
(2)設定ToolBar1的屬性EdgeBorders.ebLeft、ebTop、ebRight、ebButtom皆為True;屬性Flat為True;調整ToolBar1的大小至適當尺寸。
(3)選擇ToolBar1,用右鍵點出快速選單,分別點選NewButton和NewSeparator增加六個按鈕ToolButton和兩條分隔欄線。
(4)任意選擇一個ToolButton按鈕,調整其大小至適當尺寸,所有的ToolButton也同時被調整好。
(5)設定ToolBar1的屬性BorderWidth為3,以調整ToolButton的位置。
(6)在窗體上放置一個ImageList1對象,設定它的屬性Height和Width的數值,以適應較大尺寸的圖像。
(7)雙擊ImageList1,透過「Add」按鈕分別裝入六個影像,與ToolBar1中的六個ToolButton一一對應。
(8)設定ToolBar1的屬性Images為ImageList1。
(9)設定六個ToolButton的屬性ShowHint為True,分別設定各自的小提示屬性Hint。
(10)也可以設定ToolBar1的HotImages指定滑鼠指向按鈕時的圖片集。
採用ToolBar實現的快速按鈕條在外觀上與第一種方法製作的類似。
以上兩種方法都能實現快速按鈕條,但各有千秋:第一種設計流程較為簡單;第二種方法則提供了更多的功能,如可用HotImages指定滑鼠指向按鈕時的圖片集。讀者不妨從中選擇一種,並可繼續完善其功能。
建立臨時表的方法
資料輸入是開發資料庫程式的必然環節。在Client/Server結構中,客戶端可能要輸入一批資料後,再向伺服器的後台資料庫提交,這就需要在本地(客戶端)建立臨時資料表來儲存使用者輸入的數據,待提交後,清除本地資料表。這種方法的好處是:提高輸入效率,減少網路負擔。
由於使用者一次輸入的資料量一般情況下較小(不會超過幾百筆記錄),所以臨時表可以建立在記憶體中,這樣處理速度較快。臨時表建立有以下兩種方法:
1.使用查詢控制項建立臨時表
步驟1:在表單上放入查詢控制項(TQuery),並設定好所連接的資料表。
第2步:新增如下語句:
TQuery. CachedUpdates=True;
TQuery. RequestLive=True。
步驟3:在原有的SQL語句後面加入一條Where子語句,要求加入這Where子語句後SQL查詢結果為空。
例如:
SELECT Biolife."Species No", Category, Common_Name, Biolife."Species Name", Biolife."Length (cm)", Length_In, Notes, Graphic
FROM "biolife.db" Biolife
where Biolife.Category=′A′ and Biolife.Category=′B′
這樣臨時表就建立好了。
2.使用代碼建立臨時表
函數程式碼如下:
function CreateTableInMemory(const AFieldDefs:TFieldDefs):
TDataSet;
var TempTable:TClientDataSet;
begin
TempTable:=nil;
Result:=nil;
if AFieldDefs〈〉nil then
begin
try
TempTable:=TClientDataSet.Create(application);
TempTable.FieldDefs.Assign(AFieldDefs);
TempTable.CreateDataSet;
Result:=(TempTable as TDataSet);
Except
if TempTable〈〉nil then TempTable.Free;
Result:=nil;
raise;
end
end
end;
在程式中依下列方法呼叫:
PRocedure TForm1.Button1Click(Sender: TObject);
var ADataSet:TDataSet;
begin
ADataSet:=TDataSet.Create(Self);
with ADataSet.FieldDefs do
begin
Add(′Name′,ftString,30,False);
Add(′Value′,ftInteger,0,False);
end;
with DataSource1 do
begin
DataSet:=CreateTableInMemory(ADataSet.FieldDefs);
DataSet.Open;
end;
ADataSet.Free;
end;
這樣,臨時表就建立完成。
方法1使用簡單,但由於利用了查詢控件,清空資料時需要查詢伺服器後台資料庫,所以速度稍慢,而且不適用於臨時表中各個欄位由幾個資料表的欄位拼湊而成的情況。方法2適用範圍廣、速度快,但需編寫程式碼。
在InterBase資料庫中使用函數
程式設計師可能在使用InterBase作為後台資料庫時,常會為其提供的函數過少而感到使用不便(只有四個),無法方便地編寫出複雜的預存程序。 InterBase本身無法編寫函數,但它可以使用外部函數(呼叫DLL中的函數)。下例中說明如何在InterBase 中宣告SUBSTR函數。
DECLARE EXTERNAL FUNCTION SUBSTR
CSTRING(80), SMALLINT, SMALLINT
RETURNS CSTRING(80)
ENTRY_POINT "IB_UDF_substr" MODULE_NAME "ib_udf"
其中:MODULE_NAME為DLL的名稱,ENTRY_POINT為函數名。
聲明後便可使用,例如:
select SUBSTR(country)
from country
本範例使用的是Delphi安裝時自帶的IBLocal資料庫,使用者也可以自行寫函數來擴充InterBase。