Sqlite, win32 | База данных (устаревшая полурабочая версия) |
Здравствуйте, гость ( Вход | Регистрация )
Sqlite, win32 | База данных (устаревшая полурабочая версия) |
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 |
|
|
6.2.2009, 18:51
Сообщение
#22
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
И что это? Просили же 2 таблицы, а тут я что-то не вижу 2 таблиц!
|
|
|
7.2.2009, 0:43
Сообщение
#23
|
|
Активный участник Группа: Заблокированные Сообщений: 87 Регистрация: 16.10.2008 Пользователь №: 805 Спасибо сказали: 35 раз |
И что это? Просили же 2 таблицы, а тут я что-то не вижу 2 таблиц! Ну значит ничего не изменилось в новой библиотеке Я конечно спрошу еще раз, но... И еще, я в принципе чайник по базам данных, но почему надо обязательно создавать несколько таблиц в одной базе? Несколько баз создать религия не позволяет? В общем, он ответил примерно то, что сказал я: Цитата [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 Перевод. Похоже, есть проблема с добавлением нескольких таблиц в базу. Пока она не решится, советую добавлять несколько полей в таблицу, либо использовать вторую базу/файл. |
|
|
7.2.2009, 11:55
Сообщение
#24
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Так может говорить только человек, который далёк от принципа построения баз данных, видимо Мутор далёк от этого.
Построение базы данных - это не лёгкая задача, в противном случае база данных будет работать не эффективно. Сначала строится так называемая ER-модель базы данных, после этого эта модель проектируется на реляционную базу данных и уже потом всё переносится на конкретный язык бд. Таблица на первом этапе построения бд - это основной элемент. |
|
|
7.2.2009, 12:14
Сообщение
#25
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
меня интересует почему он подключает вот это:
Код require "sqlite3" А так же меня интересует как он это делает. При попытке это сделать мой хаб запросил ещё две библиотеки lua5.1.dll и msvcr80.dll После чего птока выдала ошибку подключения библиотеки |
|
|
7.2.2009, 13:54
Сообщение
#26
|
|
Местный Группа: Неактивированные Сообщений: 908 Регистрация: 26.12.2008 Пользователь №: 1 574 Спасибо сказали: 1406 раз |
меня интересует почему он подключает вот это: Код require "sqlite3" http://mydc.ru/ipb.html?s=&showtopic=1...post&p=8895 |
|
|
7.2.2009, 17:12
Сообщение
#27
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Можно подключать любым из способов, однако более расширенный способ подключения, который автоматически ищет точку входа в длл, является require "sqlite3"
|
|
|
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 то результат я писал ранее! Объясните мне |
|
|
7.2.2009, 20:43
Сообщение
#29
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Операция:
Код require "sqlite3" подключает модуль sqlite3. Модуль подключается из файла sqlite3.lua. В ошибках интерпретатор написал где он ищет этот файл, а он наверняка у тебя лежит в папке scripts.
|
|
|
7.2.2009, 21:20
Сообщение
#30
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
не пашет этот скрипт мутора.....
|
|
|
24.2.2009, 21:20
Сообщение
#31
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Ура! alex82 получил рабочую библиотеку под API2.
Прикладываю эту библиотеку: PXSqlite3.rar ( 159.33 килобайт ) Кол-во скачиваний: 7 Также перезалил библиотеку в первом посту. |
|
|
24.2.2009, 22:27
Сообщение
#32
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
2Setuper: раз уж так всё хорошо, можно ли услышать пару слов о БД. Ты где то обмолвился о структуре. Можешь рассказать что к чему? К примеру будет ли смысл в переходе с одной таблицы в текстовом файле к одной таблицы в БД? Стоит ли хранить в БД маленькие таблицы которые моно и в текстовый файл запхнуть?
PS: alex82 поздравляю и огромное спасибо!!! |
|
|
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 этапа при построении оптимизированной базы данных. |
|
|
24.2.2009, 22:37
Сообщение
#34
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
а можно какой нибудь примерчик в двух словах?
|
|
|
24.2.2009, 22:44
Сообщение
#35
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
В бд можно хранить всё, но на мой взгляд я думаю следует писать модульно. То есть подключать модуль работы с какой-то базой данных. Это даст возможность работать не с одним типов базы данных. Также не нужно забывать и хранение всей информации в обыкновенных файлах - это же конечно крайний и не оптимизированный случай, но всё же если у кого-то нет возможности установки базы данных или ещё какая-то другая причина. В общем я сейчас я стараюсь как раз таки написать универсальный модуль для подключения различных средств хранения информации - идей очень много не знаю за что прямо браться)))
В двух словах это не опишешь. Хорошие примеры написаны в книжках по SQL. Я просто изучал базы данных в институте и сдавал по ним экзамен, в качестве курсового проекта по базам данных мною была разработана и представлена как раз таки база данных для моего SBot'а. |
|
|
24.2.2009, 23:09
Сообщение
#36
|
|
Самый главный активист :-D Группа: Модераторы Сообщений: 2 790 Регистрация: 29.6.2008 Из: г. Тула Пользователь №: 97 Спасибо сказали: 440 раз |
Жаль(((( Просто с сегодняшними моими познаниями я бы создал в БД одну таблицу где была бы вся информация о пользователях. Возможно я так и сделаю ибо времени катастрофически не хватает на изучение(((
upd: думается связь осуществляется с помощью поля идентификатора(id)? при заходе пользователя в каждой таблице БД создаётся запись с одинаковым ид что в дальнейшем служит связью этих таблиц, так? |
|
|
24.2.2009, 23:46
Сообщение
#37
|
|
RusHub team lead Группа: Модераторы Сообщений: 4 030 Регистрация: 20.6.2008 Из: г. Королёв (Моск. обл.) Пользователь №: 46 Спасибо сказали: 1708 раз |
Связи бывают разными, и осуществляться они могут разными способами. Ты привёл один из способов, который осуществим в sqlite только по средствам триггеров.
|
|
|
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, }, полная таблица юзера конечно больше но она немного уменьшена в следствии использования большого количества памяти! |
|
|
27.2.2009, 10:41
Сообщение
#39
|
|
InstaHub dev. Группа: Пользователи Сообщений: 91 Регистрация: 25.2.2009 Пользователь №: 2 377 Спасибо сказали: 10 раз |
|
|
|
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
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последнее сообщение | |
---|---|---|---|---|---|
Sqlite Unix | База данных |
3 | Setuper | 11 200 | 10.2.2016, 21:15 Посл. сообщение: Alexey | |
Запрос в базу данных sqlite клиента Запрос и экспорт данных из базы данных sqlite клиента |
9 | derschaman | 15 250 | 5.1.2011, 2:03 Посл. сообщение: Nickolya | |
Userinfo [ By Nickolya ] [ Sqlite Db ] [ Lua5.1 ] [ Api 1 ] API1 | Скрипт оффлайн информации по юзерам |
20 | Nickolya | 27 713 | 2.11.2010, 9:05 Посл. сообщение: kool | |
От: Дополнительные Библиотеки: Sqlite От темы с ID: 7 |
12 | BIMMER71 | 16 547 | 5.2.2009, 10:53 Посл. сообщение: Setuper | |
Web Статистика С Использованием Единой Базы Данных Sqlite | 1 | Jaska | 7 002 | 23.9.2008, 14:25 Посл. сообщение: Setuper |
|
Сейчас: 26.11.2024, 22:58 |