DELPHI开发经验心得

2025-10-23

----------------------------------------------------------------------------------- 必要函數:

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


DELPHI开发经验心得.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2024秋福师《20世纪中国文学研究专题》在线作业一3

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219