Jump to content

SQL save - problem


xiti

Recommended Posts

I have problem with my SQL save. I modificed the old MySQL to new SQL save with new mta 1.2 db functions and i now have problem but script dont save values to db file. I work maybe 3 days and i cant solve this problem. Please help me.

Here is my code:

  
sqlDefaultTable = "userdata" 
  
  
  
  
  
-- Connect to the database 
function mySQLConnect() 
    local server = dbConnect( "sqlite", "file.db" ) 
end 
addEventHandler("onResourceStart",getResourceRootElement(getThisResource()),mySQLConnect) 
  
  
  
  
-- Make a new entry to the mySQL database 
function checkSqlData(source) 
    local player = source 
    local serial = getPlayerSerial(player) 
    local server = dbConnect( "sqlite", "file.db" ) 
    local entryCheck = dbQuery(server,"SELECT serial FROM "..sqlDefaultTable.." WHERE serial='"..serial.."'") 
    if (entryCheck) then 
        local result = dbPoll(entryCheck,1,1) 
        if (result == "") or (result == nil) then 
            outputDebugString("New entry added to the mySQL database!") 
            dbQuery(server,"INSERT INTO "..sqlDefaultTable.." (serial) VALUES ('"..serial.."')") 
            dbExec(server,"UPDATE "..sqlDefaultTable.." SET playerName='"..string.gsub(getPlayerName(player),"#%x%x%x%x%x%x", "").."' WHERE serial='"..serial.."'") 
        end 
    else 
        outputDebugString("New entry added to the mySQL database!") 
        dbQuery(server,"INSERT INTO "..sqlDefaultTable.." (serial) VALUES ('"..serial.."')") 
        dbExec(server,"UPDATE "..sqlDefaultTable.." SET playerName='"..string.gsub(getPlayerName(player),"#%x%x%x%x%x%x", "").."' WHERE serial='"..serial.."'") 
    end 
end 
addEventHandler("onPlayerJoin",getRootElement(),checkSqlData) 
  
  
addEventHandler("onResourceStart",getResourceRootElement(getThisResource()), 
function() 
    for i,player in ipairs (getElementsByType("player")) do 
        checkSqlData(player) 
    end 
end) 
  
  
  
  
  
  
-- Load data from the database 
function loadPlayerData (player,datatype) 
    if (player) and (datatype) then 
        local serial = getPlayerSerial(player) 
        local server = dbConnect( "sqlite", "file.db" ) 
        local findQuery = dbQuery(server,"SELECT "..datatype.." FROM "..sqlDefaultTable.." WHERE serial='"..serial.."'") 
        if (findQuery) then 
            local result = dbPoll(findQuery,1,1) 
            if not (result == nil) then 
                if not (result == "") then 
                    dbFree(findQuery) 
                    return result 
                else 
                    dbFree(findQuery) 
                    return 0 
                end 
            else 
                return 0 
            end 
        else 
            --outputDebugString("Failed to get "..datatype.." for player "..getPlayerName(player).." @ findQuery") 
            --outputDebugString("mysql_query failed: (" .. mysql_errno(sqlConnection) .. ") " .. mysql_error(sqlConnection)) 
        end 
    end 
end 
  
  
  
  
  
-- Save data to the database 
function savePlayerData (player,datatype,newvalue) 
    if (player) and (datatype) and (newvalue) then 
        local serial = getPlayerSerial(player) 
        local server = dbConnect( "sqlite", "file.db" ) 
        local saveData = dbExec(server,"UPDATE "..sqlDefaultTable.." SET "..datatype.."='"..newvalue.."' WHERE serial='"..serial.."'") 
        if (saveData == nil) then 
            outputDebugString("Error executing the save query: (" .. mysql_errno(sqlConnection) .. ") " .. mysql_error(sqlConnection)) 
        end 
    end 
end 

Thanks for help.

Link to comment
local sqlHostname = "127.0.0.1" -- Hostname 
local sqlUsername = "pao13_dtr" -- Username 
local sqlPassword = "dtr4ever" -- Password 
local sqlDefaultDatabase = "pao13_dtr" -- Database 
local sqlDefaultTable = "userdata" -- Table 
  
-- Connect to the database 
function mySQLConnect() 
    local server = dbConnect("sqlite", "file.db") 
end 
addEventHandler("onResourceStart", getResourceRootElement(getThisResource()), mySQLConnect) 
  
