자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
BDE -> DBExpress 변경중 에러
2012.03.22 02:43
안녕하세요.
현재 저희는 64비트 환경으로 이전을 위해 기존 BDE로 만들어진 프로그램을 DBExpress로 변경하고 있습니다.
스토드프로시져에서 계속된 에러로 질문 드립니다.
개발환경
Delphi 버전 : Delphi7
DB : MS-SQL 2000
TSQLStoredProc을 사용할때 아래와 같이 사용 하였는데
'List index out of bounds(0)' 에러가 계속 발생합니다.
CreateParam 후 Params.Count 로 확인하면 파라메터가 1개 있는 것으로 나오는데 계속 에러가 나네요.
왜 그런 것일 까요?
SQLStoredProc1.StoredProcName := 'sp_test';
SQLStoredProc1.Params.Clear;
SQLStoredProc1.Params.CreateParam(ftInteger, '@param' ,ptInput);
SQLStoredProc1.ParamByName('@param').AsInteger := 100;
SQLStoredProc1.ExecProc;
서버측 스토드프로시져에는 단순히 파라메터만 받고 아무 동작을 안하게 되어 있습니다.
(원래는 받은 파라메터로 연산후 output도 피드백해야 하는데 일단 input도 안되는 상황이라
가장 단순한게 만들어 놨습니다. 물론 BDE로는 이상없이 호출이 됩니다.)
댓글 2
-
박병일
2012.03.22 19:14
-
호달
2012.03.22 20:16
답변 감사합니다.
가르쳐 주신 방법으로 해 보았습니다. 동일한 에러가 나네요
SQLStoredProc1.StoredProcName := 'sp_test';SQLStoredProc1.Prepared := true; //ShowMessage(IntToStr(SQLStoredProc1.Params.Count)); //SQLStoredProc1.ParamByName('@param').AsInteger := 100;SQLStoredProc1.Params[0].AsInteger := 100;SQLStoredProc1.ExecProc;------------------------------------------------
SQLStoredProc1.Params[0].AsInteger := 100; 하면 List index out of bounds(0) 에러가 나옵니다.
SQLStoredProc1.ParamByName('@param').AsInteger := 100; 하면 @param 파라메터를 찾을 수 없다고 나옵니다.
SQLStoredProc1.Prepared := true 직후에 (D7 에는 Prepared 로 되어 있네요)Params.Count를 확인하니 0 이 나옵니다.말씀하신 것 처럼 파라메터를 제대로 못 받아 오는것 같은데 뭘 확인 해봐야 할지 모르겠네요.
SQLConnection1 -> SQLStoredProc1 이렇게 연결 한 상태인데요(SQLQuery 로는 DB 접속가능 한 것으로 봐서는
SQLStoredProc1 가 문제인 것 같네요.)디자인 타임에 SQLStoredProc1의 StoredProcName 에 프로시져를 입력하면 Params도 로딩하나요?저는 디자인시에도 안되고 있습니다.
무엇을 더 확인해 봐야 할 까요?...
BDE -> DBExpress 변경중 에러
2012.03.22 02:43
안녕하세요.
현재 저희는 64비트 환경으로 이전을 위해 기존 BDE로 만들어진 프로그램을 DBExpress로 변경하고 있습니다.
스토드프로시져에서 계속된 에러로 질문 드립니다.
개발환경
Delphi 버전 : Delphi7
DB : MS-SQL 2000
TSQLStoredProc을 사용할때 아래와 같이 사용 하였는데
'List index out of bounds(0)' 에러가 계속 발생합니다.
CreateParam 후 Params.Count 로 확인하면 파라메터가 1개 있는 것으로 나오는데 계속 에러가 나네요.
왜 그런 것일 까요?
SQLStoredProc1.StoredProcName := 'sp_test';
SQLStoredProc1.Params.Clear;
SQLStoredProc1.Params.CreateParam(ftInteger, '@param' ,ptInput);
SQLStoredProc1.ParamByName('@param').AsInteger := 100;
SQLStoredProc1.ExecProc;
서버측 스토드프로시져에는 단순히 파라메터만 받고 아무 동작을 안하게 되어 있습니다.
(원래는 받은 파라메터로 연산후 output도 피드백해야 하는데 일단 input도 안되는 상황이라
가장 단순한게 만들어 놨습니다. 물론 BDE로는 이상없이 호출이 됩니다.)
댓글 2
-
박병일
2012.03.22 19:14
-
호달
2012.03.22 20:16
답변 감사합니다.가르쳐 주신 방법으로 해 보았습니다. 동일한 에러가 나네요
SQLStoredProc1.StoredProcName := 'sp_test';SQLStoredProc1.Prepared := true;//ShowMessage(IntToStr(SQLStoredProc1.Params.Count));//SQLStoredProc1.ParamByName('@param').AsInteger := 100;SQLStoredProc1.Params[0].AsInteger := 100;SQLStoredProc1.ExecProc;------------------------------------------------SQLStoredProc1.Params[0].AsInteger := 100; 하면 List index out of bounds(0) 에러가 나옵니다.SQLStoredProc1.ParamByName('@param').AsInteger := 100; 하면 @param 파라메터를 찾을 수 없다고 나옵니다.SQLStoredProc1.Prepared := true 직후에 (D7 에는 Prepared 로 되어 있네요)Params.Count를 확인하니 0 이 나옵니다.말씀하신 것 처럼 파라메터를 제대로 못 받아 오는것 같은데 뭘 확인 해봐야 할지 모르겠네요.SQLConnection1 -> SQLStoredProc1 이렇게 연결 한 상태인데요(SQLQuery 로는 DB 접속가능 한 것으로 봐서는 SQLStoredProc1 가 문제인 것 같네요.)디자인 타임에 SQLStoredProc1의 StoredProcName 에 프로시져를 입력하면 Params도 로딩하나요?저는 디자인시에도 안되고 있습니다.무엇을 더 확인해 봐야 할 까요?...
정상적인 경우라면 Prepare 하는 순간 서버에 접속해서 Params 리스트를 자동으로 채워 줍니다.
아래와 같이 테스트 해보시기 바랍니다.
SQLStoredProc1.Prepare:=True;
SQLStoredProc1.Params[1].AsString := Edit1.Text;
SQLStoredProc1.Params[2].AsString := Edit2.Text;
SQLStoredProc1.ExecProc;
Edit3.Text := SQLStoredProc1.ParamByNam('@RETURN_VALUE').AsString;