可否将下面的这个过程的代码进行改写,以实现代码的精减? ( 积分: 50 )

  • 主题发起人 主题发起人 aabb_1980
  • 开始时间 开始时间
A

aabb_1980

Unregistered / Unconfirmed
GUEST, unregistred user!
各位朋友,代码如下,这个过程是用来给存储过程的各位参数赋值,但不知道有哪位大虾可以将下面的代码用一个循环语句进行代码的精减,请各位朋友赐教,谢谢!!
procedure TFrm_Input.Insert_Update_Data(Sql: string);
var
Mem: TMemoryStream;
begin
ADOStoredProc1.Close;
ADOStoredProc1.Parameters.ParamByName('@emp_id').Value := trim(bh.Text);
ADOStoredProc1.Parameters.ParamByName('@card_id').Value := trim(ch.Text);
if mc.Checked then //是否免卡 0表示非免卡,1表示免卡
ADOStoredProc1.Parameters.ParamByName('@no_sign').Value := '1'
else
ADOStoredProc1.Parameters.ParamByName('@no_sign').Value := '0';
ADOStoredProc1.Parameters.ParamByName('@emp_name').Value := trim(sm.Text);
ADOStoredProc1.Parameters.ParamByName('@id_card').Value := trim(sfz.Text);
if pos(' ', zc.Text) > 0 then //职称
ADOStoredProc1.Parameters.ParamByName('@position_id').Value := trim(copy(zc.Text, pos(' ', zc.Text) + 10, length(zc.Text) - (pos(' ', zc.Text) + 9)))
else
ADOStoredProc1.Parameters.ParamByName('@position_id').Value := '';
if sex.ItemIndex = 0 then //在数据库里面,0表示男,1表示女
ADOStoredProc1.Parameters.ParamByName('@sex').Value := '0'
else
ADOStoredProc1.Parameters.ParamByName('@sex').Value := '1';
if pos(' ', zw.Text) > 0 then //职位
ADOStoredProc1.Parameters.ParamByName('@job_id').Value := trim(copy(zw.Text, pos(' ', zw.Text) + 10, length(zw.Text) - (pos(' ', zw.Text) + 9)))
else
ADOStoredProc1.Parameters.ParamByName('@job_id').Value := '';
ADOStoredProc1.Parameters.ParamByName('@hire_date').Value := FormatDateTime('yyyy-mm-dd', rzrc.Date);
if pos(' ', kcgz.Text) > 0 then //考勤规则
ADOStoredProc1.Parameters.ParamByName('@rule_id').Value := trim(copy(kcgz.Text, pos(' ', kcgz.Text) + 10, length(kcgz.Text) - (pos(' ', kcgz.Text) + 9)))
else
ADOStoredProc1.Parameters.ParamByName('@rule_id').Value := '';
if pos(' ', depart.Text) > 0 then //部门
ADOStoredProc1.Parameters.ParamByName('@depart_id').Value := trim(copy(depart.Text, pos(' ', depart.Text) + 10, length(depart.Text) - (pos(' ', depart.Text) + 9)))
else
ADOStoredProc1.Parameters.ParamByName('@depart_id').Value := '';
if pos(' ', gz.Text) > 0 then //工种
ADOStoredProc1.Parameters.ParamByName('@status_id').Value := trim(copy(gz.Text, pos(' ', gz.Text) + 10, length(gz.Text) - (pos(' ', gz.Text) + 9)))
else
ADOStoredProc1.Parameters.ParamByName('@status_id').Value := '';
if Image1.Picture.Graphic <> nil then //如果有图像的话,就要对图像进行赋值!
begin
save_Picture(Mem); //将MEM进行地址传递,将其转换为图像!
ADOStoredProc1.Parameters.ParamByName('@photo').LoadFromStream(Mem, ftblob);
Mem.Free;
end
else
ADOStoredProc1.Parameters.ParamByName('@photo').Value := Null;
if pos(' ', zzmm.Text) > 0 then //政治面貌
ADOStoredProc1.Parameters.ParamByName('@polity_id').Value := trim(copy(zzmm.Text, pos(' ', zzmm.Text) + 10, length(zzmm.Text) - (pos(' ', zzmm.Text) + 9)))
else
ADOStoredProc1.Parameters.ParamByName('@polity_id').Value := '';
if pos(' ', zg.Text) > 0 then //籍贯
ADOStoredProc1.Parameters.ParamByName('@native_id').Value := trim(copy(zg.Text, pos(' ', zg.Text) + 10, length(zg.Text) - (pos(' ', zg.Text) + 9)))
else
ADOStoredProc1.Parameters.ParamByName('@native_id').Value := '';
if pos(' ', mz.Text) > 0 then //民族
ADOStoredProc1.Parameters.ParamByName('@nation_id').Value := trim(copy(mz.Text, pos(' ', mz.Text) + 10, length(mz.Text) - (pos(' ', mz.Text) + 9)))
else
ADOStoredProc1.Parameters.ParamByName('@nation_id').Value := '';
if pos(' ', xl.Text) > 0 then //学历
ADOStoredProc1.Parameters.ParamByName('@edu_id').Value := trim(copy(xl.Text, pos(' ', xl.Text) + 10, length(xl.Text) - (pos(' ', xl.Text) + 9)))
else
ADOStoredProc1.Parameters.ParamByName('@edu_id').Value := '';
if pos(' ', ss.Text) > 0 then //宿舍
ADOStoredProc1.Parameters.ParamByName('@dorm_id').Value := trim(copy(ss.Text, pos(' ', ss.Text) + 10, length(ss.Text) - (pos(' ', ss.Text) + 9)))
else
ADOStoredProc1.Parameters.ParamByName('@dorm_id').Value := '';
ADOStoredProc1.Parameters.ParamByName('@birth_date').Value := FormatDateTime('yyyy-mm-dd', birthday.Date);
if marry.ItemIndex = 0 then //0表示未婚,1表示已婚
ADOStoredProc1.Parameters.ParamByName('@marriage').Value := '0'
else
ADOStoredProc1.Parameters.ParamByName('@marriage').Value := '1';
ADOStoredProc1.Parameters.ParamByName('@gd_date').Value := FormatDateTime('yyyy-mm-dd', bysj.Date);
ADOStoredProc1.Parameters.ParamByName('@phone_code').Value := Trim(phone.Text);
ADOStoredProc1.Parameters.ParamByName('@post_code').Value := trim(yb.Text);
ADOStoredProc1.Parameters.ParamByName('@email').Value := trim(email.Text);
ADOStoredProc1.Parameters.ParamByName('@address').Value := trim(address.Text);
ADOStoredProc1.Parameters.ParamByName('@gd_school').Value := trim(school.Text);
ADOStoredProc1.Parameters.ParamByName('@speciality').Value := trim(sszy.Text);
if UpperCase(Sql) = UpperCase('insert') then //让存储过程进行插入操作!
ADOStoredProc1.Parameters.ParamByName('@insert_update').Value := 'insert';
if UpperCase(Sql) = UpperCase('update') then //让存储过程进行插入操作!
ADOStoredProc1.Parameters.ParamByName('@insert_update').Value := 'update';
try
ADOStoredProc1.ExecProc;
ShowMessage('保存记录成功!');
except
ShowMessage('由于出于异常,保存记录失败!');
end;
end;
 