-- Make a new entry to the MySQL database 
function checkSQLData(player) 
    local player = source 
    local serial = getPlayerSerial(player) 
    local entryCheck = dbQuery(mySQLConnect, "SELECT serial FROM " .. sqlDefaultTable .. " WHERE serial='" ..serial.. "'") 
    if (entryCheck) then 
        local result = dbPoll(entryCheck, 1, 1) 
        if (result == "") or (result == nil) then 
            outputDebugString("New entry added to the mySQL database!") 
            dbQuery(mySQLConnect, "INSERT INTO " .. sqlDefaultTable.." (serial) VALUES ('"..serial.."')") 
            dbExec(mySQLConnect, "UPDATE " .. sqlDefaultTable .. " SET playerName='".. string.gsub(getPlayerName(player), "#%x%x%x%x%x%x", "") .. "' WHERE serial='" .. serial .. "'") 
        end 
    else 
        outputDebugString("New entry added to the mySQL database!") 
        dbQuery(mySQLConnect,"INSERT INTO "..sqlDefaultTable.." (serial) VALUES ('"..serial.."')") 
        dbExec(mySQLConnect,"UPDATE " .. sqlDefaultTable .. " SET playerName='" .. string.gsub(getPlayerName(player),"#%x%x%x%x%x%x", "") .. "' WHERE serial='" .. serial .. "'") 
    end 
end 
addEventHandler("onPlayerJoin", getRootElement(), checkSQLData) 
  
addEventHandler("onResourceStart",getResourceRootElement(getThisResource()), 
    function() 
        for index, player in ipairs(getElementsByType("player")) do 
            checkSQLData(player) 
        end 
    end 
) 
  
-- Load data from the database 
function loadPlayerData(player, datatype) 
    if (player) and (datatype) then 
        local serial = getPlayerSerial(player) 
        local findQuery = dbQuery(mySQLConnect, "SELECT " .. datatype .. " FROM " .. sqlDefaultTable .. " WHERE serial='" .. serial .. "'") 
        if (findQuery) then 
            local result = dbPoll(findQuery, 1, 1) 
            if not (result == nil) then 
                if not (result == "") then 
                    dbFree(findQuery) 
                    return result 
                else 
                    dbFree(findQuery) 
                    return 0 
                end 
            else 
                return 0 
            end 
        else 
            --outputDebugString("Failed to get "..datatype.." for player "..getPlayerName(player).." @ findQuery") 
            --outputDebugString("mysql_query failed: (" .. mysql_errno(sqlConnection) .. ") " .. mysql_error(sqlConnection)) 
        end 
    end 
end 
  
-- Save data to the database 
function savePlayerData (player, datatype, newvalue) 
    if (player) and (datatype) and (newvalue) then 
        local serial = getPlayerSerial(player) 
        local saveData = dbExec(mySQLConnect, "UPDATE " .. sqlDefaultTable .. " SET " .. datatype .. "='" .. newvalue .. "' WHERE serial='" .. serial .. "'") 
        if (saveData == nil) then 
            outputDebugString("Error executing the save query: (" .. mysql_errno(sqlConnection) .. ") " .. mysql_error(sqlConnection)) 
        end 
    end 
end 

Link to comment

Thanks myonlake, this work and i now have other problem... When my script loadPlayerData that i have a error:

[2012-01-14 15:15:25] WARNING: userpanel\main_server.Lua:3250: Bad argument @ 'dbQuery' [Expected db-connection at argument 2, got string 'SELECT cash FROM userdata WHERE serial='****************************************************''] 
[2012-01-14 15:15:25] ERROR: userpanel\main_server.Lua:1078: bad argument #1 to 'tonumber' (value expected) 
 

In line 1078 i have this function:

function playingTimeAdd(thePlayer) 
    local totalPlayingTimeMinutes = tonumber(loadPlayerData(thePlayer,"totalPlayingTimeMinutes")) 
    local totalPlayingTimeHours = tonumber(loadPlayerData(thePlayer,"totalPlayingTimeHours")) 
    if totalPlayingTimeMinutes == 59 then 
        savePlayerData(thePlayer,"totalPlayingTimeMinutes",0) 
        savePlayerData(thePlayer,"totalPlayingTimeHours",totalPlayingTimeHours+1) 
    else 
        savePlayerData(thePlayer,"totalPlayingTimeMinutes",totalPlayingTimeMinutes+1) 
    end 
    local totalPlayingTimeMinutes = tonumber(loadPlayerData(thePlayer,"totalPlayingTimeMinutes")) 
    local totalPlayingTimeHours = tonumber(loadPlayerData(thePlayer,"totalPlayingTimeHours")) 
    callClientFunction(thePlayer,"refreshTimePlaying",totalPlayingTimeMinutes,totalPlayingTimeHours) 
    achievement21(thePlayer) 
    achievement22(thePlayer) 
