files/examples/luacom/ado/adolua.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
