2010-05-05 3 views
4

난 그냥 SQLite는 DLL에 액세스 할 수있는 쉬운 방법으로 루아에서 찾기 시작 얻었으나, DB-불가지론 LuaSQL 모듈을 사용하려고 시도하는 동안 오류로 실행 :Luasql 및 SQLite?

require "luasql.sqlite" 
module "luasql.sqlite" 

print("Content-type: Text/html\n") 

print("Hello!") 

주 내가하려고 해요 그래서에만 작업 디렉토리에 다음 파일이 가장 기본 설정에서 시작하고, sqlite.dll 실제로 LuaForge 사이트에서 이름을 바꾼 sqlite3.dll을 수 있습니다 :

 
Directory of C:\Temp 
<DIR> luasql 
lua5.1.exe 
lua5.1.dll 
hello.lua 

Directory of C:\Temp\luasql 
sqlite.dll 

것은 내가 설명 할 몇 가지 바이너리 실종 오류?

감사합니다.


편집 : 나는 원래 sqlite3.dll을에 DLL을 이름이 (즉, 그것이 내가 찾은 샘플에서 호출 된 방법이기 때문에 원래의 이름을 변경) 반영하도록 소스를 업데이트했습니다. 이 시점에서

, 여기 ... 코드가 생겼는지

require "luasql.sqlite3" 

-- attempt to call field 'sqlite' (a nil value) 
env = luasql.sqlite() 

env:close() 

입니다 ... 그리고 오류 메시지가 나는군요 :

C:\>lua5.1.exe hello.lua 
lua5.1.exe: hello.lua:4: attempt to call field 'sqlite' (a nil value) 

편집 : 발견 한 것은 그것은 : env = luasql.sqlite() 대신 env = luasql.sqlite3()이었습니다.

require "luasql.sqlite3" 

env = luasql.sqlite3() 
conn = env:connect("test.sqlite") 

assert(conn:execute("create table if not exists tbl1(one varchar(10), two smallint)")) 
assert(conn:execute("insert into tbl1 values('hello!',10)")) 
assert(conn:execute("insert into tbl1 values('goodbye',20)")) 

cursor = assert(conn:execute("select * from tbl1")) 
row = {} 
while cursor:fetch(row) do 
    print(table.concat(row, '|')) 
end 

cursor:close() 
conn:close() 

env:close() 

감사합니다 : 나 같은 초보자의 경우

, 여기에 최신 SQLite LuaSQL driver와 완벽한 예입니다.

+0

과 같지 않습니다. DLL의 이름이 변경되는 이유는 무엇입니까? 어떤 오류가 발생하고 있습니까? –

+0

위 예제는 Lua 5.1.4에서 다음과 같은 에러를 보여줍니다 :'lua : sql.lua : 3 : 전역 'luasql'(없음 값)을 인덱스하려고 시도했습니다. 이것은'require '가 더 이상 전역을 정의하지 않기 때문입니다. 첫번째 줄을'luasql = require "luasql.sqlite3"로 변경하면 문제가 해결됩니다. – user1704650

답변

1
  1. DLL 파일의 이름을 바꾸지 마십시오. 그러면 DLL에서 DLL과 동일한 이름의 초기화 함수를 찾지 못하게됩니다.

  2. module 전화가 필요하지 않습니다. 단지 require입니다. module은 모듈을 만들 때가 아니라 모듈을 만들 때 사용됩니다.


편집 : 당신이 luasql.sqlite3() 대신 luasql.sqlite()를 호출 할 필요가 같은 LuaSQL 문서에 따르면, 그것은 보인다.

+0

입력을 주셔서 감사합니다. 나는 더 이상,하지만 여전히 오류가 발생하므로 그에 따라 질문을 업데이 트했습니다. – Gulbahar

+0

예, 저는 최근에 luasql을 사용했으며'sqlite3'입니다. 그 때 매력처럼 작동합니다. – gimpf

0

편집 된 스 니펫에서 luasql.sqlite3 모듈을로드하고 luasql.sqlite 드라이버에 액세스하려고합니다. sqlite3sqlite ...

+0

그래, 편집을 게시 한 후 몇 분을 알아 냈다 ;-) 대단한 작품입니다. 고맙습니다. – Gulbahar