end 
 

I think that is tonumber...

Please help...

Link to comment

That's wrong, his script was designed with Ryden's MySQL module, so is not sqlite.

local sqlHostname = "127.0.0.1" -- Hostname 
local sqlUsername = "pao13_dtr" -- Username 
local sqlPassword = "dtr4ever" -- Password 
local sqlDefaultDatabase = "pao13_dtr" -- Database 
local sqlDefaultTable = "userdata" -- Table 
  
-- Connect to the database 
function connect() 
    mySQLConnect = dbConnect( "mysql", "dbname="..tostring(sqlDefaultDatabase)..";host="..tostring(sqlHostname).."", tostring(sqlUsername), tostring(sqlPassword), "share=0" ) 
    for index, player in ipairs(getElementsByType("player")) do 
        checkSQLData(player) 
    end  
end 
addEventHandler("onResourceStart", resourceRoot, connect) 
  
-- Make a new entry to the MySQL database 
function checkSQLData(player) 
    local player = source 
    local serial = getPlayerSerial(player) 
    local entryCheck = dbQuery(mySQLConnect, "SELECT serial FROM " .. sqlDefaultTable .. " WHERE serial='" ..serial.. "'") 
    if (entryCheck) then 
        local result = dbPoll(entryCheck, 1, 1) 
        if (result == "") or (result == nil) then 
            outputDebugString("New entry added to the mySQL database!") 
            dbQuery(mySQLConnect, "INSERT INTO " .. sqlDefaultTable.." (serial) VALUES ('"..serial.."')") 
            dbExec(mySQLConnect, "UPDATE " .. sqlDefaultTable .. " SET playerName='".. string.gsub(getPlayerName(player), "#%x%x%x%x%x%x", "") .. "' WHERE serial='" .. serial .. "'") 
        end 
    else 
        outputDebugString("New entry added to the mySQL database!") 
        dbQuery(mySQLConnect,"INSERT INTO "..sqlDefaultTable.." (serial) VALUES ('"..serial.."')") 
        dbExec(mySQLConnect,"UPDATE " .. sqlDefaultTable .. " SET playerName='" .. string.gsub(getPlayerName(player),"#%x%x%x%x%x%x", "") .. "' WHERE serial='" .. serial .. "'") 
    end 
end 
addEventHandler("onPlayerJoin", getRootElement(), checkSQLData) 
  
-- Load data from the database 
function loadPlayerData(player, datatype) 
    if (player) and (datatype) then 
        local serial = getPlayerSerial(player) 
        local findQuery = dbQuery(mySQLConnect, "SELECT " .. datatype .. " FROM " .. sqlDefaultTable .. " WHERE serial='" .. serial .. "'") 
        if (findQuery) then 
            local result = dbPoll(findQuery, 1, 1) 
            if not (result == nil) then 
                if not (result == "") then 
                    dbFree(findQuery) 
                    return result 
                else 
                    dbFree(findQuery) 
                    return 0 
                end 
            else 
                return 0 
            end 
        else 
            --outputDebugString("Failed to get "..datatype.." for player "..getPlayerName(player).." @ findQuery") 
            --outputDebugString("mysql_query failed: (" .. mysql_errno(sqlConnection) .. ") " .. mysql_error(sqlConnection)) 
        end 
    end 
end 
  
-- Save data to the database 
function savePlayerData (player, datatype, newvalue) 
    if (player) and (datatype) and (newvalue) then 
        local serial = getPlayerSerial(player) 
        local saveData = dbExec(mySQLConnect, "UPDATE " .. sqlDefaultTable .. " SET " .. datatype .. "='" .. newvalue .. "' WHERE serial='" .. serial .. "'") 
        if (saveData == nil) then 
            --outputDebugString("Error executing the save query: (" .. mysql_errno(sqlConnection) .. ") " .. mysql_error(sqlConnection)) 
        end 
    end 
end 
 
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...