CELua[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Сохранение данных в SQL Lite (пример)

    Запланировано Прикреплена Закрыта Перенесена MasterGH
    1 Сообщения 1 Posters 58 Просмотры 1 Watching
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • MasterGHM Не в сети
      MasterGH Администраторы
      отредактировано MasterGH

      В этом примере CE собирает статистику подключенного процесса присваивая рейтинг. Чем чаще процесс открыт, тем выше его рейтинг.

      c=createSQLite3Connection()
      c.DatabaseName = 'C:\\VPProjects.sqllite'
      c.Connected=true
      
      t=createSQLTransaction()
      t.SQLConnection=c
      t.Active=true
      
      tn=c.getTableNames()
      if #tn==0 then
        print("empty")
      
        c.ExecuteDirect([[
          CREATE TABLE something (
          'id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
          'processname' char(256) NOT NULL,
          'rating' INTEGER);
        ]])
        tn=c.getTableNames()
        if #tn==0 then error('no table created') end
      
      end
      
      print("tables:")
      local hassomething=false
      local i
      for i=1,#tn do
        print(tn[i])
        if tn[i]=='something' then hassomething=true end
      end
      
      if hassomething then
        pn=process
        if (pn==nil) or (p=='nil') then pn='no process'  end
      
        --check if pn is in the table, if so, increment rating, else add it
        q=createSQLQuery()
        q.SQLConnection=c
        q.SQLTransaction=t
      
        q.SQL.Text=string.format([[ Select * from something where processname='%s' ]],pn) --not secure, I know, just an example
        q.Active=true
      
        if q.RecordCount>0 then
          print("In the list")
          fields=q.Fields
          print("fieldcount="..fields.Count)
      
          local id=q.FieldByName('id').asInteger
          print("id="..id)
      
          local rating=q.FieldByName('rating')
          print("rating="..rating.asInteger)
      
          q.Active=false
          q.StatementType='stUpdate'
          q.SQL.Text=string.format([[update something set rating=rating+1 where id=%d]], id)
          q.ExecSQL()
      
        else
          print("Not yet in the list")
          c.ExecuteDirect(string.format([[insert into something(processname,rating) values('%s',1)]],pn))
        end
      
        q.Active=false
      
        q.StatementType='stSelect'
        q.SQL.Text=[[select * from something]]
        q.Active=true
      
        count=1
        print(string.format("RecordCount=%d", q.RecordCount))
        while not q.EOF do
          print("line "..count)
          local i
          for i=0, q.Fields.Count-1 do
            print(string.format("  %s = %s", q.Fields[i].FieldName, q.Fields[i].Value))
          end
      
          q.next()
          count=count+1
        end
      
        q.Active=false
        q.destroy()
      
      else
        error("something doesn't exist")
      end
      
      t.Commit()
      t.Active=false
      c.Connected=false
      
      t.destroy()
      c.destroy()
      
      

      Для чего можно использовать базы данных?

      1. для хранения большого количества связанных данных. Например, это хранение данных анимаций и костей. Т.е. можем записывать анимации персонажей, присваивать имя анимации, идентификатор. Дублировать, менять на свои.
      2. Записывать и менять конфигруации песонажей
      3. Записывать позиции, углы камер или персонажей
      4. Делать карту с описаниями, какой npc, где расположен, какой инвентарть и т.п. и менять его
      5. Теоритически базу можно использовать удаленно на через сервер базы данных, а модфицированные клиенты могут синхронизироваться. Фактически из сингла можно сделать мультиплеер. Или же взять клиент игры и сделать в нем свою базу для игры в сингле (для себя к примеру)

      А для чего еще можно использовать базу данных? Если кто знает или есть идеи, то можно вместе обсудить.

      1 ответ Последний ответ Ответить Цитировать 0

      • 1 / 1
      • Первое сообщение
        Последнее сообщение
      Powered by NodeBB | Contributors
      СeLua[RU] 2025©