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;
이런 방법도 있으니 아시는 분들 설명좀 해주세요...........
> 스토어드 프로시져 같은데요....
> 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의 고도의 테크닉을 잘 모릅니다. 아무쪼록 이런 답변에 대해서 감사드립니다.
좋은 내용있으면 또 글을 올리겠습니다........
답변에 감사드리며, 좋은 하루