계속 걸리는게 많아 잘안되서 그러는데요..
두가지가 궁금해서요..
1 . db 그리드에서 선택이라는 필드(non-db)가 있을때
클릭하면 Y로 바뀌고 다시 클릭하면 Y가 아닌 원상태로 돌아갑니다...
마지막은 Y로 체크된 하나 가지고 저장도 하는 로직인데요...
Y로 선택된 행이 두개 있으면 에러 메시지가 나오게끔 하고 싶거든요...
무조건 Y선택은 하나만 되게끔요...
아래 이벤트는 한번 클릭하면 Y로 바뀌고 다시 클릭하면 Y가 아닌 원상태로 돌아가는 이벤트입니다..
procedure DBGrid1EditButtonClick(Sender: TObject);
begin
with CDSet_Sum do
begin
Edit;
if FieldByName('SelectCd').Value = '' then
begin
FieldByName('SelectCd').Value := 'Y';
end
else
begin
FieldByName('SelectCd').Value := '';
end;
Post;
end;
end;
2. db그리드 상에서 CDSet_MtrQry의 SelectCd가 'Y' 인 경우만 선택해서 저장하고 싶어요...
CDSet_MtrQry : 원본 데이터 셋
CDSet_Sum : 원본 데이터에서 선택한 행만 저장
선택모으기 클릭이벤트에서 아래와 같이 작성했는데요..
with CDSet_MtrQry do
begin
First;
while not EOF do
begin
if ( CDSet_MtrQry.FieldByName('SelectCd').Value = 'Y') then
begin
CDSet_Sum.AppendData(CDSet_MtrQry.Data,True);
Edit;
Post;
end;
Next;
end;
end;
만약 결과값이 CDSet_MtrQry 가 두개의 행이면 그중에서 한개만 선택해서
한개만 저장하고 싶은데요...
결과를 보면 한개가 아니고 두개가 INSERT되거든요...
선택한 한개만 저장시킬려면 어떻게 하면 될까요???
물론 저장로직은 여기서 나온 행대로 그대로 저장하니까
여기에서부터 결과값이 한개가 나와야 될테데 두개니까 안되는거 같아서요..
고견 부탁드립니다...
가령 선택했을때 루핑을 돌리던가 locate로 찾든가, 어떤 변수에 선택햇다는 값을 담아놓는다든가 등등..
지금 상태에서 가장수정안할수 있는 방법은 저장시 처리하면 될것 같네요.
var
b_select : Boolean;
begin
b_select := False;
with CDSet_MtrQry do
begin
First;
while not EOF do
begin
if ( CDSet_MtrQry.FieldByName('SelectCd').Value = 'Y') then
begin
if b_select then
begin
showmessage('y는 하나만 선택');
break;
end else begin
b_select := True;
CDSet_Sum.AppendData(CDSet_MtrQry.Data,True);
Edit;
Post;
end;
end;
Next;
end;
end;