Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 DW добавление столбцов  [new]
4xwd
Member

Откуда: Москва
Сообщений: 27
Всем доброе утро!
Так получилось , что в данный момент срочно приходиться разбираться с PB и вносить изменения в программу, хотя сам пишу программы на Си..
Для меня PB - тёмный лес , но немного уже удалось разобраться.
Прошу прощения , могу немного путать в терминалогии.

Есть БД на СУБД MS SQL, пишется под неё клиент(точнее сказать - уже написан клиент.Человек ,который вёл данные проекты - уволился.)
Вылезли ошибки, их надо срочно поправить. Мне выдали барабан на шею и горн в руки сословами: "Вперёд к светлому будущему!".

Проблемма :
На одной из форм есть объект DW, поднего подклыдывается объект DataObject на основе View-ра в БД, который возвращает данные в таком формате :

Name A1 A2 A3 ... An
Имя1 100 200 300 ... 121
Имя2 300 134 345 ... 190
Имя3 345 98 123 ... 34
где n - зависит от заполнености БД.

Возник вопрос :
Как добавить в конец ещё несколько столбцов : B1,B2,B3 ????
Смотрел поик и понял , что это делается как-то через фукцию dw_1.modify("");, но нимогу вникнуть что надо ей передать. Во встроенном хелпе совсем запутался :(
Подскажите плиз .
19 авг 04, 10:19    [892726]     Ответить | Цитировать Сообщить модератору
 Re: DW добавление столбцов  [new]
Black Savage
Member

Откуда:
Сообщений: 736
Самый простой способ:
1. Правишь вьюху, добовляя нужные столбцы.
2. Правишь "объект DataObject". Это DataWindow, его имя ты видишь в пропортях на форме. Просто щелкаешь правым кликом мыши на этом обьекте (прямо на форме) и выбираешь Modify DataWindow..., сразу вываливаешься в окно редактирования этого обьекта. Далее в меню Design\Data Source... там можно будет добавить нужные столбцы - путем простого выбора, потом немного причешишь DataWindow и все будет ОК!
19 авг 04, 10:35    [892797]     Ответить | Цитировать Сообщить модератору
 Re: DW добавление столбцов  [new]
4xwd
Member

Откуда: Москва
Сообщений: 27
Спасибо за ответ ,но эти столбцы я выбрать не могу , так они полностью расчётные и данные для расчётов берутся из других dw.(забыл об этом написать, меня даже CrossTab - не спасает для вычислений.)
[quote]
Name A1 A2 A3 ... An
Имя1 100 200 300 ... 121
Имя2 200 300 400 ... 125
где n - зависит от заполнености БД.
[/quote]
показатель n - может быть равен 3, 5 ..10 и более.
Единственный способ добавить эти 3 столбца программно, а дальше все вычисления сделать через циклы с вставкой в данный dw.
Вот в чём вопрос , как программно их туда добавить???7
19 авг 04, 14:42    [894213]     Ответить | Цитировать Сообщить модератору
 Re: DW добавление столбцов  [new]
Winnie-the-Pooh
Member

Откуда:
Сообщений: 67
Вот что по этому поводу говорит приложение dw syntax:
<DW Control Name>.Modify(&
"create  column( id=<an integer> tabsequence=<an integer> accelerator='<a single letter>' moveable=<0 - False, 1 - True> resizeable=<0 - False, 1 - True> pointer='<Arrow!, Cross!, HourGlass!, IBeam!, Icon!, Size!, SizeNESW!, SizeNS!, SizeNWSE!, SizeWE!, UpArrow!, or cursor filename (with path)>' band=<Detail, Footer, Header, Header.<group #>, Summary, Trailer.<group #>, Background, Foreground>" + &
" x='<an integer>' y='<an integer>' bitmapname=<Yes or No> criteria.dialog=<Yes or No> criteria.override_edit=<Yes or No> format='<constant string containing display format (i.e., [general]) for col (can also be an expression)>' alignment='<0 - Left, 1 - Right, 2 - Center>' criteria.required=<Yes or No> height.autosize=<Yes or No> border='<0 - None, 1- Shadow, 2 - Box, 3 - Resize, 4 - Underline, 5 - 3D Lowered, 6 - 3D Raised>' color='<a long>' height='<an integer>' width='<an integer>' name=<string> tag='<string>'"+&
" background.mode='<0 - Opaque, 1 - Transparent>' background.color='<a long>' font.face='<name of type face (i.e., SYSTEM, COURIER)>' font.height='<negative number for points, positive number for PBUs (i.e., -10 = 10 points, 10 = 10 PBUs>' font.weight='<400 - Normal, 700 - Bold>' font.family='<0 - AnyFont, 1 - Roman, 2 - Swiss, 3 - Modern, 4 - Script, 5 - Decorative>' font.pitch='<0 - default, 1 - Fixed, 2 - Variable>' font.charset='<0 - Ansi, 1 - default, 2 - Symbol, 128 - Shift jis, 255 - OEM>' font.italic='<0 - False, 1 - True>' font.strikethrough='<0 - False, 1 - True>' font.underline='<0 - False, 1 - True>'"+&
" edit.validatecode=<Yes or No> edit.focusrectangle=<Yes or No> edit.format=<constant string containing display format (i.e., [general]) for col (can also be an expression)> edit.nilisnull=<Yes or No> edit.password=<Yes or No> edit.required=<Yes or No> edit.hscrollbar=<Yes or No> edit.limit=<max number of chars the user can type (0 unlimited)> edit.codetable=<Yes or No> edit.displayonly=<Yes or No> edit.autovscroll=<Yes or No> edit.case=<Any, Upper or Lower> edit.autohscroll=<Yes or No> edit.autoselect=<Yes or No> edit.vscrollbar=<Yes or No> edit.name='<repository style name, if any>') ")
19 авг 04, 14:55    [894282]     Ответить | Цитировать Сообщить модератору
 Re: DW добавление столбцов  [new]
Ermak
Member

Откуда: Tomsk
Сообщений: 811
автор
Единственный способ добавить эти 3 столбца программно, а дальше все вычисления сделать через циклы с вставкой в данный dw.
Вот в чём вопрос , как программно их туда добавить???7


Во первых выполняете, что прописал Black Savage.
Теперь собственно, как причесать DataWindow Object (это и есть DataObject)

- Вызываем меню Design/DataSource...

Внизу находим закладочку Compute, выбираем её.
Щелкаем правой кнопкой мыши, и выбираем Insert Compute, а дальше вколачиваем что-то вроде 0 as MyComputeField_1

Думаю, что ход мысли Вам понятен.
19 авг 04, 15:04    [894333]     Ответить | Цитировать Сообщить модератору
 Re: DW добавление столбцов  [new]
4xwd
Member

Откуда: Москва
Сообщений: 27
Ermak

Во первых выполняете, что прописал Black Savage.
Теперь собственно, как причесать DataWindow Object (это и есть DataObject)
- Вызываем меню Design/DataSource...
Внизу находим закладочку Compute, выбираем её.
Щелкаем правой кнопкой мыши, и выбираем Insert Compute, а дальше вколачиваем что-то вроде 0 as MyComputeField_1
Думаю, что ход мысли Вам понятен.

Ход мысли понятен, только там я могу выбрать либо Columns... либо Functions .., у меня на закладке compute ничего нет


Я так понимаю это мой случай ..
Winnie-the-Pooh

<DW Control Name>.Modify(&
"create column( id=<an integer> tabsequence=<an integer> accelerator='<a single letter>' moveable=<0 - False, 1 - True> resizeable=<0 - False, 1 - True> pointer='<Arrow!, Cross!, HourGlass!, IBeam!, Icon!, Size!, SizeNESW!, SizeNS!, SizeNWSE!, SizeWE!, UpArrow!, or cursor filename (with path)>' band=<Detail, Footer, Header, Header.<group #>, Summary, Trailer.<group #>, Background, Foreground>" + &
" x='<an integer>' y='<an integer>' bitmapname=<Yes or No> criteria.dialog=<Yes or No> criteria.override_edit=<Yes or No> format='<constant string containing display format (i.e., [general]) for col (can also be an expression)>' alignment='<0 - Left, 1 - Right, 2 - Center>' criteria.required=<Yes or No> height.autosize=<Yes or No> border='<0 - None, 1- Shadow, 2 - Box, 3 - Resize, 4 - Underline, 5 - 3D Lowered, 6 - 3D Raised>' color='<a long>' height='<an integer>' width='<an integer>' name=<string> tag='<string>'"+&
" background.mode='<0 - Opaque, 1 - Transparent>' background.color='<a long>' font.face='<name of type face (i.e., SYSTEM, COURIER)>' font.height='<negative number for points, positive number for PBUs (i.e., -10 = 10 points, 10 = 10 PBUs>' font.weight='<400 - Normal, 700 - Bold>' font.family='<0 - AnyFont, 1 - Roman, 2 - Swiss, 3 - Modern, 4 - Script, 5 - Decorative>' font.pitch='<0 - default, 1 - Fixed, 2 - Variable>' font.charset='<0 - Ansi, 1 - default, 2 - Symbol, 128 - Shift jis, 255 - OEM>' font.italic='<0 - False, 1 - True>' font.strikethrough='<0 - False, 1 - True>' font.underline='<0 - False, 1 - True>'"+&
" edit.validatecode=<Yes or No> edit.focusrectangle=<Yes or No> edit.format=<constant string containing display format (i.e., [general]) for col (can also be an expression)> edit.nilisnull=<Yes or No> edit.password=<Yes or No> edit.required=<Yes or No> edit.hscrollbar=<Yes or No> edit.limit=<max number of chars the user can type (0 unlimited)> edit.codetable=<Yes or No> edit.displayonly=<Yes or No> edit.autovscroll=<Yes or No> edit.case=<Any, Upper or Lower> edit.autohscroll=<Yes or No> edit.autoselect=<Yes or No> edit.vscrollbar=<Yes or No> edit.name='<repository style name, if any>') ")

Спасибо за помощь , сейчас буду пробовать ....
19 авг 04, 16:17    [894678]     Ответить | Цитировать Сообщить модератору
 Re: DW добавление столбцов  [new]
Ikar
Member

Откуда: Москва
Сообщений: 928
4xwd
Ход мысли понятен, только там я могу выбрать либо Columns... либо Functions .., у меня на закладке compute ничего нет

Ну и выбирайте все что угодно. Аболютно. Чтобы Вы не выбрали, это будет преобразовано в строку синтаксиса, который Вы уже сможете заменить на то, что Вам нужно. И, кстати говоря, ничего не быть там не может - хотя бы одна пустая строка там есть всегда
4xwd

Я так понимаю это мой случай ..

Вы уверены, что Вам проще разобраться в синтаксисе метода, чем в визуальной среде? Если я Вас правильно понял, Вы не собираетесь полностью переходить на РВ и работать на нем? Тогда зачем "делать лишние телодвижения" по изучению сожного, враждебного Вам синтаксиса, который Вам больше никогда, вероятнее всего, не понадобится? (ИМХО)
---
С уважением, IKARКартинка с другого сайта.
ikarhomecenter@narod.ru
IkarHomeCenter

К сообщению приложен файл. Размер - 0Kb
19 авг 04, 16:54    [894886]     Ответить | Цитировать Сообщить модератору
 Re: DW добавление столбцов  [new]
Ermak
Member

Откуда: Tomsk
Сообщений: 811
Внизу находим закладочку Compute, выбираем её.
Щелкаем правой кнопкой мыши, и выбираем Insert Compute


Хорошо, давайте зайдем с другой стороны.
- Выбираем меню Design/datSource...
- Выбираем меню Design/Convert To Syntax
Теперь уже видим, сам SQL запрос на выборку данных
Осталось добавить, нужные Вам Computed Field'ы
Для этого после последнего поля в Select'e ставим запятую и добавляем
0 as MyNumberField_1,
0 as MyNumberField_2,
0 as MyNumberField_3...

PS. Думаю, что ход мысли ясен
20 авг 04, 06:36    [895736]     Ответить | Цитировать Сообщить модератору
 Re: DW добавление столбцов  [new]
4xwd
Member

Откуда: Москва
Сообщений: 27
Ikar
Вы уверены, что Вам проще разобраться в синтаксисе метода, чем в визуальной среде? Если я Вас правильно понял, Вы не собираетесь полностью переходить на РВ и работать на нем? Тогда зачем "делать лишние телодвижения" по изучению сожного, враждебного Вам синтаксиса, который Вам больше никогда, вероятнее всего, не понадобится? (ИМХО)

В визуальной среде я уже разобрался немного, но задача очень специфическая и для меня сложная .. Как сказал наш програмист , когда увольнялся : "Надо знать РВ - для БД, СИ и Ассемблер - для системы,тогда всё можно будет сделать!" Предстоит или нет мне полностью переходить на среду разработки РВ я однозначно ответить сейчас не могу , время покажет.

Ermak
Внизу находим закладочку Compute, выбираем её.
Щелкаем правой кнопкой мыши, и выбираем Insert Compute

Хорошо, давайте зайдем с другой стороны.
- Выбираем меню Design/datSource...
- Выбираем меню Design/Convert To Syntax
Теперь уже видим, сам SQL запрос на выборку данных
Осталось добавить, нужные Вам Computed Field'ы
Для этого после последнего поля в Select'e ставим запятую и добавляем
0 as MyNumberField_1,
0 as MyNumberField_2,
0 as MyNumberField_3...
PS. Думаю, что ход мысли ясен

Ход мысли понятен , только там у меня чистый серый экран, с надписью на верху "Select - Server2.odbc.stat.dbo" и всё.
Если я выбираю какое-нибудь поле, то тогда данные совсем не отображаются.
Парадокс ..

А если прогуляться по закладкам ,которые мы открываем через Design/datSource..., то там можно увидеть :
fact_table_a12u_col_6 - имя вьюера

Where - ничего нет
Having - ничего нет
Compute - ничего нет
Syntax -
SELECT fact_table_a12u_col_6.row_id,
fact_table_a12u_col_6.region_name,
fact_table_a12u_col_6.yy,
fact_table_a12u_col_6.parameter_value
FROM fact_table_a12u_col_6
Sql - запрос к вьюеру
Sort -
fact_table_a12u_col_6.row_id
fact_table_a12u_col_6.region_name
fact_table_a12u_col_6.yy
fact_table_a12u_col_6.parameter_value
Group -
fact_table_a12u_col_6.column_number
fact_table_a12u_col_6.region_name
fact_table_a12u_col_6.yy
fact_table_a12u_col_6.parameter_value
fact_table_a12u_col_6.sex
fact_table_a12u_col_6.row_id
fact_table_a12u_col_6.hndl_region

Как я написал выше у меня есть view1 на сервере БД, в него выбираются данные в структуре :
column_number region_name parameter_value yy row_id sex hndl
1 В округ 100 A 1 Москва
1 В округ 200 А1 1 Москва
1 С округ 121 А 2 Москва
1 С округ 234 А1 2 Москва
1 Ю округ 124 А 5 Москва
1 Ю округ 111 А2 7 Москва

Когда я открываю DW то данные у меня представляются в виде:

region_name A A1 A2
В округ 100 200
С округ 121 234
Ю округ 124 111
Как понимаете , чем больше будет записей , тем больше столбцов будет в результате и жёстко сделать связъ не удаётся.
И ещё надо добавить 3 расчётных поля в конец ... :( Вот тут и зарылась - изюминка .. Вопрос как раз и задавался : Как добавить столбец.
20 авг 04, 10:14    [896098]     Ответить | Цитировать Сообщить модератору
 Re: DW добавление столбцов  [new]
Ermak
Member

Откуда: Tomsk
Сообщений: 811
автор
SELECT fact_table_a12u_col_6.row_id,
fact_table_a12u_col_6.region_name,
fact_table_a12u_col_6.yy,
fact_table_a12u_col_6.parameter_value
FROM fact_table_a12u_col_6

Добавляем в Ваш исходный запрос несколько computed Field'ов, примерно так:
SELECT fact_table_a12u_col_6.row_id, 
fact_table_a12u_col_6.region_name, 
fact_table_a12u_col_6.yy, 
fact_table_a12u_col_6.parameter_value,
0 as MyNumberField_1,
0 as MyNumberField_2,
0 as MyNumberField_3
FROM fact_table_a12u_col_6 
20 авг 04, 13:10    [897053]     Ответить | Цитировать Сообщить модератору
 Re: DW добавление столбцов  [new]
Kr_Yury
Member

Откуда: Киев, Украина
Сообщений: 244
4xwd
Спасибо за ответ ,но эти столбцы я выбрать не могу , так они полностью расчётные и данные для расчётов берутся из других dw

Зайдём ещё с одной стороны. Даже если данные берутся из других dw, то всё равно они както связываются с главным dw, подозреваю, что по полю Name. Следовательно можно создать View2 из расчетных полей, что-то типа (Name, compute_field1, compute_field1, ... ). Собрать оба View в один
Create view ViewMain() As
Select v1.*, v2.* From view1 v1, view2 v2
Where v1.name=v2.name
И уже этот ViewMain использовать в качестве источника данных
20 авг 04, 14:19    [897467]     Ответить | Цитировать Сообщить модератору
 Re: DW добавление столбцов  [new]
4xwd
Member

Откуда: Москва
Сообщений: 27
Всем больщое спасибо за интерестные решения и помощь!

Вопрос как всегда решился - Организационно. Жёстким ограничением - вывод только 5 значений. Что позволило сделать шаблон , а дальше выгрузить в него данные - дело техники.
25 авг 04, 11:36    [906189]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить