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