【问题标题】:Corona Runtime Error "attempt to concatenate field '?' (a nil value)"电晕运行时错误“尝试连接字段'?' (零值)“
【发布时间】:2018-01-05 08:36:39
【问题描述】:

我在我的移动应用程序移交项目中有这个 8 个问题的调查。起初,电晕没有提示我任何错误消息,应用程序运行良好,但是当我再添加 2 个问题时,我开始收到此消息错误 我不确定为什么错误是“零值”,但我的代码看起来像这样。(第 662 到 678 行)

        function  checkEBASComplete()
        local tempScore = 0
        for i = 1, 10 do
            print("EBAS:"..ebasRating_Arr[i])
            tempScore = tempScore + ebasRating_Arr[i]

            if (ebasRating_Arr[i] == -1) then
                ebasScore = 0
                ebasScore_text.text = "Test Incomplete"
            else
                ebasScore = tempScore
                ebasScore_text.text = tostring(ebasScore)
            end

        end

        tempScore = 0
    end

    checkEBASComplete()

我在第 110 行有类似的内容。我只是在后面添加了 2 个“-1”

 local ebasRating_Arr = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}

有人能帮我解决这个问题吗?感谢所有帮助:D

新问题------------------------------ ---------

这是我从第 705 行到第 711 行的代码

function saveResults()

        local q = [[UPDATE EBAS_DEP SET rating1=']]..ebasRating_Arr[1] .. [[',rating2=']] .. ebasRating_Arr[2] .. [[',rating3=']] .. ebasRating_Arr[3] .. [[',rating4=']] .. ebasRating_Arr[4] .. [[',rating5=']] .. ebasRating_Arr[5] .. [[',rating6=']] .. ebasRating_Arr[6] .. [[',rating7=']] .. ebasRating_Arr[7] .. [[',rating8=']] .. ebasRating_Arr[8] .. [[',rating9=']] .. ebasRating_Arr[9] .. [[',rating10=']] .. ebasRating_Arr[10] .. [[',rating11=']] .. amtRating_Arr[1] .. [[',rating12=']] .. amtRating_Arr[2] .. [[',rating13=']] .. amtRating_Arr[3] .. [[',rating14=']] .. amtRating_Arr[4] .. [[',rating15=']] .. amtRating_Arr[5] .. [[',rating16=']] .. amtRating_Arr[6] .. [[',rating17=']] .. amtRating_Arr[7] .. [[',rating18=']] .. amtRating_Arr[8] .. [[',rating19=']] .. amtRating_Arr[9] .. [[',rating20=']] .. amtRating_Arr[10] .. [[',rating21=']] .. amtRating_Arr[11] .. [[',ebas_score=']] .. ebasScore ..[[',amt_score=']] .. amtScore ..  [['WHERE id=']].. _G.EBAS_ID..[[';]]
        db:exec( q )
        print(db:errcode(), db:errmsg())

    end

【问题讨论】:

    标签: lua coronasdk


    【解决方案1】:

    当您的ebasRating_Arr 对于checkEBASComplete 函数内的for 循环来说太短时,就会发生错误。您的原始表只有 8 个条目,但您的 for 循环检查表的 10 个条目。这意味着当您尝试访问 9. 条目时,会发生错误,因为它不存在。

    我建议将固定的 for 循环从 1 to 10 更改为相对的 for 循环 1 to the end of the array。这将适用于 #array(或 Lua 中的表)运算符。您的代码如下所示:

    function checkEBASComplete()
        local tempScore = 0
        for i = 1, #ebasRating_Arr do       -- Changed to relative for-loop
            print("EBAS:"..ebasRating_Arr[i])
            tempScore = tempScore + ebasRating_Arr[i]
            if (ebasRating_Arr[i] == -1) then
                ebasScore = 0
                ebasScore_text.text = "Test Incomplete"
            else
                ebasScore = tempScore
                ebasScore_text.text = tostring(ebasScore)
            end
        end
        tempScore = 0
    end
    

    【讨论】:

    • 嗨,感谢它的帮助,但它让我遇到了另一个类似的错误。我会在帖子中添加它,请告诉我哪里出错了。非常感谢您的帮助
    • 又是同样的错误 :D 您正试图在一个不存在的位置访问表...您可以通过在此查询之前编写一个简单的if-statement 来防止这种情况或通过循环(从答案中循环)结果并将它们添加到q 字符串。如果您还有其他问题,请将它们作为单独的问题发布。
    • 好的,谢谢你的帮助!!真的很感激:DD
    • 不好意思再问一次,是不是我的表没有正确创建?因为我确定我的数据库中有问题 1 到 10。还是有点迷茫
    • 由于我不知道您是如何创建表格的,所以我无法确定。但是您的问题如下:您有一个包含n 条目的表。在这种情况下,n 可能是 9 或 10 或 8 个值,因为您检查表是否全部为 10(checkEBAScomplete 函数)。它可以是完整的 (10) 或不完整的 (9)。如果它完成了,那么您可以通过值 1 到 10 并且一切正常。但是,如果表格不完整,您也需要查看表格。如果它有 9 个条目,您不能从 1 迭代到 10,但必须迭代到第 9 个值,因为 10 不存在。
    猜你喜欢
    • 1970-01-01
    • 2018-07-04
    • 2016-07-26
    • 1970-01-01
    • 2014-03-26
    • 2013-07-06
    • 2015-08-31
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多