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
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語句:用于檢查數據表中是否存在重復記錄 例子:

