Использование системы в различных ситуациях, вопросы программирования сценариев.
Модератор: immortal
-
ipz
- Сообщения: 238
- Зарегистрирован: Чт ноя 26, 2015 10:54 pm
-
Благодарил (а):
38 раз
-
Поблагодарили:
45 раз
Сообщение
ipz » Вс дек 27, 2015 5:24 pm
Закомментировал у себя самое начало функции getProperty:
Код: Выделить всё
if ($this->object_title) {
$value=SQLSelectOne("SELECT VALUE FROM pvalues WHERE PROPERTY_NAME = '".DBSafe($this->object_title.'.'.$property)."'");
if (isset($value['VALUE'])) {
startMeasure('getPropertyCached2');
endMeasure('getPropertyCached2', 1);
endMeasure('getProperty ('.$property.')', 1);
endMeasure('getProperty', 1);
return $value['VALUE'];
}
-
ipz
- Сообщения: 238
- Зарегистрирован: Чт ноя 26, 2015 10:54 pm
-
Благодарил (а):
38 раз
-
Поблагодарили:
45 раз
Сообщение
ipz » Вс дек 27, 2015 5:26 pm
Добавил 2 строчки в функции setProperty:
Код: Выделить всё
function setProperty($property, $value, $no_linked=0) {
startMeasure('setProperty');
startMeasure('setProperty ('.$property.')');
$id=$this->getPropertyByName($property, $this->class_id, $this->id);
$old_value='';
$cached_name='MJD:'.$this->object_title.'.'.$property;
if ($id) {
$prop=SQLSelectOne("SELECT * FROM properties WHERE ID='".$id."'");
$v=SQLSelectOne("SELECT * FROM pvalues WHERE PROPERTY_ID='".(int)$id."' AND OBJECT_ID='".(int)$this->id."'");
$old_value=$v['VALUE'];
$v['VALUE']=$value;
if ($v['ID']) {
$v['UPDATED']=date('Y-m-d H:i:s');
if ($old_value!=$value) {
SQLUpdate('pvalues', $v);
} else {
SQLUpdate('pvalues', $v);
} else {
SQLExec("UPDATE pvalues SET UPDATED='".$v['UPDATED']."' WHERE ID='".$v['ID']."'");
}
} else {
$v['PROPERTY_ID']=$id;
$v['OBJECT_ID']=$this->id;
$v['VALUE']=$value;
$v['UPDATED']=date('Y-m-d H:i:s');
$v['PROPERTY_NAME']=$this->object_title.'.'.$property; // <--- ЗДЕСЬ
$v['ID']=SQLInsert('pvalues', $v);
}
//DebMes(" $id to $value ");
} else {
$prop=array();
$prop['OBJECT_ID']=$this->id;
$prop['TITLE']=$property;
$prop['ID']=SQLInsert('properties', $prop);
$v['PROPERTY_ID']=$prop['ID'];
$v['OBJECT_ID']=$this->id;
$v['VALUE']=$value;
$v['UPDATED']=date('Y-m-d H:i:s');
$v['PROPERTY_NAME']=$this->object_title.'.'.$property; // <--- ЗДЕСЬ
$v['ID']=SQLInsert('pvalues', $v);
}
// ...
-
ipz
- Сообщения: 238
- Зарегистрирован: Чт ноя 26, 2015 10:54 pm
-
Благодарил (а):
38 раз
-
Поблагодарили:
45 раз
Сообщение
ipz » Вс дек 27, 2015 5:29 pm
Поломанные связи починил частично вручную, потом надоело и сваял (как умею, есичо):
Код: Выделить всё
$sql = "SELECT pvalues . *, properties.ID AS P_ID, properties.CLASS_ID AS P_CLASS_ID, objects.TITLE AS O_TITLE, objects.ID AS O_ID, objects.CLASS_ID AS O_CLASS_ID
FROM pvalues LEFT JOIN properties ON pvalues.PROPERTY_ID = properties.id, objects
WHERE objects.ID=pvalues.OBJECT_ID
AND properties.ID IS NULL";
$list=SQLSelect($sql);
$total=count($list);
/*
$header="<table border=1><caption>Список ". $total . " объектов</caption> <tr>"; //" <th>ID</th><th>TITLE</th> <th>Nick</th> <th>OnLine</th> <th>LastSeen</th> <th>LastSeenTime</th><th>LastSeenTimeAgo</th>";
$body="";
for ($i=0;$i<$total;$i++) {
$row="<tr>";
foreach ($list[$i] as $index => $val) {
if(!$i){
$header.= "<th>" . $index . "</th>";
}
$row .= "<td>" . $val . "</td>";
}
$row .= "</tr>";
$body .= $row . "</tr>";
}
$header .= "</tr>";
sg('ThisComputer.Debug', $header . $body . "</table>");
*/
for ($i=0; $i<$total;$i++){
$class=$list[$i]['O_TITLE'];
$class_id= $list[$i]['O_CLASS_ID'];
$property_name=$list[$i]['PROPERTY_NAME'];
$property =explode(".",$property_name);
if(isset($property[1])){
// Восстанавливаем свойства классов в properties. Все потерянные свойства будут приписаны базовому классу.
$sqlQuery = "SELECT ID
FROM properties
WHERE TITLE LIKE '" . DBSafe($property[1]) . "'
AND OBJECT_ID = 0
AND CLASS_ID = '" . $class_id . "'";
$prop = SQLSelectOne($sqlQuery);
if (!$prop['ID'])
{
$prop = array();
$prop['CLASS_ID'] = $class_id;
$prop['TITLE'] = $property[1];
$prop['KEEP_HISTORY'] = 0;
$prop['OBJECT_ID'] = 0;
$prop['ID'] = SQLInsert('properties', $prop);
}
// Восстанавливаем связи в таблице значений
$sqlQuery = "UPDATE pvalues
SET PROPERTY_ID = '" . $prop['ID'] . "',
OBJECT_ID = '" . $list[$i]['O_ID'] . "'
WHERE ID = '" . $list[$i]['ID'] . "'"; //DBSafe($ID)
SQLExec($sqlQuery);
}
}
-
ipz
- Сообщения: 238
- Зарегистрирован: Чт ноя 26, 2015 10:54 pm
-
Благодарил (а):
38 раз
-
Поблагодарили:
45 раз
Сообщение
ipz » Вс дек 27, 2015 5:32 pm
Осталось таблицу методов проверить. С ними тоже наблюдается 'странное'.
-
condor77
- Сообщения: 36
- Зарегистрирован: Пн окт 30, 2017 9:54 am
-
Благодарил (а):
8 раз
-
Поблагодарили:
2 раза
Сообщение
condor77 » Вт мар 27, 2018 10:51 am
Добрый день. Обнаружил что перестало работать удалённое управление вообще.
Оказалось что исчезли (по крайней мере я их не вижу) все свойства и методы классов. Остались только по одному два свойства которые были у самих объектов. Пробовал обновить систему. Не помогло. Пробовал восстанавливать из файла бэкапа. Результат то-же.
В х-рей вроде ругается на шедулер. Но что эта информация даёт? Я и так знаю что таймер не запускается. Ведь исчезли методы и в классе таймера. Может кто подскажет куда смотреть.
-
slgeo
- Сообщения: 551
- Зарегистрирован: Чт фев 05, 2015 2:35 pm
- Откуда: РнД
-
Благодарил (а):
139 раз
-
Поблагодарили:
74 раза
Сообщение
slgeo » Ср мар 28, 2018 10:26 am
Попробуйте вручную через phpmyadmin накатить скрипт обновления базы.
- За это сообщение автора slgeo поблагодарил:
- condor77 (Чт мар 29, 2018 3:26 pm)
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
-
condor77
- Сообщения: 36
- Зарегистрирован: Пн окт 30, 2017 9:54 am
-
Благодарил (а):
8 раз
-
Поблагодарили:
2 раза
Сообщение
condor77 » Ср мар 28, 2018 2:05 pm
А вот тут упс. Не совсем программист. Зайти в phpmyadmin могу но что дальше в нём и как делать это увы пока для меня тяжко.
А можно чуть подробнее для отставших. Или ткните где это описано.
-
slgeo
- Сообщения: 551
- Зарегистрирован: Чт фев 05, 2015 2:35 pm
- Откуда: РнД
-
Благодарил (а):
139 раз
-
Поблагодарили:
74 раза
Сообщение
slgeo » Ср мар 28, 2018 3:09 pm
Найдите в основном каталоге файл с дампом базы (*.sql), в папках backup должен быть.
В phpmyadmin выделите db_terminal и сделайте импорт из файла.
- За это сообщение автора slgeo поблагодарили (всего 2):
- condor77 (Чт мар 29, 2018 3:26 pm) • zroman07 (Пт янв 14, 2022 11:33 am)
Raspberry Pi2 Model B + NRF24L01 (MySensors) + 1-Wire + Esp8266 (WiFi-IoT)
CONNECT
-
condor77
- Сообщения: 36
- Зарегистрирован: Пн окт 30, 2017 9:54 am
-
Благодарил (а):
8 раз
-
Поблагодарили:
2 раза
Сообщение
condor77 » Чт мар 29, 2018 3:25 pm
О, спасибо, помогло. Сам бы никогда не додумался.