Q&A

  • 한번 보세요
MS_SQL 6.5과 트랜잭션하는방법입니다........책에 나오는것과는 색달라서 아는 사람은 해석을 부탁드립니다. 빠르다고 하는데....





if AEFlag then

begin

With TmpSQL do

begin

Close;

SQL.Clear;

SQL.Add(' BEGIN TRANSACTION AppendComp '); //해석 필요

SQL.Add(' DECLARE @UCode Char(6),@TmpInt Int,@TmpStr Char(3) '); //해석 필요



SQL.Add(' SET ROWCOUNT 1 '); //해석 필요



SQL.Add(' SELECT @TmpInt = ISNULL(CONVERT(Int,SUBSTRING(BCode,4,3)),0) +1 FROM Comp ');//해석 필요



SQL.Add(' WHERE SUBSTRING(BCode,1,2) = '''+EditBCode.Text+''' ');

SQL.Add(' Order By BCode DESC ');

SQL.Add(' SET ROWCOUNT 0 ');

SQL.Add(' IF @TmpInt IS NULL '); ////해석 필요



SQL.Add(' SELECT @TmpInt = 1 '); //해석 필요



SQL.Add(' Exec MakeInt2Str @TmpInt,3,@TmpStr OUTPUT '); //해석 필요



SQL.Add(' SELECT @UCode = '''+EditBCode.Text+'-'+'''+@TmpStr '); //해석 필요



-----------------------------------------------------------------------------------------

SQL.Add(' INSERT INTO Comp (BCode,OrderInt,IOFlag,BName,FullName,BNum,Chief,Agency,Addr,Kubun,');

SQL.Add(' Manager,Post,Subject,Chapter,Tel,Fax,InDate,UserID,Bigos )');

SQL.Add(' VALUES (@UCode,@TmpInt,:Mode,:sBName,:sLongName,:sBNum,:sChief,:sAgency,:sAddr,0,:sManager,');

SQL.Add(' :sPost,:sSubject,:sChapter,:sTel,:sFax,:sInDate,:sUserID,:sBigos )');

SQL.Add(' COMMIT TRANSACTION ');

ParamByName('Mode').AsString := 'I';

ParamByName('sChief').AsString := EditChief.Text;

ParamByName('sAddr').AsString := EditAddr.Text;

ParamByName('sSubject').AsString := EditSuject.Text;

ParamByName('sChapter').AsString := EditChapter.Text;

ParamByName('sTel').AsString := EditTel.Text;

ParamByName('sFax').AsString := EditFax.Text;

ParamByName('sBName').AsString := EditBName.Text;

ParamByName('sLongName').AsString := EditLongName.Text;

ParamByName('sAgency').AsString := EditAgency.Text;

ParamByName('sManager').AsString := EditManager.Text;

ParamByName('sBNum').AsString := EditBNum.Text;

ParamByName('sPost').AsString := EditPost.Text;

ParamByName('sInDate').AsDateTime := StrToDate(MEditDate.Text);

ParamByName('sUserID').AsString := NameEdit.Text;

ParamByName('sBigos').AsString := EditBigos.Text;

ExecSQL;

end;

end;





이런 방법도 있으니 아시는 분들 설명좀 해주세요...........

1  COMMENTS
  • Profile
    tommy 2000.05.13 06:55
    초보2 wrote:

    > 스토어드 프로시져 같은데요....

    > MS_SQL 프로시져는 써본적이 없어서 맞는지 모르겠지만..

    > 한번 해석해보겠습니다.

    >

    > tommy wrote:

    > > MS_SQL 6.5과 트랜잭션하는방법입니다........책에 나오는것과는 색달라서 아는 사람은 해석을 부탁드립니다. 빠르다고 하는데....

    > >

    > >

    > > if AEFlag then

    > > begin

    > > With TmpSQL do

    > > begin

    > > Close;

    > > SQL.Clear;

    > > SQL.Add(' BEGIN TRANSACTION AppendComp '); //해석 필요

    >

    > 트렌젝션을 시작합니다. AppendComp 는 옵션 같군요...

    > 프로시져가 실패하면 Rollback하기 위해서 입니다.

    >

    > > SQL.Add(' DECLARE @UCode Char(6),@TmpInt Int,@TmpStr Char(3) '); //해석 필요

    > 프로시져에서 사용할 변수를 정합니다.

    > 변수앞에는 '@' 이 붙습니다.

    >

    > >

    > > SQL.Add(' SET ROWCOUNT 1 '); //해석 필요

    >

    > RowCount를 1로 설정해서 다음 SELECT 문장에서 한Row만 Select 합니다.

    >

    > >

    > > SQL.Add(' SELECT @TmpInt = ISNULL(CONVERT(Int,SUBSTRING(BCode,4,3)),0) +1 FROM Comp ');//해석 필요

    > >

    > > SQL.Add(' WHERE SUBSTRING(BCode,1,2) = '''+EditBCode.Text+''' ');

    > > SQL.Add(' Order By BCode DESC ');

    >

    > Comp 테이블을 조회해서 결과를 조작한후 TmpInt 변수에 담습니다.

    >

    > > SQL.Add(' SET ROWCOUNT 0 ');

    >

    > ROWCOUNT 설정을 해제합니다.

    >

    > > SQL.Add(' IF @TmpInt IS NULL '); ////해석 필요

    >

    > 만약 TmpInt 변수가 Null 이면

    >

    > > SQL.Add(' SELECT @TmpInt = 1 '); //해석 필요

    >

    > TmpInt 변수에 1을 담습니다.

    > >

    > > SQL.Add(' Exec MakeInt2Str @TmpInt,3,@TmpStr OUTPUT '); //해석 필요

    >

    > MakeInt2Str 은 아마도 다른 스토어드 프로시져같네요...

    > 이 프로시져에 @TmpInt,3,@TmpStr 을 인수로 넘겼습니다.

    >

    > > SQL.Add(' SELECT @UCode = '''+EditBCode.Text+'-'+'''+@TmpStr '); //해석 필요

    >

    > 마찮가지로 UCode 변수에 값을 대입하는 문장입니다.

    >

    > >

    > > -----------------------------------------------------------------------------------------

    > > SQL.Add(' INSERT INTO Comp (BCode,OrderInt,IOFlag,BName,FullName,BNum,Chief,Agency,Addr,Kubun,');

    > > SQL.Add(' Manager,Post,Subject,Chapter,Tel,Fax,InDate,UserID,Bigos )');

    > > SQL.Add(' VALUES (@UCode,@TmpInt,:Mode,:sBName,:sLongName,:sBNum,:sChief,:sAgency,:sAddr,0,:sManager,');

    > > SQL.Add(' :sPost,:sSubject,:sChapter,:sTel,:sFax,:sInDate,:sUserID,:sBigos )');

    > > SQL.Add(' COMMIT TRANSACTION ');

    >

    > > ParamByName('Mode').AsString := 'I';

    > > ParamByName('sChief').AsString := EditChief.Text;

    > > ParamByName('sAddr').AsString := EditAddr.Text;

    > > ParamByName('sSubject').AsString := EditSuject.Text;

    > > ParamByName('sChapter').AsString := EditChapter.Text;

    > > ParamByName('sTel').AsString := EditTel.Text;

    > > ParamByName('sFax').AsString := EditFax.Text;

    > > ParamByName('sBName').AsString := EditBName.Text;

    > > ParamByName('sLongName').AsString := EditLongName.Text;

    > > ParamByName('sAgency').AsString := EditAgency.Text;

    > > ParamByName('sManager').AsString := EditManager.Text;

    > > ParamByName('sBNum').AsString := EditBNum.Text;

    > > ParamByName('sPost').AsString := EditPost.Text;

    > > ParamByName('sInDate').AsDateTime := StrToDate(MEditDate.Text);

    > > ParamByName('sUserID').AsString := NameEdit.Text;

    > > ParamByName('sBigos').AsString := EditBigos.Text;

    > > ExecSQL;

    > > end;

    > > end;

    >

    > 위의 ParamByName들은 스토어드 프로시져에 인수를 넘겨주는 문장입니다.

    >

    >

    >

    > 맞게 해석했나 모르겠네요...

    >

    > 좋은 하루되세요~



    -------------------------------------------->

    제가 아직 프로그래밍 초보라 DB의 고도의 테크닉을 잘 모릅니다. 아무쪼록 이런 답변에 대해서 감사드립니다.

    좋은 내용있으면 또 글을 올리겠습니다........



    답변에 감사드리며, 좋은 하루