2009-09-16 5 views
3

Sqlite 데이터베이스를 읽는 Tcl 응용 프로그램을 빌드하려고합니다. 내가 starkit 응용 프로그램을 빌드하고 .vfs 폴더 내의 .tcl 파일 옆에 Sqlite 데이터베이스 파일을 놓고 응용 프로그램 (.exe)을 실행하려고하면 "실행 중에 패키지 sqlite3을 찾을 수 없습니다. 패키지에는 sqlite3이 필요합니다. "Sqlite 데이터베이스에서 읽는 Tcl Starkit

나는 내 응용 프로그램이 데이터베이스 파일을 찾을 수 없습니다 생각합니다. starkit을 작성하기 전에 .tcl 응용 프로그램은 Sqlite 데이터베이스를 읽을 수 있지만 starkit을 만든 후 .tcl 파일에 오류가 발생합니다.

사람은 SQLite는 데이터베이스 파일을 읽기 위해 Tcl의 애플리케이션 starkit을 사용하도록 설정하는 방법을 알고 있나요?

감사합니다,

DFM

답변

5

나는 당신의 starkit가 sqlite3를 패키지를로드 할 수있는 가능성이 있다고 생각합니다. .vfs 폴더에 lib 디렉토리를 만들고 sqlite3 패키지를 복사 했습니까?

+0

안녕하세요 잭슨 - 답장을 보내 주셔서 감사합니다. .vfs 폴더 내의 .tcl 파일로 .db 파일을 래핑하려고했습니다. 나는 lib 디렉토리를 만들고 거기에서 갈 것이다. 나는 어딘가에서 필자가 응용 프로그램을 감쌀 때 쓸 수 있어야한다고 생각했다. 이 말은 당신에게 친숙한가요? – DFM

4

질문에서 서로 다른 두 가지 사항을 논의하는 것 같습니다.

첫 번째

는 sqllite3 라이브러리를로드 할 수있는 기능입니다. Jackson이 언급했듯이, starpack의 lib 디렉토리에 sqllite3 라이브러리 (tcl과 첨부 파일)를 포함시켜야합니다. 일단 제대로 완료되면 "package required sqlite3"명령이 올바르게 작동해야합니다.

두 번째는 -writable 플래그에 관해서입니다. 내가 올바르게 이해하고 있다면, 스타 팟이 실행되는 동안 파일을 수정할 수 있습니다. starpack에 포함 된 라이브러리를로드 할 수있는 기능과는 아무런 관련이 없지만 해당 라이브러리가 파일을 수정하는 데 사용됩니다 (예 : 사용자가 언급 한 데이터베이스 파일).

나는로 인해 특정 OS의 제약으로 실행 starkit (A 내부의 파일)을 쓸 수없는 것을 인상이었다. 말했다되는 것을 나는 "티클 Tk의 실천 프로그램"브렌트 웰치의 놀라운 책에서 다음과 발견 : 당신이 두 번 이상 write.kit 파일을 실행하면

당신이 알 것을 write.kit/data.new 파일은 실행 사이에 지속되지 않습니다. 이것은 기본적으로 Metakit 데이터베이스가 주 메모리에서 수정되고 Starkit 파일에 쓰여지지 않기 때문입니다. 당신이 파일을 장기 저장할 경우 -writable 플래그를 사용하는 SDX :

sdx wrap write.kit writable 

Referece : 내 질문에 일부 철저한 조사에 응답 모든 사람의 도움으로 Google Books

+0

안녕하세요 RHSeeger - 답장을 보내 주셔서 감사합니다. 나는 실제로 그 책을 가지고있다. 그 발췌문을 보았지만, 내가하려는 일에 적용되는지 모르겠습니다. 코드 스 니펫 "package required sqlite3"이 오류를 발생시키지 않도록 내 starkit 어딘가에 .db 파일 (sqlite)을 배치해야합니다. 나는 starkit을 풀었고 lib 디렉토리를 찾았다.vfs 폴더에 저장 한 다음 .db 파일을 폴더 내 다른 변형으로 배치하려고 시도했지만 아무 소용이 없었습니다. .tcl 파일에 코드를 추가하고 .db 파일 확장명을 변경하고 lib 폴더에 specfic 폴더를 만드는 등의 작업을 수행해야할지 모르겠다. – DFM

