myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
2 страниц V  < 1 2  
Тема закрытаНачать новую тему

> Sqlite, win32 | База данных (устаревшая полурабочая версия)

sphinx
сообщение 6.2.2009, 17:35
Сообщение #21


Активный участник
***

Группа: Заблокированные
Сообщений: 87
Регистрация: 16.10.2008
Пользователь №: 805
Спасибо сказали: 35 раз




Код
--[[

    SQLite3 Example script by Mutor v2

]]

-- Admins nick for status / error messages
local OpNick = "Mutor"
-- Status in PM? true/false [false = main chat]
local PmOnly = true
-- Subdir of scripts folder ["" = scripts folder]
local path = "sql/"
-- Database file name ["" = hubname.db"]
local file = ""
-- Database timeout, in seconds
local to = 3
-- Delete file on script exit? true/false
local DelFile = true

require "sqlite3"

OnStartup = function()
    local root = Core.GetPtokaXPath().."scripts/"
    if #path > 0 then path = root..path else path = root end
    if #file == 0 then file = path..SetMan.GetString(0):gsub(" ","_")..".db" else file = path..file end
    db = sqlite3.open(file)
    assert(db,"Failed to open "..file..", check files.")
    assert(db:set_busy_timeout(to))
    assert(db:exec("CREATE TABLE HubUsers (Nick TEXT, IP TEXT, Profile NUMERIC, Connected TEXT, Time NUMERIC)"))
    local r = "Ї"
    if DoOnline() then
        OnError("\t\t\t"..file.." has been updated.")
        OnError(" ")
        OnError(r:rep(100))
    else
        OnError("\t\t\t"..file.." failed to update.")
        OnError(" ")
        OnError(r:rep(100))
    end
end

OnError = function(msg)
    if msg and #msg > 0 then
        local user,bot = Core.GetUser(OpNick),SetMan.GetString(21)
        if user and bot then
            if PmOnly then
                Core.SendPmToUser(user,bot,msg.."|")
            else
                Core.SendToUser(user,"<"..bot.."> "..msg.."|")
            end
        end
    end
end

OnExit = function()
    db:close()
    if DelFile then
        assert(os.remove(file))
    end
end

UserConnected = function(user,data)
    if not ChkNick(user.sNick:lower()) then
        assert(db:exec("INSERT INTO HubUsers ( Nick, IP, Profile, Connected, Time) VALUES ('"..
        user.sNick.."', '"..user.iProfile.."', '"..user.sIP.."', 'Online', '"..os.time().."');"))
        db:exec('commit')
        ReadDb()
    end
end
OpConnected,RegConnected = UserConnected,UserConnected

UserDisconnected = function(user)
    if ChkNick(user.sNick:lower()) then
        --assert(db:exec("DELETE FROM HubUsers WHERE Nick = '"..user.sNick.."' and IP = '"..user.sIP.."'"))
        assert(db:exec("UPDATE HubUsers SET Time = '"..os.time().."', Connected = "..
        "'Offline' WHERE Nick = '"..user.sNick.."' and IP = '"..user.sIP.."'"))
    end
    db:exec('commit')
    ReadDb()
end
RegDisconnected,OpDisconnected = UserDisconnected,UserDisconnected

ChkNick = function(nick)
    local t = {"Nick","IP","Profile"}
    for row in db:irows("SELECT "..t[1].." FROM HubUsers") do
        if row[1]:lower() == nick then return true end
    end

end

DoOnline = function()
    for x,user in ipairs(Core.GetOnlineUsers()) do
        if ChkNick(user.sNick:lower()) then
            assert(db:exec("UPDATE HubUsers SET Nick = '"..user.sNick.."', IP = '"..user.sIP..
            "', Profile = '"..user.iProfile.."', Connected = 'Offline', Time = '"..
            os.time().."' WHERE Nick = '"..user.sNick.."'"))
        else
            assert(db:exec("INSERT INTO HubUsers ( Nick, IP, Profile, Connected, Time ) VALUES ('"..
            user.sNick.."', '"..user.iProfile.."', '"..user.sIP.."', 'Online', '"..os.time().."');"))
        end
    end
    db:exec('commit')
    ReadDb()
    return true
end

ReadDb = function()
    GetProf = function(n)
        local Prof = "Unregistered"
        if n ~= -1 then Prof = ProfMan.GetProfile(n).sProfileName end
        return Prof
    end
    if db:exec("SELECT * FROM HubUsers LIMIT 1") then
        local r = "Ї"
        OnError("NickName\t\t\tProfile\t\tIP Address\t\tConnected\tDate/Time")
        OnError(r:rep(100))
        for _,nick,profile,ip,status,time in db:cols("SELECT 1, * FROM HubUsers") do
            OnError(string.format("%-40.30s",nick)..
            "\t"..string.format("%-20.13s",GetProf(tonumber(profile)))..
            "\t"..string.format("%-24.15s",ip)..
            "\t"..string.format("%-15.10s",status)..
            "\t"..os.date(nil,tonumber(time))
            )
        end
        OnError(" ")
        OnError(r:rep(100))
    end
end
Go to the top of the page
+Quote Post
Setuper
сообщение 6.2.2009, 18:51
Сообщение #22


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




И что это? Просили же 2 таблицы, а тут я что-то не вижу 2 таблиц!
Go to the top of the page
+Quote Post
sphinx
сообщение 7.2.2009, 0:43
Сообщение #23


Активный участник
***

Группа: Заблокированные
Сообщений: 87
Регистрация: 16.10.2008
Пользователь №: 805
Спасибо сказали: 35 раз




Цитата(Setuper @ 6.2.2009, 18:51) *
И что это? Просили же 2 таблицы, а тут я что-то не вижу 2 таблиц!

Ну значит ничего не изменилось в новой библиотеке big_smile.gif
Я конечно спрошу еще раз, но...
И еще, я в принципе чайник по базам данных, но почему надо обязательно создавать несколько таблиц в одной базе? Несколько баз создать религия не позволяет?

В общем, он ответил примерно то, что сказал я:

Цитата
[00:35:51] <Mutor> There does seem to be a problem adding multiple tables with sqilte
[00:36:38] <Mutor> Until it's sorted suggest you add field to existing table or use a second db/file


Перевод. Похоже, есть проблема с добавлением нескольких таблиц в базу. Пока она не решится, советую добавлять несколько полей в таблицу, либо использовать вторую базу/файл.
Go to the top of the page
+Quote Post
Setuper
сообщение 7.2.2009, 11:55
Сообщение #24


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Так может говорить только человек, который далёк от принципа построения баз данных, видимо Мутор далёк от этого.

Построение базы данных - это не лёгкая задача, в противном случае база данных будет работать не эффективно.

Сначала строится так называемая ER-модель базы данных, после этого эта модель проектируется на реляционную базу данных и уже потом всё переносится на конкретный язык бд. Таблица на первом этапе построения бд - это основной элемент.
Go to the top of the page
+Quote Post
Wariner
сообщение 7.2.2009, 12:14
Сообщение #25


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




меня интересует почему он подключает вот это:
Код
require "sqlite3"


А так же меня интересует как он это делает. При попытке это сделать мой хаб запросил ещё две библиотеки lua5.1.dll и msvcr80.dll После чего птока выдала ошибку подключения библиотеки
Go to the top of the page
+Quote Post
alex82
сообщение 7.2.2009, 13:54
Сообщение #26


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Цитата(Wariner @ 7.2.2009, 11:14) *
меня интересует почему он подключает вот это:
Код
require "sqlite3"

http://mydc.ru/ipb.html?s=&showtopic=1...post&p=8895
Go to the top of the page
+Quote Post
Setuper
сообщение 7.2.2009, 17:12
Сообщение #27


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Можно подключать любым из способов, однако более расширенный способ подключения, который автоматически ищет точку входа в длл, является require "sqlite3"
Go to the top of the page
+Quote Post
Wariner
сообщение 7.2.2009, 20:34
Сообщение #28


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




я запутался.... В этой теме обсуждалась библиотека PXSQLite3.dll. Щас идёт разговор про неё?

Если да то результат:

Цитата
[20:28] Синтаксис test.lua:20: module 'sqlite3' not found:
no field package.preload['sqlite3']
no file 'C:\Documents and Settings\...\Рабочий стол\Хаб SQLite\sqlite3.lua'
no file 'C:\Documents and Settings\...\Рабочий стол\Хаб SQLite\libs\sqlite3.lua'
no file 'C:\Documents and Settings\...\Рабочий стол\Хаб SQLite\scripts\libs\sqlite3.lua'
no file 'C:\Documents and Settings\...\Рабочий стол\Хаб SQLite\sqlite3.dll'
no file 'C:\Documents and Settings\...\Рабочий стол\Хаб SQLite\libs\sqlite3.dll'
no file 'C:\Documents and Settings\...\Рабочий стол\Хаб SQLite\scripts\libs\sqlite3.dll'



Если же всё таки речь идёт о sqlite3.dll то результат я писал ранее!

Объясните мне beat_brick.gif
Go to the top of the page
+Quote Post
Setuper
сообщение 7.2.2009, 20:43
Сообщение #29


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Операция:
Код
require "sqlite3"
подключает модуль sqlite3. Модуль подключается из файла sqlite3.lua. В ошибках интерпретатор написал где он ищет этот файл, а он наверняка у тебя лежит в папке scripts.
Go to the top of the page
+Quote Post
Wariner
сообщение 7.2.2009, 21:20
Сообщение #30


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




не пашет этот скрипт мутора.....
Go to the top of the page
+Quote Post
Setuper
сообщение 24.2.2009, 21:20
Сообщение #31


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Ура! alex82 получил рабочую библиотеку под API2.

Прикладываю эту библиотеку: Прикрепленный файл  PXSqlite3.rar ( 159.33 килобайт ) Кол-во скачиваний: 7


Также перезалил библиотеку в первом посту.
Go to the top of the page
+Quote Post
Wariner
сообщение 24.2.2009, 22:27
Сообщение #32


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




2Setuper: раз уж так всё хорошо, можно ли услышать пару слов о БД. Ты где то обмолвился о структуре. Можешь рассказать что к чему? К примеру будет ли смысл в переходе с одной таблицы в текстовом файле к одной таблицы в БД? Стоит ли хранить в БД маленькие таблицы которые моно и в текстовый файл запхнуть?

PS: alex82 поздравляю и огромное спасибо!!!
Go to the top of the page
+Quote Post
Setuper
сообщение 24.2.2009, 22:34
Сообщение #33


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Нет. Не совсем так. Таблицы нужно создавать из расчёта разнородности данных в них. В нашем случае связи между таблицами надо делать непосредственно в скриптах. Если бы мы использовали mysql, а не sqlite, то связывать таблицы можно было бы непосредственно при помощи mysql.
Покачай из инета какие-нибудь книжки по общему языку SQL. Посмотри как правильно надо составлять таблицы для повышения оптимизации выполнения запросов. База данных строится в несколько этапов: 1) составление ER диаграммы, 2) переход к реляционной бд, 3) переход к непосредственным запросам. Это основные 3 этапа при построении оптимизированной базы данных.
Go to the top of the page
+Quote Post
Wariner
сообщение 24.2.2009, 22:37
Сообщение #34


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




