Автор Тема: Firebird Maestro и PVD  (Прочитано 22519 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн NewSky

  • Гуру
  • ****
  • Сообщений: 842
Firebird Maestro и PVD
« : 03 Мая 2009, 17:49:28 »
Вопос к "гуру"... Давно появилась необходимость, к определенным фильмам, массово присвоить определенное значение пользовательского поля. Средствами программы, увы, это сделать невозможно. Может быть есть возможность по средствам сабжа, "руками" применить нужные значения?

Пример: Есть фильмы с постерами, а все остальные, без постеров нужно пометить пользовательским полем. Это как то реально или даже не стоит париться?

Оффлайн Reset

  • Глобальный модератор
  • *****
  • Сообщений: 1362
Re: Firebird Maestro и PVD
« Ответ #1 : 03 Мая 2009, 21:59:45 »
Вопос к "гуру"... Давно появилась необходимость, к определенным фильмам, массово присвоить определенное значение пользовательского поля. Средствами программы, увы, это сделать невозможно. Может быть есть возможность по средствам сабжа, "руками" применить нужные значения?

Пример: Есть фильмы с постерами, а все остальные, без постеров нужно пометить пользовательским полем. Это как то реально или даже не стоит париться?
Реально-то это реально.
А ты с головной болью дружишь? Если нет, то лучше и не начинать.
Если дружишь, подумай, а тебе оно вообще надо? Если нет, то лучше и не начинать.
Если надо, то:
1. В таблице CUSTOM_FIELDS_MOVIES на вкладке Data ищешь своё поле и запомнаешь его cmfid.
2. Tools -> SQL Editor.
3.
UPDATE
  CUSTOM_VALUES_TYPE
SET
  "value" = new_value
WHERE
  "cmfid" = ID
CUSTOM_VALUES_TYPE заменяешь на CUSTOM_VALUES_INT, CUSTOM_VALUES_LONGSTR, CUSTOM_VALUES_REAL, CUSTOM_VALUES_SHORTSTR, в зависимости от типа пользовательского поля.
new_value заменяешь на число или строку в одинарных кавычках, или -1 для флагов.
ID заменяешь на запомненный в п.1 cmfid.
4. Execute query.

Ну вот надо оно тебе всё это? А?
Нет описания? Нужны ответы? Есть предложения? Не хватает сайтов?

Оффлайн nostra

  • Администратор
  • *****
  • Сообщений: 2749
    • Personal Video Database
Re: Firebird Maestro и PVD
« Ответ #2 : 04 Мая 2009, 00:46:01 »
Вообще-то NewSky по-моему имел ввиду что-то типа этого:
UPDATE
  CUSTOM_VALUES_TYPE
SET
  "value" = new_value
WHERE
  ("cmfid" = ID) AND
  (NOT EXISTS(SELECT FIRST 1 FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_TYPE."mid") AND ("imgtype" = 0)))

Проблема только в том, что если польз. полю никогда не присваивалось значения, то и записи для этого фильма в CUSTOM_VALUES_TYPE не будет и соответсвенно даже если у фильма нет постеров, значение установлено не будет.
Мы уже работаем над постановлением по углублению конструктивных мер, принятых в результате консолидации

Оффлайн NewSky

  • Гуру
  • ****
  • Сообщений: 842
Re: Firebird Maestro и PVD
« Ответ #3 : 04 Мая 2009, 03:02:38 »
Reset, nostra, Спасибо за оказанную помощь!
Но пока у меня вот такая ошибка:
SQL Error:  Dynamic SQL Error SQL error code = -104 Token unknown - line 7, column 30 FROM. Error Code: -104. can't format message 13:896 -- message file C:\Program Files\SQL Maestro Group\Firebird Maestro\firebird.msg not found The SQL: UPDATE
  CUSTOM_VALUES_TYPE
SET
  "value" = '5'
WHERE
  ("cmfid" = 36) AND
  (NOT EXISTS(SELECT FIRST 1 FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_TYPE."mid") AND ("imgtype" = 0)))
;
На вот такой запрос:
UPDATE
  CUSTOM_VALUES_TYPE
SET
  "value" = '5'
WHERE
  ("cmfid" = 36) AND
  (NOT EXISTS(SELECT FIRST 1 FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_TYPE."mid") AND ("imgtype" = 0)))

Напишу более подробно, может быть это поможет составить правильный запрос, а то пока тишина....

1) Необходимо присвоить значение ко всем фильмам не имеющим постера.
2) Пользовательское поле имеет cmfid 36 и customtype 5
3) Запись о нужном значении поля: CUSTOM_VALUES_SHORTSTR cmfid 36 value Нет Заглавного Постера

