복잡하고, 어려운게 에러가 나면 이해나하겠는데,,
아주 간단한것 같은데 안되니..
아직도 내공이 초짜이다 보니...환장하겠습니다...
TabSheet(tcBookStore)내에서...수정탭(TabIndex=2)을 눌렀을때
왜 데이터가 수정이 안되지요??
입력탭에서 입력하는 것은 잘됩니다만,,,
아래처럼 수정할려면
Edit;
FieldbyName('....
Post;
하면 되는 거 아닌가요?
실행해보면,
ShowMessage('수정작업이 성공적으로 완료되었습니다');은 실행되는데,
왜 데이터는 업데이트가 안되는건지...
아무리 봐도 원인을 알 수가 없어서..
도움을 청합니다..
<!--CodeS-->
procedure TfrmBookStore.btnSaveClick(Sender: TObject);
var
BSID: Integer;
begin
case tcBookStore.TabIndex of
1:begin // 입력
if(edtBSContact.Text = '') and (edtBSName.Text ='') then begin
ShowMessage('담당자와 서점명을 반드시 입력해야 합니다');
exit;
end;
if not tblBookStore.Active then tblBookStore.Open;
if tblBookStore.EOF then BSID := 1
else begin
tblBookStore.Last;
BSID := tblBookStore.FieldByName('BSID').AsInteger + 1;
end;
try
with tblBookStore do begin
Insert;
FieldByName('BSID').AsInteger := BSID;
FieldByName('BSName').AsString := edtBSName.Text;
FieldByName('BSContact').AsString := edtBSContact.Text;
FieldByName('BSAddr1').AsString := edtBSAddr1.Text;
FieldByName('BSAddr2').AsString := edtBSAddr2.Text;
FieldByName('BSPost').AsString := Copy(meBSPost.Text,1,3)+Copy(meBSPost.Text,5,3);
FieldByName('BSTel').AsString := edtBSTel.Text;
FieldByName('BSEmail').AsString := edtBSEmail.Text;
FieldByName('Etc').AsString := memEtc.Text;
Post;
end;//with
ShowMessage('입력작업이 성공적으로 완료되었습니다');
tblBookStore.Refresh; // 테이블의 Refresh메쏘드는 PK칼럼이 있는 테이블이어야 함.
except
ShowMessage('입력작업 중 에러 발생!!');
end;
end;
2:begin // 수정
try
with tblBookStore do begin
Edit;
FieldByName('BSID').AsInteger := StrToInt(edtBSID.text);
FieldByName('BSName').AsString := edtBSName.Text;
FieldByName('BSContact').AsString := edtBSContact.Text;
FieldByName('BSAddr1').AsString := edtBSAddr1.Text;
FieldByName('BSAddr2').AsString := edtBSAddr2.Text;
FieldByName('BSPost').AsString := Copy(meBSPost.Text,1,3)+Copy(meBSPost.Text,5,3);
FieldByName('BSTel').AsString := edtBSTel.Text;
FieldByName('BSEmail').AsString := edtBSEmail.Text;
FieldByName('Etc').AsString := memEtc.Text;
Post;
end;
ShowMessage('수정작업이 성공적으로 완료되었습니다');
tblBookStore.Refresh;
except on E: EDatabaseError do begin
ShowMessage('수정작업 중 에러 발생!'+#13#10+E.Message);
end;
end;
end;
end; //case
end;
<!--CodeE-->
하여튼,,사후결과로 나타난 것으로는..
실제 데이타베이스가 인터베이스 7.1이고,,
이를 델파이에서 BDE의 TTable컴포넌트를 사용해서 하니...
레코드삽입과..수정이 잘 안된다는 것입니다...
Post;다음에..ApplyUPdates를 해도 안되고.
CachedUPdates속성을 True로 해도..잘 안되고..
해서..
원래의 인터베이스용 컴포인.. 인터베이스 컴포넌트를 연결해서..
TIBDatabase와 TIBTransaction, TIBTable을 해서 하니 제대로 되는군요...
하여튼 이거하느라 하루삽질하고 느낀것은...
"삽질도 센스가 필요하다"인 것입니다.
원래되는것인데,,제가 제대로못한것인지는 몰라도..
원래의 Interbase의 연결을 위해 델파이이에서 Interbase컴포넌트를 제공하는데,
구태여..원래의 하던식대로...BDE를 고집할 필요는 없었는데...말입니다..
과감하게..새로운것을 받아들여야 하는데,,
하던식대로 BDE고집하다...책보기 삽질로 .Interbase를 사용하면 되는 것ㅇ르....
쩝...
"삽질도 돌아봐야할 필요가 있다"....