자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi sqlite DB에 POST하면 에러(database is locked)가 발생합니다.
2018.06.14 12:10
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요. DB 공부를 이제서야 하고 있습니다.
sqlite로 DB를 만들어서 dbGrid에 보여주고
해당 레코드를 dbEidt 에서 수정한 후 [저장] 버튼을 누르면 POST하도록 프로그램을 했습니다.
procedure TfrmSurvey.btn_DetailSaveClick(Sender: TObject);
begin
r := StrToInt(db00_edID.Text);
with dmDB.qrySurvey do begin
if State <> dsEdit then Edit;
FieldByName('CodeCity').AsInteger := StrToInt(BufData[0]);
FieldByName('Dist1').AsFloat := StrToFloat(BufData[1]);
FieldByName('Dist2').AsFloat := StrToFloat(BufData[2]);
FieldByName('Code1').AsFloat := StrToFloat(BufData[3]);
FieldByName('Code2').AsFloat := StrToFloat(BufData[4]);
Post;
Refresh;
end;
temp := db00_edID.Text + ')' + db08_edName.Text;
ShowMessage(temp + ' 조사자료가 수정되었습니다.');
end;
여기서, BufData는 계산으로 변경하고자 데이터 내용입니다.
그런데 실행을 하면 POST에서 아래와 같은 에러 메시지가 발생합니다.
-----
[FireDAC][Phys][SQLite] ERROR: database is locked
-----
인터넷에서 찾아보면 해당 테이블을 닫지 않아서 생기는 문제라고 하지만
DBGrid에 DataSource를 통해 DB에 자동 접근할 뿐 이외는 해당 쿼리를 접근하고 있지 않습니다..
해결방법은 있을까요....
댓글 2
Delphi sqlite DB에 POST하면 에러(database is locked)가 발생합니다.
2018.06.14 12:10
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요. DB 공부를 이제서야 하고 있습니다.
sqlite로 DB를 만들어서 dbGrid에 보여주고
해당 레코드를 dbEidt 에서 수정한 후 [저장] 버튼을 누르면 POST하도록 프로그램을 했습니다.
procedure TfrmSurvey.btn_DetailSaveClick(Sender: TObject);
begin
r := StrToInt(db00_edID.Text);
with dmDB.qrySurvey do begin
if State <> dsEdit then Edit;
FieldByName('CodeCity').AsInteger := StrToInt(BufData[0]);
FieldByName('Dist1').AsFloat := StrToFloat(BufData[1]);
FieldByName('Dist2').AsFloat := StrToFloat(BufData[2]);
FieldByName('Code1').AsFloat := StrToFloat(BufData[3]);
FieldByName('Code2').AsFloat := StrToFloat(BufData[4]);
Post;
Refresh;
end;
temp := db00_edID.Text + ')' + db08_edName.Text;
ShowMessage(temp + ' 조사자료가 수정되었습니다.');
end;
여기서, BufData는 계산으로 변경하고자 데이터 내용입니다.
그런데 실행을 하면 POST에서 아래와 같은 에러 메시지가 발생합니다.
-----
[FireDAC][Phys][SQLite] ERROR: database is locked
-----
인터넷에서 찾아보면 해당 테이블을 닫지 않아서 생기는 문제라고 하지만
DBGrid에 DataSource를 통해 DB에 자동 접근할 뿐 이외는 해당 쿼리를 접근하고 있지 않습니다..
해결방법은 있을까요....
SQLite에는 LockingMode가 있습니다.
Connection Option에서 LockingMode를 Normal로 변경 후 연결해보세요.
다음 링크를 참고해 보세요.
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Connect_to_SQLite_database_(FireDAC)