Цитировать
Проблема только в том, что если польз. полю никогда не присваивалось значения, то и записи для этого фильма в CUSTOM_VALUES_TYPE не будет и соответсвенно даже если у фильма нет постеров, значение установлено не будет.

Из этого ничего не понял... я один фильм руками пометил. Значит ли это, что теперь "полю присвоено значение" и имеются прочие отрибуты для того, что бы составить запрос и применить необходимые изменения?

УПС
Забыл сказать, что постеры хранятся ВНЕ базы (если это важно)...
« Последнее редактирование: 04 Мая 2009, 03:06:03 от NewSky »

Оффлайн Reset

  • Глобальный модератор
  • *****
  • Сообщений: 1362
Re: Firebird Maestro и PVD
« Ответ #4 : 04 Мая 2009, 06:53:11 »
Вообще-то NewSky по-моему имел ввиду что-то типа этого:
Беда оказалась бедее, чем я думал.
[off-topic]Но моя задница чувствовала это заранее :)[/off-topic]
Я про изображения совсем забыл, пока с пользовательскими полями разбирался. Звиняйте.

Цитировать
Проблема только в том, что если польз. полю никогда не присваивалось значения, то и записи для этого фильма в CUSTOM_VALUES_TYPE не будет и соответсвенно даже если у фильма нет постеров, значение установлено не будет.

Из этого ничего не понял... я один фильм руками пометил. Значит ли это, что теперь "полю присвоено значение" и имеются прочие отрибуты для того, что бы составить запрос и применить необходимые изменения?
И здесь моя мозга меня подвела. :(
Запрос сработает только для тех фильмов, у которых в этом поле уже что-нибудь есть. Если поле для какого-то фильма пустое, то оно так и останется пустым.

Тебя должно было бы спасти следующее:
INSERT INTO
  CUSTOM_VALUES_SHORTSTR
  ("cmfid", "mid", "value")
  SELECT
    '36' as "cmfid", "mid", 'Нет Заглавного Постера' as "value"
  FROM
    MOVIES
  WHERE
    "mid" NOT IN (SELECT "mid" FROM CUSTOM_VALUES_SHORTSTR WHERE "cmfid" = '36') AND
    "visible" = -1 AND
    (NOT EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = MOVIES."mid") AND ("imgtype" = 0)));
 
UPDATE
  CUSTOM_VALUES_SHORTSTR
SET
  "value" = 'Нет Заглавного Постера'
WHERE
  ("cmfid" = 36) AND
  (NOT EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_SHORTSTR."mid") AND ("imgtype" = 0)));

UPDATE
  CUSTOM_VALUES_SHORTSTR
SET
  "value" = ''
WHERE
  ("cmfid" = 36) AND
  (EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_SHORTSTR."mid") AND ("imgtype" = 0))); 
Но не спасает. База обновляется, а программа этого почему-то не видит. Я не смог разобраться, в чем причина.  :(

И тут у меня родилось предложение к nostra. Что если в программу добавить что-то вроде создания триггеров? Пользователь задаёт условия, например, как в расширенном поиске, и указывает, какое поле должно получить какое значение при выполнении или невыполнениии этих условий. Другой вопрос, многим ли это нужно?

ЗЫ: NewSky, бросай это дело, пока нас с ума не свёл ;)
Нет описания? Нужны ответы? Есть предложения? Не хватает сайтов?

Оффлайн moran

  • Гуру
  • ****
  • Сообщений: 403
  • Пиво - тоже компонента...
Re: Firebird Maestro и PVD
« Ответ #5 : 04 Мая 2009, 07:25:58 »
а вы генераторы, после вставки записей обновляете??? и применяете транзакцию?

UPD:

Выполнил запросы, все записи добавились, и в программе все видно... единственное после каждого запроса вставил commit;
и запускал все это как скрипт...
« Последнее редактирование: 04 Мая 2009, 07:54:25 от moran »
Русские кинопремьеры 2001-2010 (www.kinopoisk.ru)
80.64.88.51:ГОД_ПРЕМЬЕР
login: ГОД_ПРЕМЬЕР
password: ГОД_ПРЕМЬЕР
2006-2008 в процессе, 2001-2005,2009-2010 доступны...

Оффлайн NewSky

  • Гуру
  • ****
  • Сообщений: 842