要循环偶是不会了,不过有的很简单,比如
if marry.ItemIndex = 0 then //0表示未婚,1表示已婚
ADOStoredProc1.Parameters.ParamByName('@marriage').Value := '0'
else
ADOStoredProc1.Parameters.ParamByName('@marriage').Value := '1';
ADOStoredProc1.Parameters.ParamByName('@marriage').Value := IntToStr(marry.ItemIndex);


ADOStoredProc1.Parameters.ParamByName('@polity_id').Value := trim(copy(zzmm.Text, pos(' ', zzmm.Text) + 10, length(zzmm.Text) - (pos(' ', zzmm.Text) + 9)))
else
ADOStoredProc1.Parameters.ParamByName('@polity_id').Value := '';
这也格式都是一样的当然要用函数了
function GetValue(Str: string): string;
var
Idx: Integer;
begin
Result := '';
I := pos(' ', str);
if I = 0 then Exit;
Result := trim(copy(Str, I + 10, length(Str) - (I + 9))); //Result := trim(copy(Str, I + 10, length(Str)));
end;
ADOStoredProc1.Parameters.ParamByName('@polity_id').Value := GetValue(zzmm.Text);
 
谢谢楼上的朋友,再顶,希望有高手能用循环赋值解决繁锁的赋值工作!
 
对数据库的操作一般还是用数据敏感组件方便;
你这种情况可以将所有编辑框的名称取成和对应的参数名一样,如参数名为"@emp_id",则将对应编辑框取名为"emp_id",然后可用以下形式代码:
var
i: Integer;

for i := 0 to ComponentCount -1 do begin
if (Components is TEdit) and (ADOStoredProc1.Parameters.FindParam('@'+ TEdit(Components).Name) <> nil) then begin
(ADOStoredProc1.Parameters.ParamByName('@'+ TEdit(Components).Name).Value := Trim(TEdit(Components).Text);
end else if (Components is TComboBox) and (ADOStoredProc1.Parameters.FindParam('@'+ TComboBox(Components).Name) <> nil) then begin
(ADOStoredProc1.Parameters.ParamByName('@'+ TComboBox(Components).Name).Value := Trim(TComboBox(Components).Text);
end else if (Components is TDateTimePicker) and (ADOStoredProc1.Parameters.FindParam('@'+ TDateTimePicker(Components).Name) <> nil) then begin
(ADOStoredProc1.Parameters.ParamByName('@'+ TDateTimePicker(Components).Name).Value := FormatDateTime('yyyy-mm-dd', TDateTimePicker(Components).Date);
end else ....
end;
end;
此外,我不知道你为什么用 if pos(' ', zw.Text) > 0 这样的形式来判断? 用if Trim(zw.Text) <> ''不行吗?
 
可以这样写:
ADOStroedProc1.Parameters.ParamValue['@param1;@param2;@param3....'] := VarArrayOf([V1, V2, V3, ....]);
 
楼上的朋友,但里面的参数要进行条件判断的话,你怎样在数组里面赋值呢?希望能举一个简单的例子,谢谢!!!
 
后退
顶部