2011-12-12 2 views
2

FlashDevelop를 사용하여 디버그 모드에서 AIR 응용 프로그램을 게시하고 게시 할 파일/폴더에 데이터베이스를 포함 시켰습니다. 응용 프로그램이 처음 실행되면 applicationStorageDirectory에이 db의 인스턴스가 있는지 여부를 확인합니다. 포함되지 않은 경우 applicationDirectory에서 applicationStorageDirectory로 복사합니다. 이것은 참조 된 데이터베이스 dbFile = File.applicationStorageDirectory.resolvePath(DB_FILE_NAME);이 이제 쓰기 가능해야 함을 의미합니다. 그러나 앱을 실행할 때 테이블에서 레코드를 읽을 수 있지만 SQL 문을 사용하여 쓰기를 시도 할 때 SQLError가 발생합니다. 'Error # 3122 : Attempt to 읽기 전용 데이터베이스 쓰기 '.AIR 응용 프로그램에서 SQLLite 데이터베이스에 쓸 수 없습니다.

내가 applicationDirectory의 읽기 전용 위치에 쓰려고 시도했지만 필자가 (필자가 아는 한) 쓰기 가능해야하는 File.applicationStorageDirectory 위치를 확실히 사용하고 있다면이 문제가 발생합니다.

내 Windows 7, 64 비트에서 db의 위치 = C : \ Users \ sean.duffy \ AppData \ Roaming \ FishFightAppData \ Local Store \ db 이것은 dbFile.nativePath 속성을 사용하여 다시 찾을 수 있습니다. 나는 DB를 업데이트 할 수 있어야합니다.

누구나 아이디어가 있습니까? 나는 .... 내가 생각할 수있는 모든 노력을하고 모든 것을 검색하지만 유일한 일반적인 원인은 사람들이 asplicationDirectory에 기록하려고하지 저장 디렉토리 때 것 같다있다

UPDATE :

내 나쁜 - 방금 내가 사용하는 타사 라이브러리의 API를 잘못 읽었습니다 실현! db의 내용을 수정할 수있는 executeModify (statement)를 호출해야하는데 대신 db를 덮어 쓰거나 저장할 수없는 execute (statement)를 호출합니다.

소스 코드는 swc로 컴파일되며 executeModify를 사용해야한다는 점에 대한 문서는 없었습니다.하지만 내가 가정 한 이름에서 추측 했어야합니다! 공개 의례, 나는 명백한 솔루션을 다시 게시하고있는 답이 목록이 내릴 것처럼 (당신의 도움이

+0

UAC를 켜고 "unelevated"명령 프롬프트 창에서 db 파일의 이름을 바꿀 수 있는지 확인하십시오. (예 : 관리자로 실행되지 않음). 그 위치로,이 작업을 수행 할 수 있어야합니다. 하지만 그럴 수 없다면 왜 항공 앱이 그것을 만질 수 없는지를 보여줄 것입니다. 또한, "DB_FILE_NAME"에 저장된 내용은 무엇입니까 ?? 백 슬래시 또는 슬래시일까요? 뒤쪽에 2 개의 백 슬래시가 있어야합니다. – WORMSS

+0

네, DB_FILE_NAME에 대해 슬래시를 사용하고 있습니다. (관리자 권한이 아닌) cmd 프롬프트에서 파일의 이름을 바꿀 수 있습니다. String = "db/fishfight.db"; db의 내부 내용을 읽기 전용으로 설정할 수있는 방법이 있습니까? Lita라는 프리웨어 AIR 앱을 사용하여 만들었지 만이 설정을 볼 수 없었습니다 (암호화 할 수 있고 암호로 보호 할 수 있지만 읽기/쓰기 권한은 없습니다.) – Sean

답변

1

에 대한 그 감사에 대한

죄송합니다. 평소처럼, 아스 커 내와 게시물을 무시 오신 것을 환영합니다 이상입니다 자체 답을 받아들입니다.)

이 API에서는 execute(statement)이 아니라 executeModify(statement)으로 전화해야합니다. 후자는 데이터베이스를 덮어 쓰지 않습니다.

관련 문제