Re: Firebird Maestro и PVD
« Ответ #6 : 04 Мая 2009, 10:18:42 »
Цитировать
ЗЫ: NewSky, бросай это дело, пока нас с ума не свёл
Да я бы рад бросить, но оч. нужно :( Да и неизвестно, будет ли поддержка массового обновления пользовательских полей, а из-за этого вся работа встала.
TO MORAN:
А не подскажешь по подробней, на примере, что и как нужно сделать что бы сделать, то о чем речь шла чуть выше?

Оффлайн moran

  • Гуру
  • ****
  • Сообщений: 403
  • Пиво - тоже компонента...
Re: Firebird Maestro и PVD
« Ответ #7 : 04 Мая 2009, 10:44:52 »
TO MORAN:
А не подскажешь по подробней, на примере, что и как нужно сделать что бы сделать, то о чем речь шла чуть выше?

А ничего сверхестественного.
1. Создал пользовательское поле "Нет постера" типа "короткий текст".
2. Залез в базу в таблице "CUSTOM_FIELDS_MOVIES" посмотрел "cmfid" созданного поля (он оказался 40).
3. В запросе исправил 36 на 40 и в конце каждого запроса поставил commit;, и исправил "Нет Заглавного Постера" на "!!!", т.к. IB Expert плохо понимает Unicode, хотя может и не разобрался еще с ним.

INSERT INTO
  CUSTOM_VALUES_SHORTSTR
  ("cmfid", "mid", "value")
  SELECT
    '40' as "cmfid", "mid", '!!!' as "value"
  FROM
    MOVIES
  WHERE
    "mid" NOT IN (SELECT "mid" FROM CUSTOM_VALUES_SHORTSTR WHERE "cmfid" = '40') AND
    "visible" = -1 AND
    (NOT EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = MOVIES."mid") AND ("imgtype" = 0)));
 
commit;

UPDATE
  CUSTOM_VALUES_SHORTSTR
SET
  "value" = '!!!'
WHERE
  ("cmfid" = 40) AND
  (NOT EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_SHORTSTR."mid") AND ("imgtype" = 0)));

commit;

UPDATE
  CUSTOM_VALUES_SHORTSTR
SET
  "value" = ''
WHERE
  ("cmfid" = 40) AND
  (EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_SHORTSTR."mid") AND ("imgtype" = 0)));

commit;

4. Все вставил в редактор скриптов, Maesto под рукой нету ищи что то подобное (Script), и запустил.
Все...
Русские кинопремьеры 2001-2010 (www.kinopoisk.ru)
80.64.88.51:ГОД_ПРЕМЬЕР
login: ГОД_ПРЕМЬЕР
password: ГОД_ПРЕМЬЕР
2006-2008 в процессе, 2001-2005,2009-2010 доступны...

Оффлайн NewSky

  • Гуру
  • ****
  • Сообщений: 842
