81 lines
1.4 KiB
Lua
81 lines
1.4 KiB
Lua
-- dblua.lua
|
|
|
|
do
|
|
local dblua_data = {}
|
|
|
|
require("luacom")
|
|
|
|
|
|
function DBOpen(connection_string)
|
|
dblua_data.connection = luacom.CreateObject("ADODB.Connection")
|
|
|
|
assert(dblua_data.connection)
|
|
|
|
|
|
dblua_data.connection.ConnectionString = connection_string
|
|
dblua_data.connection:Open()
|
|
end
|
|
|
|
function DBClose()
|
|
dblua_data.connection:Close()
|
|
dblua_data.connection = nil
|
|
dblua_data.recordset = nil
|
|
end
|
|
|
|
function DBExec(statement)
|
|
|
|
if statement == "%BEGIN" then
|
|
dblua_data.connection:BeginTrans()
|
|
return
|
|
elseif statement == "%COMMIT" then
|
|
dblua_data.connection:CommitTrans()
|
|
return
|
|
elseif statement == "%ROLLBACK" then
|
|
dblua_data.connection:RollbackTrans()
|
|
return
|
|
end
|
|
|
|
if dblua_data.recordset == nil then
|
|
dblua_data.recordset = luacom.CreateObject("ADODB.RecordSet")
|
|
elseif dblua_data.recordset.State ~= 0 then
|
|
dblua_data.recordset:Close()
|
|
end
|
|
|
|
dblua_data.recordset:Open(statement, dblua_data.connection)
|
|
|
|
end
|
|
|
|
|
|
function DBRow()
|
|
|
|
if dblua_data.recordset == nil then
|
|
return nil
|
|
elseif dblua_data.recordset.ActiveConnection == nil then
|
|
return nil
|
|
end
|
|
|
|
if dblua_data.recordset.EOF == true then
|
|
return nil
|
|
end
|
|
|
|
local row = {}
|
|
local fields = dblua_data.recordset.Fields
|
|
local i = 0
|
|
|
|
while i < fields.Count do
|
|
|
|
local field = fields:Item(i)
|
|
row[i] = field.Value
|
|
row[field.Name] = field.Value
|
|
|
|
i = i + 1
|
|
end
|
|
|
|
dblua_data.recordset:MoveNext()
|
|
|
|
return row
|
|
|
|
end
|
|
|
|
end
|