|
|
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
Добрый день! Общее описание вопроса: проектирую хранилище, в нем есть таблицы-измерения. Нужно, чтобы в таблице по дефолту была 1 запись для неопределенного элемента. Т.е. условно, если в таблице содержится список клиентов, то нужна 1 запись для "Неизвестного клиента". Каждый столбец таблицы содержит свои "неизвестные" значения для этой записи, разных типов данных. Хотелось бы автоматизировать процесс генерации скрипта вставки такой записи. Для этого добавил в физ.модели расширенный атрибут Unknown Member на колонку и заполняю его наравне с другими атрибутами колонки (Название, Код, Тип данных и т.д.). Если делать вручную, то можно писать в Script/End таблицы что-то типа Код: sql 1. 2. 3. Не очень удобно, особенно, если колонок много, и, если я поменяю какое-то значение в Неизвестном атрибуте, придется идти в скрипт и искать там старое значение, менять его на новое. Нельзя написать что-то более универсальное, типа Код: sql 1. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2011, 15:17 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
On 22.12.2011 16:17, PassedBI wrote: > Нельзя написать что-то более универсальное, типа Можно в свойствах DBMS определить у таблицы вычисляемый extended-атрибут только для чтения, в котором через "Get Method Script" формировать требуемый запрос на вставку, а потом добавить вывод этого атрибута в Script\Objects\Table\Create. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2011, 16:13 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
Denis Popov, Спасибо за ответ! Можно несколько уточнений/вопросов? просто 2 недели как открыл PD, еще ничего толком не знаю. Можно в свойствах DBMS определить у таблицы вычисляемый extended-атрибут только для чтения Это вот так? Тип атрибута String? в котором через "Get Method Script" формировать требуемый запрос на вставку Самый интересный вопрос, что тут писать? Или может примеры есть.. а потом добавить вывод этого атрибута в Script\Objects\Table\Create Тоже неясно как вызывать этот код. Там стандартная запись. Нужно что-то дописать после нее, только как? Код: sql 1. 2. 3. 4. Сори, что столько нубских вопросов =( Идею я понял, но в деталях пока не разберусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2011, 17:10 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
PassedBIЭто вот так? Тип атрибута String? .. Самый интересный вопрос, что тут писать? Или может примеры есть.. Да, String, все остальное вроде правильно, а на закладке "Get Method Script" напиши функцию по возврату требуемой вставки. Это VbScript, выглядель будет примерно так (в качестве obj будет Table): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. и так далее. Примеры VbScript есть в директории "VB Scripts" от установки PowerDesigner'а, объектная модель самого PowerDesigner'а доступна вот так и ниже через одно сообщение, также можно посмотреть в документации . PassedBIТоже неясно как вызывать этот код. Там стандартная запись. Нужно что-то дописать после нее, только как? Я бы обозвал атрибут, определенный на первом шаге, как-то вроде SqlInsertUnknowRow и добавил его в конец текста Script\Objects\Table\Create, т.е: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.12.2011, 17:28 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
Denis Popov, Попробовал прокрутить всю схему, не изменяя пока сам скрипт - затык на последнем пункте. Обозвал атрибут SqlInsertUnknowRow, вбил в него ваш скрипт, дописал вызов атрибута в скрипте создания таблицы через [%SqlInsertUnknowRow%] и сохранил изменения в файле. Захожу в превью таблицы, получаю ошибку: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Переобозвал атрибут просто буквой A, подправил вызов, ошибка исчезла, превью показывает создание таблицы, но метод атрибута ничего не возвращает. Переписал Get Method Script у атрибуа A: Код: sql 1. 2. 3. - просто хоть что-то вернуть. Результат тот же - скрипт создания игнорит этот код. Чего ему не хватает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2011, 12:32 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
PassedBIЧего ему не хватает? Ты создал в модели объект Extension и определял атрибут там? Я-то делал это в самой DBMS: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2011, 13:02 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
Denis Popov, Блин =) Точно, теперь все нормально, спасибо! Пойду теперь скрипт дописывать, надо прикрутить блок values. А мне этот атрибут Unknown тоже лучше пересоздать в DBMS или можно и в Local Extensions оставить, чтоб заново не перебивать все значения для колонок? И правильно ли я уловил разницу - если в Local Extensions создавать расширенный атрибут, то он может быть использован только в текущей модели, а если на уровне DBMS, то он будет во всех моделях присутствовать? Хм.. это ведь не нужно.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2011, 13:56 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
On 23.12.2011 14:56, PassedBI wrote: > Блин =) Точно, теперь все нормально, спасибо! Пойду теперь скрипт дописывать, надо прикрутить блок values. > А мне этот атрибут Unknown тоже лучше пересоздать в DBMS или можно и в Local Extensions оставить, чтоб заново не > перебивать все значения для колонок? А попробуй. Честно говоря, с Extension я не работал, но если не получиться и придется перемещать атрибут, то и это можно сделать разово через VBScript, меню Tools->Execute Commands->Edit/Кun script. > И правильно ли я уловил разницу - если в Local Extensions создавать расширенный атрибут, то он может быть использован > только в текущей модели, а если на уровне DBMS, то он будет во всех моделях присутствовать?Хм.. это ведь не нужно.. Получается да. Можно поискать возможность доступа к атрибутам из Local Extensions с проверками необходимости генерации. А второй вариант, по-моему самый простой: сделать отдельный файл свойств DBMS и использовать его там где требуются. Все эти файлы лежат в директории "Resource Files\DBMS" от установки, также доступны через меню Tools-> Resources-> DBMS. Эти файлы можно сравнивать, менять, можно переводить модель с одного на другой, меню Database-> Chang Current DBMS. По-хорошему лучше вообще не трогать исходные файлы, они могут меняться с обновлениями, которые имхо стОит по необходимости подтягивать в свои копии. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2011, 15:30 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
А попробуй. Честно говоря, с Extension я не работал, но если не получиться и придется перемещать атрибут, то и это можно сделать разово через VBScript, меню Tools->Execute Commands->Edit/Кun script. Фуф, добрался до этого local extensions =) В общем, если атрибут писать в расширение модели, то из скрипта его можно достать через Код: sql 1. Если же определять атрибут в свойствах dbms, то почти то же самое Код: sql 1. Теперь все грамотно скомпоновать, добавить кавычки в зависимости от типа данных колонки и дело в шляпе. А второй вариант, по-моему самый простой: сделать отдельный файл свойств DBMS и использовать его там где требуются. Все эти файлы лежат в директории "Resource Files\DBMS" от установки, также доступны через меню Tools-> Resources-> DBMS. Эти файлы можно сравнивать, менять, можно переводить модель с одного на другой, меню Database-> Chang Current DBMS. По-хорошему лучше вообще не трогать исходные файлы, они могут меняться с обновлениями, которые имхо стОит по необходимости подтягивать в свои копии. Этот вариант мне нравится больше. Сделал копию файла sqlsv2k8.xdb, натравил модель на нее и пишу все модификации в копию, а оригинал лежит нетронутый. Не получилось только для двух разных физических моделей, которые находятся в одном workspace, указать использование разных файлов свойств. Он, похоже, для всех моделей воркспейса используется. Надо посмотреть, что такое проекты, может они помогут. Вообще вещь крутая конечно, тока здоровая, а времени на нормальное изучение как всегда нет =) Хорошо, хоть форум есть, самому бы тут мыкаться пришлось на порядок больше времени, спасибо! Скрипт выложу как готов будет, может кому пригодится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2011, 17:47 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
On 23.12.2011 18:47, PassedBI wrote: > Этот вариант мне нравится больше. Сделал копию файла sqlsv2k8.xdb, натравил модель на нее и пишу все модификации в > копию, а оригинал лежит нетронутый. Не получилось только для двух разных физических моделей, которые находятся в одном > workspace, указать использование разных файлов свойств. Он, похоже, для всех моделей воркспейса используется. Думаю что скорее всего это можно обойти. Загляни вовнутрь файла DBMS, это простой XML, может надо поменять во 2-й строке, что начинается с <?PowerDesigner, значения атрибутов Name и/или ID. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2011, 18:14 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
Denis PopovДумаю что скорее всего это можно обойти. Загляни вовнутрь файла DBMS, это простой XML, может надо поменять во 2-й строке, что начинается с <?PowerDesigner, значения атрибутов Name и/или ID. Лучше не трогать, чего не знаю =) Вторая строка выглядит так Код: xml 1. 2. 3. 4. Ладно, это уже мелочи, пока все равно с одной моделью работаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 10:18 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
Набросал скрипт, выложу как обещал, хотя качество кода оставляет желать лучшего :/ Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. На выходе получается следующее Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Код дурной, но мою задачу решает, а учиться писать на vbScript в планы не входило =) Еще бы как-то оттабировать все коменты по одной линии, независимо от длины текста перед коментом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 10:37 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
On 26.12.2011 11:37, PassedBI wrote: > Еще бы как-то оттабировать все коменты по одной линии, независимо от длины текста перед коментом. Добавь перед комментарием пробелов через функцию String(<константа минус длина текста перед комментарием>, ' ') http://msdn.microsoft.com/en-us/library/6978d214 Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 10:46 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
То что надо! Итоговые варианты: Код Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. Результат Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Спасибо за помощь, теперь можно двигаться дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2011, 11:33 |
|
||
|
PD16 Генерирование вставки после создания таблицы
|
|||
|---|---|---|---|
|
#18+
Хотелось бы автоматизировать процесс генерации скрипта вставки такой записи. На мой взгляд правильней это делать через Test Data Profiles (Model / Test Data Profiles) и не трогать DBMS и т.п. К тому же отделишь тогда генерацию данных от скриптов создания/обновления БД. ... С помощью механизма Test Data Profiles можно задать и количество генерируемых строк и типы данных и т.п. Также автоматически решается проблема со связями и последовательностью вставки в различные таблицы. Данные могут быть заданы файлом csv. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2011, 16:42 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37589289&tid=1541878]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 450ms |

| 0 / 0 |
