오늘이 벌써 금요일..
나이를 먹을수록 시간이 점점 빨리가는 듯..
쩝.. 죄송(ㅋㅋ 아직 핏덩이랍니다.)
아직 초보라서리..
진도는 잘 안나가구 답답한 마음에.. <(ㅠㅛㅠ)>
각설하구 질문으로 들어가겠씀돠..
폼이 하나 있구여..
그 폼위 2개의 디비 그리드가 있답니다.
특정 버튼을 클릭하면..
왼쪽의 그리드에서 오른쪽의 그리드로..
값을 넘겨주게 되어있답니다.
디비로 저장이 되는거져..
Multi Select도 가능하게 말이져.
근데..
값이 없는 경우엔.. insert를
있는 경우엔 update를 하려 합니다.
var
i,j:integer;
begin
// Multi Select 대비
if DBGrid.SelectedRows.Count>0 then begin
with DBGrid.DataSource.DataSet do begin
for i := 0 to DBGrid.SelectedRows.Count-1 do begin
GotoBookmark(pointer(DBGrid.SelectedRows.Items[i]));
for j := 0 to FieldCount-2 do begin
s[i] := Fields[j].AsString;
end; { for end }
end; { for end }
end; { with end }
end; { if end }
위의 소스는 왼쪽에 있는 그리드에서 primery key 값을 가지구 있는
필드의 값들을 저장하는 부분입니다.
글구..
아래 소스는..
오른쪽 그리드의 primery key 값을 가지구 있는 필드값을
메모컴포넌트에 넣어서리..
왼쪽 그리드의 값들과 for을 사용해서 비교하는 함수의 소스죠..
for j := 0 to memo.Lines.Count -1 do begin
for i := 0 to DBGrid.SelectedRows.Count-1 do begin
if s[i] <> memo.Lines.Strings[j] then begin
result := true;
end { if end }
else begin
result := false;
end;
end; { for end }
end; { for end }
위와 같이 값을 비교해서..
boolean형태로 넘겨 줍니다.
그리곤..
db.StartTransaction;
try
// 2개의 그리드를 비교해서 값이 같은지 비교하는 함수
if check(DBGrid2) = true then begin
showmessage('insert');
grp_insert(Query1); // 그룹등록 (insert)
end { if end }
// 2개의 그리드를 비교해서 값이 같은지 비교하는 함수
else if check(DBGrid2) = false then begin
showmessage('update');
grp_update(Query1); // 그룹 업데이트 (update)
end; { if end }
db.commit;
showmessage('저장성공');
except
db.Rollback;
showmessage('저장실패');
end;
위와 같이 왼쪽의 디비 그리드에서
셀렉트한 값이 오른쪽 디비 그리드에
있으면..
update를
없으면
insert를 하려고 합니다.
그런데 안타깝게도
잘 안되는군여.
ㅠ.ㅠ
도와 주세여~~
먼저 입력을 한다...
만약에 있으면 중복오류코드를 리턴시키므로
다시 업데이트명령을 한다... 정상이면 그냥 끝나고...
무식하지만 제일 편한것같아서...
즐프하세요...