Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[12119] [질문] DB Grid에서 선택된 로우만 저장이 안됩니다
허지훈 [] 1886 읽음    2008-07-08 15:21
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;

+ -

관련 글 리스트
12119 [질문] DB Grid에서 선택된 로우만 저장이 안됩니다 허지훈 1886 2008/07/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.