5

SQLite DLL にアクセスする簡単な方法として Lua を検討し始めたところですが、DB に依存しない LuaSQL モジュールを使用しようとしたときにエラーが発生しました。

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

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

print("Hello!")

最も基本的なセットアップから始めようとしていることに注意してください。したがって、作業ディレクトリには次のファイルのみがあり、sqlite.dll は実際にはLuaForgeサイトの名前が変更された sqlite3.dll です。

C:\Temp のディレクトリ
<DIR> luasql
lua5.1.exe
lua5.1.dll
こんにちは.lua

C:\Temp\luasql のディレクトリ
sqlite.dll

エラーを説明するバイナリがいくつかありませんか?

ありがとうございました。


編集: DLL の名前を元の sqlite3.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()。

私のような初心者のために、最新のSQLite LuaSQL ドライバーを使用した完全な例を次に示します。

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()

ありがとうございました。

4

2 に答える 2

2
  1. DLL ファイルの名前を変更しない: これにより、Lua が DLL (DLL と同じ名前) で初期化関数を見つけられなくなります。

  2. module電話は必要ありませんrequiremoduleモジュールを使用するときではなく、モジュールを作成するときに使用されます。


編集:LuaSQLのドキュメントによると、のluasql.sqlite3()代わりに呼び出す必要があるようですluasql.sqlite()

于 2010-05-05T12:31:28.193 に答える
0

編集したスニペットでは、luasql.sqlite3モジュールをロードしてluasql.sqliteドライバーにアクセスしようとしています。...sqlite3と同じではないことに注意してください。sqlite

于 2010-05-05T12:59:04.983 に答える