在數據庫應用系統的數據錄入過程中,各條記錄之間有大量的重復數據,如果每條記錄都讓錄入人員全部手工錄入,其間的重復勞動是相當大的,既降低了工作效率,又顯得我們的軟件不夠“專業”。
其實我們完全可以用代碼來實現數據庫表記錄的自動復制,當客戶錄入一條新的記錄的時候,我們可以把當前記錄的數據復制到錄入界面的各輸入框中,客戶只需做很少的修改,就完成了一條新記錄的編輯,然後直接保存就可以了。
本文的示例用 Delphi5.0 制作,使用 ADO 方法存取 Access 數據庫中的表 test,表的第一個字段是“自動編碼”字段,在記錄復制時要跳過。首先在 Form1 上添加 ADOConnection1、ADODataSet1、DataSource1、DBGrid1 等數據庫相關組件,使用連接向導把 ADOConnection1 與 Access 數據庫連接起來,把 ADOConnection1 的 LoginPrompt 屬性設置為 False,其它組件的對應屬性設置如下:
ADODataSet1.Connection :=ADOConnection1;
ADODataSet1.CommandText :='select * from test';
ADODataSet1.Active :=True;
DataSource1.DataSet :=ADODataSet1;
DBGrid1.DataSource :=DataSource1;
這樣以來,就可以在 DBGrid 中看到數據庫表 test 中的數據了。
然後可以在窗體上添加一些數據敏感的數據輸入控件(如 DBEdit 等),將其 DataSource 屬性設為 DataSource1,再分別與各字段綁定起來。
再在窗體上添加 2 個按鈕 Button1 和 Button2,它們的觸發事件如下:
procedure TForm1.Button1Click(Sender: TObject);
var
strList: TStringList; // 聲明字符串列表
i: integer;
begin
strList :=TStringList.Create;
for i :=0 to ADODataSet1.FIEldCount-1 do
strList.Add(ADODataSet1.FIElds[i].AsString);
// 把各字段的值保存到 TStringList 中。不能應用數組,
// 因為數組不能保存不同類型的數據。
ADODataSet1.Insert; // 插入一條新記錄
for i :=1 to form1.ADODataSet1.FIEldCount-1 do
ADODataSet1.FIElds[i].AsString := strList[i];
// 把 TStringList 中的數據寫回到新的記錄中。
// 注意 TStringList 的下標從 1 開始,跳過了表的“自動編碼”字段。
strList.Free;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ADODataSet1.Post; // 保存新記錄
end;
程序編譯運行後,按 Button1 按鈕,就會添加一條新的記錄,記錄的內容為添加前記錄指針指向的記錄的內容。我們可以對現有數據做些改動,然後按 Button2 按鈕保存新記錄。程序的有關說明在代碼中。