|
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 결과 리턴된 값이 맞는건지요?
부탁드립니다.
|