updatesql을 쓰지않고 수정과 신규저장을 한번에 하고 싶은데
어떤 코딩이 필요할런지요?
update문으로 했다가 실패해서 무식하게 데이타를 삭제하고
새로 저장하는 방법을 썼습니다.
이렇게 저장버튼과 수정버튼을 따로 두지않고 한버튼으로 코딩하고 싶군요.
버튼을 클릭할때 기존자료와 비교해서 고쳐진 부분이 있다면 수정을 하고
전혀 새로운 자료면 저장을 하는 방법이 궁금합니다.
그리고 현재코딩으로 수정하면 mgu.itemindex가 0으로 수정되는군요.
mgu에서 엔터를 쳐주고나서 수정하면 제대로 수정이 되고요.
mgiho.text , mname.txt 는 edit콤포넌트이고 , mgu.text는 콤포박스입니다.
no2 와 cont는 중복되면 안되는 필드입니다.
설명이 좀 부족하다고 생각되시면 메일주세요!
procedure TFrmJohap.BtnSaveClick(Sender: TObject);
begin
with Query1 do
begin // 이름을 완벽하게 입력하였을 경우 SQL
Close;
Sql.clear;
Sql.add('select no2');
Sql.add(' from result');
Sql.add(' where no2 like :no2');
ParamByName('no2').AsString := Mgiho.Text + '%';
Open;
end;
if Query1.RecordCount > 0 then exit; // 찾아온 자료가 있으면 종료
if IDYES = Application.MessageBox('신규니까 저장하시겠습니까?','저장확인',
mb_YESNO + mb_ICONQUESTION) then //저장전 확인박스
begin
with Query1 do
begin
Close;
Sql.clear;
sql.add('insert into result');
sql.add(' (no2, no1, cont)');
sql.add(' values');
sql.add(' (:no2, :no1, :cont)');
ParamByName('no2').AsString := Trim(Mgiho.Text);
ParamByName('no1').AsString := IntToStr(Mgu.ItemIndex+1);
ParamByName('cont').AsString := Trim(Mname.Text);
ExecSql;
end;
// Messagedlg('저장되었습니다',mtinformation,[mbok],0);
Application.MessageBox('저장되었습니다!','저장확인',mb_Ok + mb_ICONINFORMATIO
N);
Mgu.text:='';
ScreenClear;
end;
end;
procedure TFrmJohap.BtnUpdateClick(Sender: TObject);
var
m_gubun:String[4];
mgu_index:String;
begin
if Mgiho.text <> '' then
if Mgu.text <> '' then
if Mname.text <> '' then
begin
with Query1 do // 명함 테이블에서 선택한 자료 삭제하기
begin
SQL.Clear;
SQL.Add('DELETE FROM Result');
SQL.Add(' WHERE No2 = :No2');
ParamByName('no2').AsString :=Mgiho.text;
ExecSQL;
SQL.Clear;
SQL.Add('DELETE FROM result');
SQL.Add(' WHERE cont = :cont');
ParamByName('cont').AsString :=Mname.text;
ExecSQL;
SQL.Clear;
SQL.Add('DELETE FROM result');
SQL.Add(' WHERE no1 = :no1');
ParamByName('no1').AsString :=Mgu.text;
ExecSQL;
begin
with Query1 do
Close;
Sql.clear;
sql.add('insert into result');
sql.add(' (no2, no1, cont)');
sql.add(' values');
sql.add(' (:no2, :no1, :cont)');
ParamByName('no2').AsString := Trim(Mgiho.Text);
ParamByName('no1').AsString := IntToStr(Mgu.ItemIndex+1);
ParamByName('cont').AsString := Trim(Mname.Text);
ExecSql;
begin
mgu_index:=mgu.text;
if mgu_index='조교' then
begin
mgu.ItemIndex:=0;
end;
if mgu_index='교수' then
begin
mgu.ItemIndex:=1;
end;
if mgu_index='학생' then
begin
mgu.ItemIndex:=2;
end;
end;
Application.MessageBox('수정되었습니다!','수정확인',mb_Ok + mb_ICONINFORMATION);
Mgu.text:='';
ScreenClear;
end;
end;
end;
end;
end;
아래 코딩은 제가 update구문으로 만들었다가 실패한것입니다.
{ with Query1 do
begin // 이름을 완벽하게 입력하였을 경우 SQL
Close;
Sql.clear;
Sql.add('select no2');
Sql.add(' from result');
Sql.add(' where no2 like :no2');
ParamByName('no2').AsString := Mgiho.Text + '%';
Open;
end;
if IDYES = Application.MessageBox('수정하시겠습니까?','수정확인',
mb_YESNO + mb_ICONQUESTION) then //저장전 확인박스
begin
with Query1 do
begin
Close;
Sql.clear;
sql.add('UPDATE result');
sql.add('SET(no2=:no2, no1=:no1, cont=:cont)');
sql.add('Where{no2=:no2)');
ParamByName('no2').AsString := Trim(Mgiho.Text);
ParamByName('no1').AsString := IntToStr(Mgu.ItemIndex+1);
ParamByName('cont').AsString := Trim(Mname.Text);
ExecSql;
end;
Application.MessageBox('수정되었습니다!','수정확인',mb_Ok + mb_ICONINFORMATION);
Mgu.text:='';
ScreenClear;}
|