Re: Firebird Maestro и PVD
« Ответ #8 : 04 Мая 2009, 10:54:44 »
Дело в том, что это пользовательское поле memo и там не только это значение нужно, это только одно значение "Нет Заглавного Постера", а нужно ввести много чего "таким макаром" и они не должны затираться. Само значение строки я думаю могу сменить в программе на латиницу, это не проблема, потом в программе же переименую. Основная сложность в том, что повторюсь, в это поле нужно добавить не одно значение.
UPD
Точнее не memo а select list
UPD2 To Moran:
Спасибо, твой скрипт отлично сработал. Обновилось все, что не содержит постеры, НО (моя вина, сразу детали не описал...) все значения пользовательского поля "Доп. данные" перезаписались на указанное (в данном случае !!!) а возможно, как то не перзаписать, а ДОБАВИТЬ в это поле существующее значение (в данном случае "Нет Заглавного Постера)?
« Последнее редактирование: 04 Мая 2009, 11:52:13 от NewSky »

Оффлайн moran

  • Гуру
  • ****
  • Сообщений: 403
  • Пиво - тоже компонента...
Re: Firebird Maestro и PVD
« Ответ #9 : 05 Мая 2009, 03:15:42 »
To NewSky
У тебя в этом поле есть значения перечисляемые через запятую, типа "Значение 1, Нет постера, Значение 2", или просто список с параметрами "Значение 1", "Нет постера", "Значение 2"???
Русские кинопремьеры 2001-2010 (www.kinopoisk.ru)
80.64.88.51:ГОД_ПРЕМЬЕР
login: ГОД_ПРЕМЬЕР
password: ГОД_ПРЕМЬЕР
2006-2008 в процессе, 2001-2005,2009-2010 доступны...

Оффлайн NewSky

  • Гуру
  • ****
  • Сообщений: 842
Re: Firebird Maestro и PVD
« Ответ #10 : 05 Мая 2009, 03:30:32 »
To NewSky
У тебя в этом поле есть значения перечисляемые через запятую, типа "Значение 1, Нет постера, Значение 2", или просто список с параметрами "Значение 1", "Нет постера", "Значение 2"???
Через запятую.
А как можно получить список "Значение 1", "Нет постера", "Значение 2" ? Это какоой тип поля дает такой вариант?
А вообщето... вот скрин, может  у меня второй вариант, что-то я не воткнусь. Это раскрытый список селект листа поля "Доп. данные"


Оффлайн moran

  • Гуру
  • ****
  • Сообщений: 403
  • Пиво - тоже компонента...
Re: Firebird Maestro и PVD
« Ответ #11 : 05 Мая 2009, 03:38:05 »
To NewSky
У тебя в этом поле есть значения перечисляемые через запятую, типа "Значение 1, Нет постера, Значение 2", или просто список с параметрами "Значение 1", "Нет постера", "Значение 2"???
Через запятую.
А как можно получить список "Значение 1", "Нет постера", "Значение 2" ? Это какоой тип поля дает такой вариант?
А вообщето... вот скрин, может  у меня второй вариант, что-то я не воткнусь. Это раскрытый список селект листа поля "Доп. данные"



ты определись, у тебя "select list" или "Multiselect list" по скрину "Multiselect list"....
Русские кинопремьеры 2001-2010 (www.kinopoisk.ru)
80.64.88.51:ГОД_ПРЕМЬЕР
login: ГОД_ПРЕМЬЕР
password: ГОД_ПРЕМЬЕР
2006-2008 в процессе, 2001-2005,2009-2010 доступны...

Оффлайн NewSky

  • Гуру
  • ****
  • Сообщений: 842
Re: Firebird Maestro и PVD
« Ответ #12 : 05 Мая 2009, 03:43:03 »
Точно... Multiselect list

Оффлайн moran

  • Гуру
  • ****
  • Сообщений: 403
  • Пиво - тоже компонента...
Re: Firebird Maestro и PVD
« Ответ #13 : 05 Мая 2009, 04:08:12 »
В первом запросе добавляются новые записи к тем фильмам у которых нет постера, при этом остаются другие пометки для этого поля.
Во втором (старом третьем), удаляются те записи у которых постер появился, но старое значение было "Нет постера".
Старый второй запрос я убрал, т.к. обновлять запись где значение "Нет постера", на значение "Нет постера" не вижу смысла

Не забудь исправить значение '40' и '!!!' на свои...

UPD
Кстати для эпизодов сериала, тоже проставляется метка, можно что бы не проставлялось...

INSERT INTO
  CUSTOM_VALUES_SHORTSTR
  ("cmfid", "mid", "value")
  SELECT
    '40' as "cmfid", "mid", '!!!' as "value"
  FROM
    MOVIES
  WHERE
    "mid" NOT IN (SELECT "mid" FROM CUSTOM_VALUES_SHORTSTR WHERE "cmfid" = '40' AND "value" = '!!!') AND
    "visible" = -1 AND
    (NOT EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = MOVIES."mid") AND ("imgtype" = 0)));

commit;

DELETE FROM
  CUSTOM_VALUES_SHORTSTR
WHERE
  ("cmfid" = 40) AND ("value" = '!!!') and
  (EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_SHORTSTR."mid") AND ("imgtype" = 0)));
commit;

[off-topic]старый второй запрос
UPDATE
  CUSTOM_VALUES_SHORTSTR
SET
  "value" = '!!!'
WHERE
  ("cmfid" = 40) AND ("value" = '!!!') and
  (NOT EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = CUSTOM_VALUES_SHORTSTR."mid") AND ("imgtype" = 0)));
commit;
[/off-topic]
« Последнее редактирование: 05 Мая 2009, 04:10:56 от moran »
Русские кинопремьеры 2001-2010 (www.kinopoisk.ru)
80.64.88.51:ГОД_ПРЕМЬЕР
login: ГОД_ПРЕМЬЕР
password: ГОД_ПРЕМЬЕР
2006-2008 в процессе, 2001-2005,2009-2010 доступны...

Оффлайн moran

  • Гуру
  • ****
  • Сообщений: 403
  • Пиво - тоже компонента...
Re: Firebird Maestro и PVD
« Ответ #14 : 05 Мая 2009, 04:19:12 »
Что бы эпизоды не попадали в список "Баз постерных", первый запрос...

INSERT INTO
  CUSTOM_VALUES_SHORTSTR
  ("cmfid", "mid", "value")
  SELECT
    '40' as "cmfid", "mid", '!!!' as "value"
  FROM
    MOVIES
  WHERE
    "mid" NOT IN (SELECT "mid" FROM CUSTOM_VALUES_SHORTSTR WHERE "cmfid" = '40' AND "value" = '!!!') AND
    "visible" = -1 AND "epid" is NULL AND
    (NOT EXISTS(SELECT FIRST 1 * FROM IMAGES WHERE ("mid" = MOVIES."mid") AND ("imgtype" = 0)));

commit;
Русские кинопремьеры 2001-2010 (www.kinopoisk.ru)
80.64.88.51:ГОД_ПРЕМЬЕР
login: ГОД_ПРЕМЬЕР
password: ГОД_ПРЕМЬЕР
2006-2008 в процессе, 2001-2005,2009-2010 доступны...