1 实现效果
2 任务中的某某模块,在系统中找不到
3 一个SQL
4 TDBGridEh用法
5 联动删除
6 一次插入多条数据
7 输入参数控制
1 实现效果
文字描述:
- A页面被点击,出现B页面,且B页面和A页面一样展示DBGrid(页面复制,跳转调用);
- B页面中的DBGrid可编辑;
- 联动删除,权限控制;
2 任务中的某某模块,在系统中找不到
1、确定增值模块是否有权限
select * from tsys_module where vc_name like '%XXXX%';
在这个模块中L_VOID的值是0
2、权限设置是否有权限
3、确定KHDM是否有权限
select * from txtcs where vc_csdm = 'KHDM';
update txtcs set vc_csz = '10757' where vc_csdm = 'KHDM';
commit;
3 一个SQL
A表和B表具有相同的3个字段(可作为连接条件),A表比B多一个L_CFBL字段,B表比A多一个VC_FJJB字段,现需要将B表的VC_FJJB字段连接到查询结果中,如下图C表。
select a.L_ZTBH,a.VC_FJJJDM,a.VC_FJJJMC,a.l_cfbl from tfjjjcfbl a where a.l_ztbh = 700002;
select b.L_ZTBH,b.VC_JJDM,b.VC_FJJJDM,b.VC_FJJJMC,b.vc_fjjb from TJJXSFL b where b.l_ztbh = 700002;
select b.L_ZTBH,b.VC_JJDM,b.VC_FJJJDM,b.VC_FJJJMC,b.vc_fjjb,a.L_CFBL from TJJXSFL b,tfjjjcfbl a
where b.l_ztbh(+) = a.l_ztbh and b.vc_fjjjdm(+) = a.vc_fjjjdm and a.l_ztbh in (700002);
select b.L_ZTBH,b.VC_JJDM,b.VC_FJJJDM,b.VC_FJJJMC,b.vc_fjjb,a.L_CFBL from TJJXSFL b,tfjjjcfbl a
where b.l_ztbh = a.l_ztbh and b.vc_fjjjdm = a.vc_fjjjdm and a.l_ztbh in (700002);
select b.L_ZTBH,b.VC_JJDM,b.VC_FJJJDM,b.VC_FJJJMC,b.vc_fjjb,a.L_CFBL from TJJXSFL b,tfjjjcfbl a
where b.l_ztbh = a.l_ztbh and b.vc_fjjjdm = a.vc_fjjjdm and b.l_ztbh in (700002);
主要涉及知识点:右连接(+),匹配规则。
右连接:遍历t表,(1)将t表中所有与a表中l_ztbh相等的字段取出,(2)将t表中所有与a表中l_ztbh相等的字段取出vc_fjjjdm取出,然后使用a表匹配。即将a表中L_CFBL字段填充至满足(1)(2)条件的结果中。如下图。
4 TDBGridEh用法
(1)TDBGridEh中的cell可编辑,效果
需要做如下设置:
- TDBGridEh中的Options属性中的,第一个属性dgEdting设置为可True,如图1;
- TDBGridEh的ReadOnly设置为False,如图2;
- TDBGridEh中的字段,不需要编辑的设置为False,需要的设置为True,如图3,4;
5 联动删除
效果描述:
勾选任意一个分级基金记录时,系统要联动勾选该账套的其他分级基金记录。
具体实现
1、TADODateSet用法
ADOList.First;
ADOList.Next;
ADOList.FindField('L_ZTBH').AsInteger
2、多选效果
(1)加列,修改属性,默认值是1, 0(即1为选中,0不选中)
(2)SQL中对应变化,加入0 xz(即默认不选中)
select 0 xz from tfjjjcfbl
(3)控制表格某列被点击事件,实现方法
procedure TFormPTFJSplitScale.ListFrame1DBGridEh1CellClick(
Column: TColumnEh);
TColumnEh指的是点击的列。
(4)通过操控dateSet实现,联动多选,注意ADOList.First的位置。
if Assigned(rs) and (rs.RecordCount > 0) then
begin
if Column.FieldName = 'XZ' then
ADOList.First;
begin
if Column.Field.Value = 0 then
begin
for I:=0 to rs.RecordCount do
begin
Column.Field.DataSet.Edit;
Column.Field.Value := 1;
Column.Field.DataSet.Post;
ADOList.Next;
end;
end
else if Column.Field.Value = 1 then
begin
for I:=0 to rs.RecordCount do
begin
Column.Field.DataSet.Edit;
Column.Field.Value := 0;
Column.Field.DataSet.Post;
ADOList.Next;
end;
end;
end;
end
else
begin
exit;
end;
while - do
while not ADOList.Eof do
begin
//处理逻辑如上
end;
6 一次插入多条数据
(1)前台控制,主要通过操作ADOList,拼接所需参数sParam
function TFormPTFJSplitScale_add.PTFJSplitScale_addInsert: Boolean;
var
iResult: integer;
sData: OleVariant;
sParam,sError: WideString;
cfbl: string; //拆分比例
begin
sParam := '';
ADOList.First;
while not ADOList.Eof do
begin
cfbl := ADOList.FieldByname('L_CFBL').AsString;
sParam := sParam+format(' ',[ADOList.FieldByname('VC_FJJJDM').AsString,ADOList.FieldByname('VC_FJJJMC').AsString,ADOList.FieldByname('L_CFBL').AsString]);
ADOList.Next;
end;
if sParam = '' then
begin
hsmsgbox('请选择科目','提示',MB_ICONINFORMATION+MB_OK);
exit;
end;
sParam := format('',[ztbh])+sParam+'';
iResult := BussinessMethod('PTFJSplitScaleAdd_Add', sParam, sData, sError);
if (iResult<0) then
begin
hsMsgBox(sError, '插入失败', MB_ICONWARNING+MB_OK);
Exit;
end;
Result := true;
end;
(2)后台,通过Item控制循环插入
delete from tfjjjcfbl where l_ztbh = @ztbh
insert into tfjjjcfbl(L_ZTBH,VC_FJJJMC,VC_FJJJDM,L_CFBL)
values(@ztbh,'@jjmc','@jjdm',@cfbl)
7 输入参数控制(只允许输入数字)
效果如图
strtofloat(Value)
End~