Ошибка SetValue

Страницы: 1
RSS
Ошибка SetValue
 
Вот функция для установки значения в ячейке.
Код
function QTable:SetValue(row, col_name, data, formatted)
   -- Установить значение в ячейке
   local col_ind = self.columns[col_name].id or nil   
   if col_ind == nil then
      return false
   end
   local col_type = self.columns[col_name].c_type
   if row==nil or col_name==nil or data==nil or col_ind==nil then
      message ((row  or "nil").." | "..(col_name  or "nil").." | "..(data  or "nil").." | "..(col_ind or "nil")),1)
   end   
   if self.data[row][col_ind]==data then return true end
   self.data[row][col_ind]=data
   local col_type = self.columns[col_name].c_type
   -- если для числового столбца дано НЕчисловое значение, то применяем к нему tonumber
   if type(data) ~= "number" and (col_type==QTABLE_INT_TYPE or col_type==QTABLE_DOUBLE_TYPE or col_type==QTABLE_INT64_TYPE) then
      data = tonumber(data) or 0
   end
   -- если для НЕстрокового значения уже дан отформатированный вариант, то сначала используется он
   if formatted and col_type~=QTABLE_STRING_TYPE and col_type~=QTABLE_CACHED_STRING_TYPE then
      return SetCell(self.t_id, row, col_ind, formatted, data)
   end
   -- если для столбца задана функция форматирования, то она используется
   local ff = self.columns[col_name].format_function
   if type(ff) == "function" then
      -- в качестве строкового представления используется
      -- результат выполнения функции форматирования
      if col_type==QTABLE_STRING_TYPE or col_type==QTABLE_CACHED_STRING_TYPE then
         return SetCell(self.t_id, row, col_ind, ff(data))
      else
         return SetCell(self.t_id, row, col_ind, ff(data), data)
      end
   else
      if col_type==QTABLE_STRING_TYPE or col_type==QTABLE_CACHED_STRING_TYPE then
         return SetCell(self.t_id, row, col_ind, tostring(data))
      else
         return SetCell(self.t_id, row, col_ind, tostring(data), data)
      end
   end
end

Она  служит мне верой и правдой. Но иногда она выдает такую ошибку:

Это он ругается на строчку if self.data[row][col_ind]==data then return true end
Внутри колбека это не приводит к выбиванию скрипта, поэтому я продолжаю работать с ней. Важно: эта ошибка приходит в первую секунду после запуска, когда какое то значение ещё не определено. Потом всё работает хорошо.
Вы можете видеть, что я пытаюсь отловить эту ошибку через message, но он спокойно проходит эту проверку.
Подскажите где искать иэтот "нил"
 
Речь идёт про строчку 11-ю сверху
 
Цитата
Let_it_go написал:
Вы можете видеть, что я пытаюсь отловить эту ошибку через message, но он спокойно проходит эту проверку.
Подскажите где искать иэтот "нил"
Добрый день.
Предположу, что дело не в переменных
Код
   row, col_name, data, col_ind
раз скрипт не заходит внутрь
Код
   if row==nil or col_name==nil or data==nil or col_ind==nil then
      message ((row  or "nil").." | "..(col_name  or "nil").." | "..(data  or "nil").." | "..(col_ind or "nil")),1)
   end   
значит они имеют какое-то значение отличное от nil.
Перепишите проблемную строчку вот так:
Код
if self.data and self.data[row] and self.data[row][col_ind] and self.data[row][col_ind]==data then return true end
Дословно - если self.data не nil И таблица self.data имеет запись с ключом row И таблица self.data[row] имеет запись col_ind тогда выполняем проверку значений этой многоуровневой таблицы.
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
Возможно проверку существования self.data[row][col_ind] делать и не надо, поэкспирементируйте, думаю достаточно и так:
Код
if self.data and self.data[row] and self.data[row][col_ind]==data then return true end
Перед тем как задать вопрос, убедитесь, что решение Вашей задачи не описано в официальном мануале - 'Использование Lua в Рабочем месте QUIK.pdf' https://arqatech.com/upload/Public/quik_lua.zip
 
вместо кучи message используй сообщение отладки PrintDbgStr("QLua: row=" .. row .. " col_ind=" .. col_ind)
self.data[row][]
и
просмотр https://docs.microsoft.com/en-us/sysinternals/downloads/debugview
при открытии сделай фильтр по "QLua"
Страницы: 1
Читают тему
Наверх