db에 없는 칼럼(SelectCd)을 하나 만들어서 선택 한 것('Y')만 선별해서 db에 저장하고 싶은데요...
만약 데이터 값이 5개 나왔는데 그중에서 2개만 선택해서 저장할려는데 안되서
디버깅해보니까 for 문 돌릴때 next 하니까 선택한 로우의 'Y'가 사라져 버리네요...
저장할려는거는 A_PROC_END_DTE(오늘날짜)와 A_PROC_END_YN('Y')입니다
소스 내용이 길어서 중요한 로직만 적을께요..
고견 부탁드립니다...
CDSet_Admsum : 마스터 dataset
CDSet_MtrQry : 디테일 dataset
CDSet_Sum : 디테일 dataset (CDSet_MtrQry와 같은거지만 CDSet_Admsum의 SelectCd가 'Y'일때 AppendData)
* dbgrid의 EditButtonClick 이벤트
procedure DBGrid2EditButtonClick(Sender: TObject);
begin
with CDSet_MtrQry do
begin
Edit;
if FieldByName('SelectCd').Value = '' then
begin
FieldByName('SelectCd').Value := 'Y';
FieldByName('A_PROC_END_DTE').Value := FormatDateTime('YYYY-MM-DD', dtp_Dte.Date);
FieldByName('A_PROC_END_YN').Value := 'Y'; end
else
begin
FieldByName('SelectCd').Value := '';
FieldByName('A_PROC_END_DTE').Value := '';
FieldByName('A_PROC_END_YN').Value := ''; end;
Post;
end;
end;
* 저장 버튼
procedure BitBtn5Click(Sender: TObject);
var
PROC_END_DTE, PROC_END_YN, R_SelectCd : Variant;
i : integer;
Bbt_AssembleClick(Sender); // 선택 모으기 루틴
with CDSet_Sum do
begin
First;
R_SelectCd := VarArrayCreate([0, RecordCount -1], VarOleStr);
PROC_END_DTE := VarArrayCreate([0, RecordCount -1], VarOleStr);
PROC_END_YN := VarArrayCreate([0, RecordCount -1], VarOleStr);
for i := 0 to RecordCount -1 do
begin
if FieldByName('SelectCd').AsString = 'Y' then
begin
PROC_END_DTE[i] := FieldByName('A_PROC_END_DTE').AsString;
PROC_END_YN[i] := FieldByName('A_PROC_END_YN').AsString;
end;
end;
* 선택모으기 루틴
procedure Bbt_AssembleClick(Sender: TObject);
begin
// 선택에서 'Y'체크한 구매요구번호(사용부서)의 data를 하나로 모으는 루틴
with CDSet_Sum do
begin
Active := False;
with EP_Sum.SelectRPC.Params do
begin
ParamByName('I_BUY_CLS').value := ' ';
ParamByName('I_DEPT_CD').value := ' ';
ParamByName('I_YR').value := ' ';
ParamByName('I_SEQ').value := ' ';
end;
Active := True;
end;
with CDSet_AdmSum do
begin
First;
while not EOF do
begin
if (FieldByName('SelectCd').AsString = 'Y') then
begin
CDSet_Sum.AppendData(CDSet_MtrQry.Data,True);
end;
Next;
end;
with CDSet_Sum do
begin
First;
while not EOF do
begin
Edit;
FieldByName('A_PROC_END_DTE').Value := FormatDateTime('YYYY-MM-DD', dtp_Dte.Date); // 처리완료일자 셋팅
FieldByName('A_PROC_END_YN').Value := 'Y' ; // 처리완료여부 셋팅
Next;
end;
end;
end;
end;