4、以上調用的過程及函數——MyRecordScatTo、MyRecordGatherFrom、My_TablePostError的代碼如下:
function TForm1.MyRecordScatTo(DataSet0:TDataSet;var MyDynamic_Record0:Variant):boolean; //正確
返回TRUE,否則為FALSE
//功能:讀取(當前記錄)字段值存入動態數組中
var i:integer;
begin
try
i:=DataSet0.FIEldCount; //取字段數
MyDynamic_Record0:=VarArrayCreate([0,i],varVariant); //MyVariant
if (not DataSet0.Active) //or(DataSet0.eof)
then begin
MessageBeep(MB_OK);
MessageDlg('當前為空記錄,無法使用"攜帶"!',mtError, [mbOk], 0);
Result:=false;
Exit;
end;
with DataSet0 do //DBGrid0
begin
for i:=0 to FIEldCount-1 do
begin
if FIElds[i].DataType<>ftMemo //非"備注"型數據
then MyDynamic_Record0[i]:=FIElds[i].Value;
end; //for i:
end;
Result:=true;
except
Result:=false
end //try
end; // MyRecordScatTo
function TForm1.MyRecordGatherFrom(DataSet0:TDataSet;var MyDynamic_Record0:Variant):boolean; //
正確返回TRUE,否則為FALSE
//功能:從動態數組中獲取相應值,來更改(當前記錄)字段值
var i:integer;
begin
Result:=true;
with DataSet0 do //
begin
try
for i:=0 to FIEldCount-1 do
begin //Edit;
if (FIElds[i].DataType<>ftMemo) //非"備注"型數據
then FIElds[i].Value:=MyDynamic_Record0[i];
end; //for i
except
Result:=false;
end //try
end;
end; // MyRecordGatherFrom
procedure TForm1.My_TablePostError(DataSet: TDataSet; E: EDatabaseError;
var Action: TDataAction;sFIEldName:string);
//功能:保存時數據錯誤信息捕捉
var sMes:string;
begin
MessageBeep(0);
//以下捕捉"錯誤信息"
sMes:='當前記錄非法!更正後再保存。';
if Pos(UpperCase('key violation'),UpperCase(e.Message))<>0
then sMes:='"'+sFIEldName+'"內容重復,請更改後再保存!';
if Pos(UpperCase('must have a value'),UpperCase(e.Message))<>0
then sMes:='當前欄目必須輸入值!';// '"'+sFIEldName+'"字段必須輸入值!';
sMes:=sMes+Chr(13)+Chr(10)+'(Esc鍵取消操作)';
MessageDlg(sMes,mtError, [mbOk], 0);
Action:=daAbort; //放棄編輯且不顯示錯誤信息
end; //調用通用表數據處理模塊
5、運行程序,選擇<使用“攜帶”> 後,按<添加>(或按[Insert]鍵)出現的畫面如下圖所示(以第2條記錄為源):
以上代碼在下述環境中調試通過:中文Win2000 Pro,Delphi 7.0。