자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi FireDac 쿼리 실행시 가끔 발생되는 Access Violation을 못잡겠습니다..
2021.01.20 11:41
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요. 델파이 Rio 버전으로 개발중이며,
firebird 3 버전으로 DB 연동 테스트 중 Access Violation 이 종종 발생하여
도움을 구하고자 합니다...
vQry.Open();
이 구문에서 오류가 발생하는데..
문제없이 잘되다가도 가끔 한번씩 발생되네요..
어떻게든 재현을 해보려고 해도 그럴땐 안나옵니다 ㅠㅠ
도대체 어떻게 해결해야할지 너무 막막합니다.
모든 db 쿼리는 아래와 같은 샘플 형태로 실행합니다..
혹시 이렇게 하면 안된다라는 그런 팁이라도 알 수 있을까 하여 글을 남깁니다.
감사합니다..
class function DBTEST(aa: Integer): TTempData;
var
vQry : TFDQuery;
begin
Result := nil; //결과 초기화
Result := TTempData.Create;
vQry := TFDQuery.Create(nil);
try
vQry.Connection := db.FDConn;
if vQry.Active then
vQry.Close;
vQry.SQL.Clear;
vQry.Params.Clear;
vQry.SQL.Text :=
' SELECT * ' + #13#10 +
' FROM table ' + #13#10 +
' WHERE aa = :aa ';
vQry.Params.ParamByName('aa').AsInteger := aa;
try
vQry.Open();
vQry.First;
while not vQry.Eof do
begin
Result.seq := vQry.FieldByName('seq').AsInteger;
vQry.Next;
end;
except on E: Exception do
begin
// e.Message;
end;
end;
finally
vQry.Free;
end;
end;
Delphi FireDac 쿼리 실행시 가끔 발생되는 Access Violation을 못잡겠습니다..
2021.01.20 11:41
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요. 델파이 Rio 버전으로 개발중이며,
firebird 3 버전으로 DB 연동 테스트 중 Access Violation 이 종종 발생하여
도움을 구하고자 합니다...
vQry.Open();
이 구문에서 오류가 발생하는데..
문제없이 잘되다가도 가끔 한번씩 발생되네요..
어떻게든 재현을 해보려고 해도 그럴땐 안나옵니다 ㅠㅠ
도대체 어떻게 해결해야할지 너무 막막합니다.
모든 db 쿼리는 아래와 같은 샘플 형태로 실행합니다..
혹시 이렇게 하면 안된다라는 그런 팁이라도 알 수 있을까 하여 글을 남깁니다.
감사합니다..
class function DBTEST(aa: Integer): TTempData;
var
vQry : TFDQuery;
begin
Result := nil; //결과 초기화
Result := TTempData.Create;
vQry := TFDQuery.Create(nil);
try
vQry.Connection := db.FDConn;
if vQry.Active then
vQry.Close;
vQry.SQL.Clear;
vQry.Params.Clear;
vQry.SQL.Text :=
' SELECT * ' + #13#10 +
' FROM table ' + #13#10 +
' WHERE aa = :aa ';
vQry.Params.ParamByName('aa').AsInteger := aa;
try
vQry.Open();
vQry.First;
while not vQry.Eof do
begin
Result.seq := vQry.FieldByName('seq').AsInteger;
vQry.Next;
end;
except on E: Exception do
begin
// e.Message;
end;
end;
finally
vQry.Free;
end;
end;
exception 처리가 잘못 된것 같습니다. try.. finally 부분은 오류가 발생하지 않아도 수행되기 때문에 while문을 수행한 후에 오류가 없으면 free하는 부분으로 점프하는 것 같습니다. while문이 다 끝나면 그냥 루틴만 빠져 나가게 수정하시기 바랍니다.