----------------------------------------------------------------------------------- 必要函數:
function CreateObject :TObject;exports CreateObject; function DestroyObject :Boolean;exports DestroyObject;
function CreateObject :TObject; begin
Frm_BMS_JSW_SetRpFieldIn :=
TFrm_BMS_JSW_SetRpFieldIn.Create(Application); Frm_BMS_JSW_SetRpFieldInB :=
TFrm_BMS_JSW_SetRpFieldInB.Create(Application); dm_BMS_JSW_SetRpFieldIn :=
Tdm_BMS_JSW_SetRpFieldIn.Create(Application); Result := Frm_BMS_JSW_SetRpFieldIn; end;
function DestroyObject :Boolean; begin
Frm_BMS_JSW_SetRpFieldIn.Free; Frm_BMS_JSW_SetRpFieldInB.Free; dm_BMS_JSW_SetRpFieldIn.Free;
Result :=True; end;
------------------------------------------------------------------------------------- 必要的公用單元:
comUser
------------------------------------------------------------------------------------- procedure lc_TempTable_Drop(); procedure lc_TempTable_Create();
//建立臨時表方法
procedure Tdm_BMS_JSW_SetRpFieldIn.lc_TempTable_Create; Var
Sql_Text:String; Begin
lc_TempTable_Drop; Try
Sql_Text := ' ';
adc_temp.CommandText := Sql_Text;
adc_temp.Execute; Except
On E:Exception Do Begin
showinfo('建立臨時表出錯,錯誤原因: ' + E.Message); exit; End; End; End;
//刪除臨時表方法
procedure Tdm_BMS_JSW_SetRpFieldIn.lc_TempTable_Drop; Var
Sql_Text:String; Begin Try
Sql_Text:=' IF OBJECT_ID(''TEMPDB.DBO.#TEMP_BMS_JSW_FE_FIELD'') IS NOT NULL'
+' DROP TABLE #TEMP_BMS_JSW_FE_FIELD'; adc_temp.CommandText := Sql_Text;
adc_temp.Execute; Except
On E:Exception Do Begin
showinfo('刪除臨時表出錯,錯誤原因: ' + E.Message); exit; End; End; End;
---------------------------------------------------------------------------------- //網格定位
procedure Tdm_BMS_JSW_SetRpFieldIn.lc_procSetFocus; Var
vRecNo:Integer; Begin
vRecNo := ads_jsw_fe_RpSet.RecNo; If vRecNo <= 0 Then
Begin
vRecNo := 1; End;
ads_jsw_fe_RpSet.Close; ads_jsw_fe_RpSet.Open;
If ads_jsw_fe_RpSet.RecNo >= vRecNo Then Begin
ads_jsw_fe_RpSet.RecNo := vRecNo; End Else Begin
ads_jsw_fe_RpSet.RecNo := vRecNo; End;
vRecNo := ads_jsw_fe_Field.RecNo; If vRecNo <= 0 Then Begin
vRecNo := 1; End;
ads_jsw_fe_Field.Close; ads_jsw_fe_Field.Open;
If ads_jsw_fe_Field.RecNo >= vRecNo Then Begin
ads_jsw_fe_Field.RecNo := vRecNo; End Else Begin
ads_jsw_fe_Field.RecNo := vRecNo; End; End;
-------------------------------------------------------------------------------------- 給dbgrid設置默認值:
在dbgrid.datasource.dataset的onNewRecord事件中,給要設置的字段添加默認值就可以. 例子:
procedure Tdm_IdNoData.ads_idNoDataNewRecord(DataSet: TDataSet); begin
dataset.fieldbyname('INT_FACT').value :=0;
dataset.fieldbyname('ID_VALID').value :=1;
end;
-------------------------------------------------------------------------------------- 根據dbgrid單元下拉菜單選擇后觸發事件:
方法一:使用lookupdata,例子:常宏ERP系統--ID卡定義(下拉菜單) //該方法也用于制作dbgrid單元下拉菜單 可以在 onsettext,ongettext,onchang設置觸發事件
方法二:使用dbgrid.datasource.dataset的onCalcFields事件 例子:
function lc_funcGetcontrolname(i_zubei_seq: Integer): string;
procedure TFrm_IdNoData.ads_idNoDataCalcFields(DataSet: TDataSet); var
i:integer;
begin
if dataset.FieldByName('ZUBEI_SEQ').IsNull then exit; i:=dataset.FieldByName('ZUBEI_SEQ').asinteger;
dataset.FieldByName('AAAA').asstring:=lc_funcGetcontrolname(i); end;
function TFrm_IdNoData.lc_funcGetcontrolname(i_zubei_seq:Integer):string; begin
with ads_temp do begin close;
commandtext:='SELECT CONTROL_NAME FROM INF_CONTROL_ZUBEI y '
+'JOIN INF_GROUP_CONTROL x ON x.CONTROL_SEQ = y.CONTROL_SEQ '
+'WHERE Y.ZUBEI_SEQ ='+inttostr(i_zubei_seq); Open;
result:=Fields[0].asstring; end; end;
-------------------------------------------------------------------------------------
制作dbgrid單元下拉菜單,也可以使用lookupdata的方法來制作下拉菜單 with ads_temp do begin
if dbg_ass_workgroup.SelectedIndex=2 then begin Close;
str_sql :=' select ''[''+REPLACE(class_code,'' '','''')+'']''+REPLACE(class_name,'' '','''') as group_type' +' from chd_code ' +' where param_id = 4' +' order by 1'; commandtext := str_sql; Open;
dbg_ass_workgroup.Columns[2].PickList.Clear; while not Eof do begin
dbg_ass_workgroup.Columns[2].PickList.Add(FieldbyName('group_type').AsString); next; end; end; end;
-----------------------------------------------------------------------------------------
DBGRID新增記錄時,位數不夠,補零,也可以使用 10000000000+s的方法,然后從第二位開始截取10位
在lookupdata的onsettext事件里設置
procedure TFrm_IdNoData.ads_idNoDataID_NOSetText(Sender: TField; const Text: String); var
s:string; begin
if text='' then exit; s:=text;
case length(s) of 0..9: begin
s:=copy('0000000000',1,10-length(s))+s; sender.Value :=s; end;
10:sender.Value :=s; else