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

델파이 Q&A
Delphi Programming Q&A
[10530] Re:[질문]프로시저를 사용시 에라입니다. 부탁합니다.
박지훈.임프 [cbuilder] 1456 읽음    2006-02-28 13:44
질문은 한번에 하나씩 해주시면 좋겠네요. 보통 답변을 쓰시는 분들은 남는 시간에 소일거리삼아 하는데...
여러개가 엮여 있으면 일단 내용을 보기 전부터 모양새가 부담스러워서 그냥 넘어가기 쉽답니다. ^^

첫번째 질문은...
다른 부분은 별 문제가 없는 거 같은데, Params.Create; 부분이 수상합니다.
Params는 TSQLQuery나 TSQLStoredProc 컴포넌트가 이미 기본적으로 생성시켜놓은 상태이므로 생성자를 여기서
호출할 이유가 없겠고, 게다가 여기서 생성자를 호출하면 예상치못한 희한한 에러가 발생할 수 있습니다.

아마도 TSQLStoredProc에서 읽으려고 하는 Params 대신 허공을 떠도는 처녀귀신 Params 객체가 만들어지고 거기에
파라미터가 생성될 겁니다. 그러니 TSQLStoredProc에는 파라미터가 하나도 안들어가있는 상태가 될 듯.
index out of bounds 예외가 발생한 것은 그 때문인 것 같습니다.
그러니 해결책은, Params.Create; 라인만 지워버리면 될 듯.

두번째 질문은...
P_a_DataF.Q1이 아마도 TSQLQuery인가본데요. TSQLQuery와 같은 쿼리 전용 컴포넌트에서는 스토어드 프로시저를
실행할 수는 있어도 출력 파라미터 값을 받아올 수는 없습니다. 그렇기 때문에 TSQLStoredProc 같은 스토어드 프로시저
전용 컴포넌트가 필요한 거죠.

그럼...


궁금이 님이 쓰신 글 :
: 델7입니다.
: 디비는 mssql
: 컴포넌트는 DbExPress입니다.
: AcceptDate와 AcceptGubun은 input변수이고
: AcceptSeq는 output데이터 입니다.
:
: 질문1
: 그런데 소스1를 보면 params.count보면 3이 제대로 나오는데 왜 list indexout of bounds인지요
:
: 질문2
: 그런데 소스2를 보면 Query를 이용하여 프로시저를 사용하는데 에라는 없는데 왜
: AcceptSeq의 변수에 값이 안넘어 올까요 궁금합니다.
: 쿼리분석기에서
: exec sp_er_acceptNo '20060222','E',''
: 실행하면 값을 가져옵니다 00008이런식으로
:
: 그럼 수고하세요
:
: 소소1
:    With SQLStoredProc1 Do begin
:           Close;
:           StoredProcName:='sp_er_AcceptNo';
:           Params.Create;
:           params.CreateParam(FtString  ,'AcceptDate' , ptInput ).AsString:='20060221';
:           params.CreateParam(FtString  ,'AcceptGubun', ptInput ).AsString:='E'   ;
:           params.CreateParam(FtString  ,'AcceptSeq'  , ptOutput).AsString:=Acc_Code;
:           ExecProc;          //여기에서 에라입니다. List index out of bounds에라입니다.
:    End;
:
: 소소2
:    With P_a_DataF.Q1 do begin
:           Close;
:           SQL.Clear;
:           SQL.Add('Exec sp_er_AcceptNo :Date, :Gubun,:Seq ');
:           ParamByName('Date' ).AsString:='20060221';
:           ParamByName('Gubun').AsString:='E'       ;
:           ParamByName('Seq'  ).AsString:=''        ;
:           Try
:             ExecSQL;
:           Except
:              on E: EDBEngineError  do begin
:                  ShowMessage(IntToStr((E as EDBEngineError).Errors[0].ErrorCode)+':'+E.Message);
:                  Exit;
:              end;
:           End;
:    End;

+ -

관련 글 리스트
10518 [질문]프로시저를 사용시 에라입니다. 부탁합니다. 궁금이 1264 2006/02/24
10530     Re:[질문]프로시저를 사용시 에라입니다. 부탁합니다. 박지훈.임프 1456 2006/02/28
10532         Re:Re:[질문]프로시저를 사용시 에라입니다. 부탁합니다. 임기섭 1386 2006/02/28
10533             Re:Re:Re:[질문]프로시저를 사용시 에라입니다. 부탁합니다. 박지훈.임프 1269 2006/02/28
10534                 Re:Re:Re:Re:[질문]프로시저를 사용시 에라입니다. 부탁합니다. 임기섭 1424 2006/02/28
10535                     Re:Re:Re:Re:Re:[질문]프로시저를 사용시 에라입니다. 부탁합니다. 박지훈.임프 2171 2006/03/01
10536                         Re:Re:Re:Re:Re:Re:[질문]프로시저를 사용시 에라입니다. 부탁합니다. 임기섭 1253 2006/03/01
10546                             자답입니다. 임기섭 1970 2006/03/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.