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
[44453] Re:Oracle의 Merge into 를 쓰면 Access violation...SQLORA8.DLL 에러 발생
박지훈.임프 [cbuilder] 2763 읽음    2006-04-12 05:40
merge into는 오라클 9i에서 추가된 기능으로 아는데... 먼저... C++빌더6는 오라클 8 버전까지만 지원합니다.
C++빌더6는 2002년 2월에 출시되었는데, 오라클 9i는 2001년 7월에 출시되었습니다. 9i가 출시되었을 때는 C++빌더6가
이미 개발 과정이었고 테스트에 필요한 시간이 모자랐죠.

게다가 SQLORA8.DLL에서 에러가 났다는 걸로 봐서는 DB 연결을 BDE로 하고 계신 거 같은데...
BDE는 C++빌더/델파이 6 버전에 번들된 BDE 5.2 버전을 마지막으로 업그레이드가 중단되고 dbExpress로 대체되었습니다.
그래서 지금 C++빌더나 델파이의 더 최신 버전을 구입하더라도 BDE는 그대로 5.2 버전이고, 따라서 오라클 8 버전까지만
지원합니다. 이건 볼랜드가 2002년에 공식적으로 발표한 내용입니다.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=news&no=93

다음 글도 참고하세요.
http://bdn.borland.com/article/0,1410,28699,00.html

그러니.. 오라클 9i 이상에서 추가된 기능을 사용하시려면 일단 BDE로는 전혀 불가능하고요.
dbExpress를 쓰거나, DOA같은 서드파티 컴포넌트를 써야 합니다.

그럼..


새내기 님이 쓰신 글 :
: ORACLE SERVER : ORACLE ENTERPRISE 10G
: CLEINT OS : WIN XP
: ORACLE CLIENT : ORACLE 10G CLIENT
: C++ BUILDER 6.0
: BDE : 5.2 VERSION
: BDE DRIVER 설정
:                NATIVE   :  DLL32 : SQLORA8.DLL
:                                 VENDOR INIT : OCI.DLL
:                                 SQLPASS THRU MODE : SHARED AUTOCOMMIT
:
: 테스 예제 소스 :
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:
:         pQry->SQL->Text ="MERGE INTO RSE_STATUS RS                                              \
:                           USING (SELECT :RSEID RSEID,                                           \
:                      to_date(:COLLECTDATE,'yyyymmddhh24miss') COLLECTDATE,   \
:                    :ANTENNACONNECT ANTENNACONNECT,                         \
:                    :DBVERSION DBVERSION,                                   \
:                    :FIRMWAREVERSION FIRMWAREVERSION,                       \
:                    :DOORSTATUS DOORSTATUS,                                 \
:                    :ANTENNAMODULESTATUS ANTENNAMODULESTATUS,               \
:                    :TXPOWERVALUE TXPOWERVALUE,                             \
:                    :RXSENSITIVITYVALUE RXSENSITIVITYVALUE                  \
:                           FROM DUAL                                                      \
:                                 ) R                                                             \
:                          ON (R.RSEID = RS.RSEID)                                                \
:                          WHEN MATCHED THEN                                                      \
:                                 update                                                          \
:                                 set RS.COLLECTDATE = R.COLLECTDATE,                             \
:                                     RS.ANTENNACONNECT = R.ANTENNACONNECT,                       \
:                                     RS.DBVERSION = R.DBVERSION,                                 \
:                                     RS.FIRMWAREVERSION = R.FIRMWAREVERSION,                     \
:                                     RS.DOORSTATUS = R.DOORSTATUS,                               \
:                                     RS.ANTENNAMODULESTATUS = R.ANTENNAMODULESTATUS,             \
:                                     RS.TXPOWERVALUE = R.TXPOWERVALUE,                           \
:                                     RS.RXSENSITIVITYVALUE = R.RXSENSITIVITYVALUE                \
:                         WHEN NOT MATCHED THEN                                                   \
:                                 INSERT VALUES (R.COLLECTDATE,                                   \
:                                                R.RSEID,                                         \
:                    R.ANTENNACONNECT,                                \
:                    R.DBVERSION,                                     \
:                    R.FIRMWAREVERSION,                               \
:                                                R.DOORSTATUS,                                    \
:                    R.ANTENNAMODULESTATUS,                           \
:                    R.TXPOWERVALUE,                                  \
:                    R.RXSENSITIVITYVALUE                             \
:                                               )";                                              
:
:         /*
:         pQry->ParamByName("RSEID")->AsString = "RSE0000000010";
:         pQry->ParamByName("COLLECTDATE")->AsString = "20050606010100";
:         pQry->ParamByName("ANTENNACONNECT")->AsString = "1";
:         pQry->ParamByName("DBVERSION")->AsString = "1";
:         pQry->ParamByName("FIRMWAREVERSION")->AsString = "1";
:         pQry->ParamByName("DOORSTATUS")->AsString = "1";
:         pQry->ParamByName("ANTENNAMODULESTATUS")->AsString = "1";
:         pQry->ParamByName("TXPOWERVALUE")->AsInteger = 1;
:         pQry->ParamByName("RXSENSITIVITYVALUE")->AsInteger = 1;
:         */
:         pQry->Params->Items[0]->AsString = "RSE0000000010";
:         pQry->Params->Items[1]->AsString = "20050606010100";
:         pQry->Params->Items[2]->AsString = "1";
:         pQry->Params->Items[3]->AsString = "1";
:         pQry->Params->Items[4]->AsString = "1";
:         pQry->Params->Items[5]->AsString = "1";
:         pQry->Params->Items[6]->AsString = "1";
:         pQry->Params->Items[7]->AsInteger = 1;
:         pQry->Params->Items[8]->AsInteger = 1;
:
:         /*
:         if(!pQry->Prepared){
:                 pQry->Close();
:                 pQry->Prepare();
:                 pQry->Open();
:                 pQry->ExecSQL();
:         }
:         */
:         pQry->Prepare() ;
:         pQry->ExecSQL();
: }
:
: 실행 결과 ERROR 내용
: Access violation at address 4D5F0385  in module 'SQLORA8.DLL'. Read of address 00000008. Process stopped...
:
: merge into 구문에서만 bind 변수를 쓰면 위와 같은 에러가 발생합니다.
: 일반 insert, update는 이상없이 실행이 됩니다.
: 또는 merge into 구문에서 bind 변수를 안 쓰면 이상없이 실행이 됩니다.
: 일반 insert, update에서는 bind 변수를 써도 이상이 없습니다.
:
: 고수분들의 많은 도움말 부탁드리겠습니다.

+ -

관련 글 리스트
44405 Oracle의 Merge into 를 쓰면 Access violation...SQLORA8.DLL 에러 발생 새내기 2462 2006/04/06
44453     Re:Oracle의 Merge into 를 쓰면 Access violation...SQLORA8.DLL 에러 발생 박지훈.임프 2763 2006/04/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.