C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[42364] [질문] TADOQuery에서 ExecSQL() 의 리턴값에 대해서
unitas [kjlee1] 2469 읽음    2005-11-04 11:11
DB는 SQL2000 Server를 사용하구요.
ADO를 사용해서 프로시져를 통해서 DATA를 저장하고 있습니다.
TADOConnection와 TADOQuery를 사용하고 있습니다.

Client 프로그램 처음에 시작할때 db서버에서 필요한 data(IP, PORT등)들을 가져올때는
ADOQuery1->Open()을 통해서 가져옵니다.
소켓통신을 통해서 수신된 DATA는
ADOQuery1->ExecSQL()를 통새서 저장을 합니다.

이런식으로 프로그램을 처리해서 진행했었는데 DB서버 담당자가 어떠한 이유에
의해서 ADOQuery1->ExecSQL() 통해서 프로시져로 저장을 해도 ROLLBACK이 되서
DB에 저장이 안될수도 있다고 합니다.

그래서 프로시져에서
--- INSERT INTO ---  이런식으로 해서 마지막 부분에  RETURN @@ROWCOUNT 로 해서
한 라인 저장되면 1, 저장이 되지 않으면 0 값을 리턴한다고 했습니다.

HELP를 찾아보니   int __fastcall ExecSQL(void);       
TADOQuery로 ExecSQL() 를 실행하면 int 값을 반환하고 
RowsAffected 프로퍼티도 TADOQuery로 사용시 아래처럼 int값을 반환한다고 되어 있습니다.
__property int RowsAffected = {read=GetRowsAffected, nodefault};

영어가 짧아서 제대로 해석을 했는지 모르겠지만 TADOQuery로 ExecSQL()를 실행하면 마지막 바뀐 ROWCOUNT
수를 반환하고 RowsAffected 프로퍼티도 update, delete등 변화가 없으면 0, 정상적으로 처리되면 1을 리턴하는것
같은데 TEST 한 결과 정상적으로 저장이 되면  ExecSQL,  RowsAffected 2개 모두 -1 이 리턴되었습니다.
DB서버 담당자에게 인위적으로 ROLLBACK 해서 저장이 안되게 해달라고 한후 TEST 해보니  
ExecSQL,  RowsAffected 2개 모두 1 이 리턴되었습니다.

제 생각에는  정상적으로 저장이 되면 1, 아니면 0 이 리턴되어야 하는거 같은데 제가 함수를 잘못 이해한건지
아니면 TEST 결과 리턴된 값이 맞는건지요?

부탁드립니다.

+ -

관련 글 리스트
42364 [질문] TADOQuery에서 ExecSQL() 의 리턴값에 대해서 unitas 2469 2005/11/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.