а можно какой нибудь примерчик в двух словах?
Go to the top of the page
+Quote Post
Setuper
сообщение 24.2.2009, 22:44
Сообщение #35


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




В бд можно хранить всё, но на мой взгляд я думаю следует писать модульно. То есть подключать модуль работы с какой-то базой данных. Это даст возможность работать не с одним типов базы данных. Также не нужно забывать и хранение всей информации в обыкновенных файлах - это же конечно крайний и не оптимизированный случай, но всё же если у кого-то нет возможности установки базы данных или ещё какая-то другая причина. В общем я сейчас я стараюсь как раз таки написать универсальный модуль для подключения различных средств хранения информации - идей очень много не знаю за что прямо браться)))

В двух словах это не опишешь. Хорошие примеры написаны в книжках по SQL. Я просто изучал базы данных в институте и сдавал по ним экзамен, в качестве курсового проекта по базам данных мною была разработана и представлена как раз таки база данных для моего SBot'а.
Go to the top of the page
+Quote Post
Wariner
сообщение 24.2.2009, 23:09
Сообщение #36


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




Жаль(((( Просто с сегодняшними моими познаниями я бы создал в БД одну таблицу где была бы вся информация о пользователях. Возможно я так и сделаю ибо времени катастрофически не хватает на изучение(((

upd: думается связь осуществляется с помощью поля идентификатора(id)? при заходе пользователя в каждой таблице БД создаётся запись с одинаковым ид что в дальнейшем служит связью этих таблиц, так?
Go to the top of the page
+Quote Post
Setuper
сообщение 24.2.2009, 23:46
Сообщение #37


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Связи бывают разными, и осуществляться они могут разными способами. Ты привёл один из способов, который осуществим в sqlite только по средствам триггеров.
Go to the top of the page
+Quote Post
Wariner
сообщение 25.2.2009, 18:11
Сообщение #38


Самый главный активист :-D
***********

Группа: Модераторы
Сообщений: 2 790
Регистрация: 29.6.2008
Из: г. Тула
Пользователь №: 97
Спасибо сказали: 440 раз




а какие ещё могут быть связи именно в SQLite?


2Setuper: можешь на примере моего бота объяснить мне зачем нужны несколько таблиц? Вот часть главной таблицы:
Код
    ["xx.xx.xx.xx"] = {
        ["Punish"] = {
            [1] = "15.02.2009 в 18:33    Юзер    забанен    Наказал: -=Wariner=-    Причина: Реклама хаба+ФЛУД",
        },
        ["OffData"] = "15.02.2009 в 18:33",
        ["Shara"] = 193955841117,
        ["Msg"] = 187,
        ["Ban"] = {
            ["Punished"] = "-=Wariner=-",
            ["Time"] = 1235575980,
            ["Reason"] = "Реклама хаба+ФЛУД",
        },
        ["Time"] = 148020,
        ["IP"] = "xx.xx.xx.xx",
        ["Nick"] = "yyyyyy",
        ["BanTop"] = 2,
    },

полная таблица юзера конечно больше но она немного уменьшена в следствии использования большого количества памяти!
Go to the top of the page
+Quote Post
dmvn
сообщение 27.2.2009, 10:41
Сообщение #39


InstaHub dev.
***

Группа: Пользователи
Сообщений: 91
Регистрация: 25.2.2009
Пользователь №: 2 377
Спасибо сказали: 10 раз




Цитата(Setuper @ 24.2.2009, 21:20) *
Ура! alex82 получил рабочую библиотеку под API2.


А может быть, он обнародует способ, как он ее получил? big_smile.gif
Понятно что не без бубна, но всё-таки... что надо подхачить в исходной либе, чтобы она завелась на API2?
хочу diff видеть.
Go to the top of the page
+Quote Post
Setuper
сообщение 27.2.2009, 13:35
Сообщение #40


RusHub team lead
**************

Группа: Модераторы
Сообщений: 4 030
Регистрация: 20.6.2008
Из: г. Королёв (Моск. обл.)
Пользователь №: 46
Спасибо сказали: 1708 раз




Обсуждения этого велись тут: http://mydc.ru/ipb.html?s=&showtopic=1...ost&p=10185
Go to the top of the page
+Quote Post

2 страниц V  < 1 2
Тема закрытаНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

Collapse

> Похожие темы

  Тема Ответов Автор Просмотров Последнее сообщение
No New Posts Sqlite
Unix | База данных
3 Setuper 10 719 10.2.2016, 21:15 Посл. сообщение: Alexey
No New Posts Запрос в базу данных sqlite клиента
Запрос и экспорт данных из базы данных sqlite клиента
9 derschaman 14 456 5.1.2011, 2:03 Посл. сообщение: Nickolya
No new Topic has attachmentsUserinfo [ By Nickolya ] [ Sqlite Db ] [ Lua5.1 ] [ Api 1 ]
API1 | Скрипт оффлайн информации по юзерам
20 Nickolya 26 072 2.11.2010, 9:05 Посл. сообщение: kool
No New Posts От: Дополнительные Библиотеки: Sqlite
От темы с ID: 7
12 BIMMER71 15 643 5.2.2009, 10:53 Посл. сообщение: Setuper
No New Posts Web Статистика С Использованием Единой Базы Данных Sqlite
1 Jaska 6 648 23.9.2008, 14:25 Посл. сообщение: Setuper

 



RSS Сейчас: 28.3.2024, 19:19