자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi FDStoredProc 파라메터 오류 문의
2020.06.11 16:21
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
개발툴은 10.3 이며, DataBase는 Microsoft SQL Server 2017입니다.
Stored Procedure의 구조는 아래와 같습니다.
CREATE PROCEDURE DBO.USP_SET_TEXT
(
@REMK_LN NVARCHAR(MAX),
@RETN_ERROR NVARCHAR(500) OUTPUT
)
WITH EXECUTE AS CALLER
AS
BEGIN
SET NOCOUNT ON
SET @RETN_ERROR = ''
SET @RETN_ERROR = '오류 반환 테스트 '
RETURN -1;
END
---
델파이 소스는 아래과 같습니다.
if Not FDConnection.Connected then FDConnection.Connected := True;
try
with FDStoredProc do
begin
Close;
StoredProcName := 'USP_SET_TEXT';
Params.Clear;
Params.CreateParam(ftWideMemo,'@REMK_LN',ptInput);
Params.CreateParam(ftWideString,'RETN_ERROR',ptOutput);
Params.CreateParam(ftInteger,'RETURN_VALUE',ptResult);
Params.ParamByName('@REMK_LN').AsWideMemo := '비고';
//위 라인을 활성화 할 경우 오류의 반환값(RETN_ERROR)은 공백으로 반환하며,
위 라인을 주석 처리할 경우는 정상적으로 반환합니다.
ExecProc;
if ParamByName('@RETURN_VALUE').AsInteger = 0 then
begin
ShowMessage('정상');
end
else
begin
ShowMessage(ParamByName('@RETN_ERROR').AsString);
end;
end;
except
......
end;
-- IDE 상에서 테스트할 경우에도 @REMK_LN 파라메터에 값이 정의되면 공백으로 반환되고, 값이 정의되지 않으면
정상 반환됩니다.
댓글 1
-
arabianwine
2020.06.15 09:52
Delphi FDStoredProc 파라메터 오류 문의
2020.06.11 16:21
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
개발툴은 10.3 이며, DataBase는 Microsoft SQL Server 2017입니다.
Stored Procedure의 구조는 아래와 같습니다.
CREATE PROCEDURE DBO.USP_SET_TEXT
(
@REMK_LN NVARCHAR(MAX),
@RETN_ERROR NVARCHAR(500) OUTPUT
)
WITH EXECUTE AS CALLER
AS
BEGIN
SET NOCOUNT ON
SET @RETN_ERROR = ''
SET @RETN_ERROR = '오류 반환 테스트 '
RETURN -1;
END
---
델파이 소스는 아래과 같습니다.
if Not FDConnection.Connected then FDConnection.Connected := True;
try
with FDStoredProc do
begin
Close;
StoredProcName := 'USP_SET_TEXT';
Params.Clear;
Params.CreateParam(ftWideMemo,'@REMK_LN',ptInput);
Params.CreateParam(ftWideString,'RETN_ERROR',ptOutput);
Params.CreateParam(ftInteger,'RETURN_VALUE',ptResult);
Params.ParamByName('@REMK_LN').AsWideMemo := '비고';
//위 라인을 활성화 할 경우 오류의 반환값(RETN_ERROR)은 공백으로 반환하며,
위 라인을 주석 처리할 경우는 정상적으로 반환합니다.
ExecProc;
if ParamByName('@RETURN_VALUE').AsInteger = 0 then
begin
ShowMessage('정상');
end
else
begin
ShowMessage(ParamByName('@RETN_ERROR').AsString);
end;
end;
except
......
end;
-- IDE 상에서 테스트할 경우에도 @REMK_LN 파라메터에 값이 정의되면 공백으로 반환되고, 값이 정의되지 않으면
정상 반환됩니다.
댓글 1
-
arabianwine
2020.06.15 09:52
추가적으로 조회를 해 보니 MS SQL에서 NVARCHAR(MAX)는 델파이 컴포넌트들에서 과거부터 있어왔던
고질적인 오류가 있는 듯합니다.
업무상에 이슈가 안될 것 같아서 NVARCHAR(4000)으로 테이블 변경을 해서 진행할 예정이지만,
다른 분들도 혹시나 같은 문제가 발생하시면 참고하시면 좋을 듯합니다.