DELPHI开发经验心得(2)

2025-10-24

begin

messagebox(0,'ID長度不能大於10!','提示',0); abort; end; end;

end;

----------------------------------------------------------------------------------- 遍歷dbgrid數據集中是否存在重復記錄(定位法) var

mylist:Tstringlist;

mylist:=Tstringlist.Create; ads_idNoData.First;

while not ads_idNoData.Eof do begin

if mylist.IndexOf(ads_idNoData.fieldbyname('ID_NO').asstring)=-1 then //該值只能為-1或者非-1

mylist.Add(ads_idNoData.fieldbyname('ID_NO').asstring) else begin

result:=4; break; end;

ads_idNoData.Next; end;

------------------------------------------------------------------------------------- 該過程用于控制dbgrid里面的Enter鍵輸入

procedure TFrm_IdNoData.DBGrid1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

if key=13 then begin

if (sender as Tdbgrid).SelectedIndex=(sender as Tdbgrid).Columns.Count-1 then

begin

if (sender as Tdbgrid).DataSource.DataSet.Eof then begin

(sender as Tdbgrid).DataSource.DataSet.First; (sender as Tdbgrid).SelectedIndex:=0; end else begin

(sender as Tdbgrid).DataSource.DataSet.next; (sender as Tdbgrid).SelectedIndex:=0; end; end else

(sender as Tdbgrid).SelectedIndex:=(sender as Tdbgrid).SelectedIndex+1; end;

end;

------------------------------------------------------------------------------------- 控制鍵盤的輸入

//限制第一個欄位的鍵盤輸入 if DBGrid1.SelectedIndex = 0 then begin

if not (Key in ['0'..'9',#8,#13]) then Key := #0; end;

//限制第二個欄位的鍵盤輸入 if DBGrid1.SelectedIndex = 1 then begin

Key := #0; end;

//限制第五個欄位的鍵盤輸入 if DBGrid1.SelectedIndex = 4 then begin

if not (Key in ['0','1',#8,#13]) then Key := #0;

end;

-------------------------------------------------------------------------------------- Navigator刪除提示框:

if MessageBox(Handle,'該刪除動作會連同其下的關鍵控制點一同刪除,確定要刪除?','提示',MB_YESNO or MB_ICONQUESTION=ID_NO then Abort else begin

dm_CollectDevicedata.lc_procNavigatoraction;

dm_CollectDevicedata.ads_INF_COLLECT_SET.Delete; Abort; end;

---------------------------------------------------------------------------------------------------------------------

兩個dbgrid,根據dbgrid1的數據來查找dbgrid2里的數據

做法:在dbgrid1的AfterScroll事件里面,根據某個字段來過濾dbgrid2里面的數據

例子:

//數據採集器編號數據集的滾動事件 2011-11-1 cjr add

procedure Tdm_BMS_JSW_SetRpFieldIn.ads_jsw_fe_RpSetAfterScroll( DataSet: TDataSet); Var

Col_Seq:Integer; begin

Col_Seq := ads_jsw_fe_RpSet.fieldbyname('rp_seq').AsInteger; ads_jsw_fe_Field.Filtered :=False;

ads_jsw_fe_Field.Filter:=' rp_seq =' + IntToStr(Col_Seq); ads_jsw_fe_Field.Filtered :=True; end;

------------------------------------------------------

新增DBGRID記錄時,如果dbgrid2的某個字段的值來源於dbgrid1,則可以這樣賦值:

例子:

procedure Tdm_CollectDevicedata.ads_INF_COLLECT_DTLNewRecord( DataSet: TDataSet); begin

dataset.FieldByName('COL_SEQ').value :=ads_INF_COLLECT_SET.fieldbyname('COL_SEQ').asinteger; end;

----------------------------------------------------------------------------------------------------------------------------

sql語句:用于檢查數據表中是否存在重復記錄 例子:

//檢查相同數據採集器編號下是否存在相同的關鍵控制點 str_sql := ' SELECT col_seq,control_seq'

+' FROM #Temp_INF_COLLECT_DTL' +' GROUP BY col_seq,control_seq' +' HAVING COUNT(*) > 1'; ads_temp.Close;

ads_temp.CommandText := str_sql; ads_temp.Open;

if ads_temp.RecordCount > 0 then begin

result := 6;

exit; end;

---------------------------------------------------------------------------------------------------------------------------

制作遞增字段的過程: 例子:

function Tdm_CollectDevicedata.lc_funcGetseqnobytype(i_type: integer): integer; begin

with ads_temp do begin

close;

commandtext:='SELECT MAX(SEQ_NO) AS SEQ_NO FROM INF_CONTROL '

+'WHERE I_TYPE ='+inttostr(i_type); Open; if eof then result:=1 else

result:=Fields[0].asinteger+1;

if result=1 then begin

adc_temp.CommandText :='INSERT INTO INF_CONTROL VALUES('+inttostr(i_type)+','

+inttostr(result)+')'; adc_temp.Execute; end else begin

adc_temp.CommandText :='UPDATE INF_CONTROL SET SEQ_NO='+inttostr(result)

+' WHERE I_TYPE='+inttostr(i_type); adc_temp.Execute; end;

end; end;

------------------------------------------------------------------------------------------------------------------------------------------------------------ //設置默認值 2011-11-1 cjr add

procedure Tdm_CollectDevicedata.ads_INF_COLLECT_SETNewRecord( DataSet: TDataSet); begin

dataset.FieldByName('int_fact').Value := 0;

ads_INF_COLLECT_SET.FieldByName('COL_SEQ').value :=lc_funcGetseqnobytype(50); //這里進行遞增

end;

-----------------------------------------------------------------------------------------------------------------------------------------------------------

如果要在臨時表中插入一個字段,用於區分數據,可以使用自增字段

SEQ INT NOT NULL IDENTITY

-------------------------------------------------------------------------------------------------------------------

如果要去掉兩個表中相同的記錄,可以用EXCEPT,但前提是兩個表必須有相同的字段 例子:

SELECT * FROM AAA EXCEPT

SELECT * FROM BBB

得到的結果是:去掉AAA里面BBB的記錄后,剩下的AAA里面的記錄. -----------------------------------------------------------------------------------------------------------------------

Delphi 控制導出Excel文檔的所有列寬,字體樣式 例子:

App.ActiveSheet.Cells.Font.Name := '標楷體'; App.ActiveSheet.Cells.Font.Size := 12; App.ActiveSheet.Cells.ColumnWidth := 15;


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

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

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

下载本文档需要支付 7

支付方式:

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

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