+0

내 의견을 편집하여 내 의견을 해결합니다. – RHSeeger

+0

sqlite의 웹 사이트에서 tclsqlite3.dll 파일을 다운로드했습니다. 나는이 파일이 starpack lib 디렉토리에 위치해야한다고 생각한다. 이 파일의 위치를 ​​이해할 수 없을 것 같습니다. .vfs lib 폴더에는 dde, itcl3.4, Itcl, rechan, registry, tcl8, tcl8.5 thread2.6.5, tk8.5, vfs1.3 및 zlib 폴더가 있습니다. 내가 나열된 폴더에 tclsqlite3.dll 파일을 배치뿐만 아니라 새 폴더 (sqlite3) 만들기 시도했다. 재 포장 후 앱을 실행 해 보았지만 같은 오류가 발생했습니다. 귀하의 의견에 진심으로 감사드립니다. 고맙습니다. – DFM

2

, Sqlite 백엔드로 Tcl 앱을 래핑하는 스타 팩을 만드는 단계를 알아 냈습니다. starpack를 작성하는 단계는 다음과 같습니다 : 폴더 tclkit-win32.upx.exesdx.kit에서

  1. 다운로드 및 장소.

  2. 폴더 (이 코드 package require sqlite이 있는지 확인에 .tcl (test.tcl) 응용 프로그램을 추가합니다 (같은 폴더에두고)에 tclkit-win32.upx.exe의 복사본을 만들고 tclkit.exe로 이름을 바꿉니다.

  3. tclkit-win32.upx.exe 파일을 실행하고 줄에 다음을 입력합니다 (완료되면 닫지 마십시오) :

    source sdx.kit 
    package require sdx 
    sdx::sdx qwrap test.tcl 
    sdx::sdx unwrap test.kit 
    
  4. tclsqlite3.dll을 sqlite 웹 사이트에서 다운로드하고 별도의 폴더에 저장하십시오. 폴더 이름을 sqlite으로 지정하십시오.

  5. 은 메모장과 같은 텍스트 응용 프로그램을 사용하여 다음과 같은 코드를 추가하십시오 tclsqlite3.dll와 sqlite가 폴더에 pkgIndex.tcl

    package ifneeded sqlite 3.6.18 [list load [file join $dir tclsqlite3.dll]]. 
    

    저장과 장소를.

  6. 1 단계에서 첫 번째 폴더로 이동하십시오. .vfs 폴더가 나타납니다. .vfs 폴더를 연 다음 lib 폴더를 엽니 다. sqlite 폴더를 lib 폴더에 넣습니다. lib 폴더에는 app-test 폴더 (test.tcl에 해당)와 sqlite 폴더가 있어야합니다. 5-7 단계에

    대안 : C에 TCL 폴더에서 sqlite가 DLL을 포함하는 폴더를 복사 : \을 lib 폴더에. 당신은 두 개의 파일, DLL 파일과 pkgIndex.tcl있을 것이다

    package ifneeded sqlite3 [package require sqlite3] 
    

    SQLite는 폴더를 사용하여 DLL의 경로를 확인할 수 있습니다. 당신이 이런 식으로 할 경우, 다음과 같은 코드를 입력 tclkit-win32.upx.exe가 아직 실행으로 3 단계

  7. package require sqlite3을 사용해야합니다 :

    sdx::sdx wrap test.exe -runtime tclkit.exe 
    
  8. 마지막을 .DB 다음 파일 당신의 SQLite는 배치 새로 생성 한 응용 프로그램 인 .exe (test.exe)에 저장하고 응용 프로그램을 실행하십시오.

버전 충돌이 있는지 확인하십시오. package require sqlite 코드 스 니펫에 심각한 문제가있었습니다. 원래, 나는 작동하지 않았던 package require sqlite3을 가지고 있었다. 또한 pkgIndex.tcl 파일을 만들 때 올바른 버전의 sqlite (예 : 3.2.18 등)가 있어야합니다.

감사합니다.

DFM

+0

아, 그래서 pkgIndex.tcl 파일을 수동으로 만들었습니다. 참고로, 일반적으로 당신에게 유용한 답변을 제공 한 사람들에게 +1을주는 것은 공손한 것으로 간주됩니다. – RHSeeger

관련 문제