Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как в DataStore типа CrossTab определить / 15 сообщений из 15, страница 1 из 1
21.10.2003, 12:32
    #32299630
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
количество колонок (PB 7.0.3 b.10312)
Поясню в чем вопрос:
выражение
n_col = long(ds_addendum.Describe("DataWindow.Column.Count")) выдает n_col = 3 (должно быть 63)
n_row = ds_addendum.RowCount() выдает 300 (и должно быть столько же)

Реально в CrossTab'е 63 колонки и я могу обращаться к любой из них ru = ds_addendum.Object.Data[i,j] и получать необходимые данные.
...
Рейтинг: 0 / 0
21.10.2003, 14:57
    #32299977
Геннадич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
А так пробывал: Long(ds_addendum.Object.DataWindow.Column.Count)
...
Рейтинг: 0 / 0
21.10.2003, 15:21
    #32300034
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
Пробовал!
АНАЛОГИЧНО!!!
...
Рейтинг: 0 / 0
21.10.2003, 18:52
    #32300427
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
Реально в твоём CrossTabе DataWindow.Column.Count выдаст столько, сколько элементов в его SQL SELECTе...
Если ты хошь вот это -
Property for Crosstab Value
Columns (exp) A string containing a comma- or tab-separated list of the names of columns that make up the columns of the crosstab. These are the columns that display across the top of the crosstab (Painter: Columns option)

Тогда надо Describe("DataWindow.Crosstab.Columns") делать и парсать результат...
...
Рейтинг: 0 / 0
21.10.2003, 19:51
    #32300507
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
И опять ничего хорошего не получилочь!
Describe выдал одно-единственное название колонки, а не реальные 63 штуки!
...
Рейтинг: 0 / 0
21.10.2003, 20:11
    #32300519
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
То есть ты не смог правильно пропарсать a comma- or tab-separated list of the names of columns? :-)
...
Рейтинг: 0 / 0
21.10.2003, 20:21
    #32300525
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
Я сделал так
columns = ds_addendum.Describe("DataWindow.Crosstab.Columns")
И получил строку columns = "value_date"
value_date - это из столбец sql-выражения
select a,b,c,value_date,d from ...., который лежит в основе DW
...
Рейтинг: 0 / 0
21.10.2003, 20:48
    #32300538
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
Это означает, что в CrossTab Definition, в коробочке под названием Columns у тебя сидит одна колонка - value_date ...
...
Рейтинг: 0 / 0
22.10.2003, 10:25
    #32300856
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
Я, вероятно, не совсем корректно сформулировал вопрос. Попробую более подробно. В sql-запросе, лежащем в основе DW, из некой таблицы выбираются четыре поля. Одно из этих полей определяет строки CrossTable, второе (value_date) - колонки, а два оставшихся определяют данные на пересечении. Собственно, это остатки в рублях и валюте на разных балансовых счетах (строки) за разные дни (колонки):
value_date
01/01/2003 02/01/2003 03/01/2003 ../../.....
balance ru cu ru cu ru cu
30201 10 5 10 5 11 5 ...
30202 20 1 19 1 19 2 ...
30203 15 0 16 2 16 0 ...
... ... ... ... ...

Простое выполнение запроса выдает 9703 записи из четырех полей.
DataWindow (CrossTab) выдает на экране 313 строк (кол-во балансов) и 63 столбца (первый -баланс, остальные - остатки на них в рублях и валюте за 31 день). Будучи прикрепленным к DataStore, получаем следующие значения (как я уже и указывал выше):
n_row = ds_addendum.RowCount() выдает 313 СТРОК CrossTab'a
n_col = long(ds_addendum.Describe("DataWindow.Column.Count")) выдает n_col = 3 (вероятно это ПОЛЯ value_date,ru и cu)
columns = ds_addendum.Describe("DataWindow.Crosstab.Columns") выдает строку columns = "value_date" (Это означает, что в CrossTab Definition, в коробочке под названием Columns у тебя сидит одна колонка - value_date ... (С)Филипп )

А откуда, собственно, получить количество столбцов CrossTab'a, которое у меня 63. Ведь я, применяя эти выражения:
ru = ds_addendum.Object.Data[i,j]
cu = ds_addendum.Object.Data[i,j + 1] ( где i - номер СТРОКИ, а j - номер СТОЛБЦА, max(j + 1) = 63 )
, получаю реальные значения из CrossTab'a.
...
Рейтинг: 0 / 0
22.10.2003, 17:27
    #32301997
PaulJB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
Ты вначале переведи свой кросстаб после заполнения данными в статический режим, а затем считай колонки. Иначе ничего не выйдет.
...
Рейтинг: 0 / 0
22.10.2003, 20:06
    #32302220
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
PaulJB , с точки зрения тех Describов, которые уже были urvasом опробованы, переведение в статический режим ничего не изменит.

У меня такое впечатление, что нужно просто Describe("DataWindow.objects") делать и парсить...
...
Рейтинг: 0 / 0
22.10.2003, 20:58
    #32302252
PL99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
PaulJB абсолютно прав

Код: plaintext
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.
datastore lds
string ls_LdsSelect, ls_Objects
lds=create datastore
lds.DataObject = ldw.Dataobject
lds.SetTransObject (SQLCA)
debugbreak()

IF lds.Retrieve () >  0  THEN
//без этой строки не работает :-(
	ls_Objects  = lds.Modify( "DataWindow.Crosstab.StaticMode='yes'" )

	ls_Objects = lds.Describe ( "DataWindow.Objects" )
// А вот здесь уже имеем перечень всех объектов, ну а дальше - как обычно :-
END IF
 /* после выполнения приведенного куска кода в переменной ls_Objects имеем
t_4	t_5_5	t_4_6	t_5_18	team_object_num_t
	paper_break_dt_start_t	c_value_t	c_value_t_1
	c_value_t_2	c_value_t_3	c_value_t_4	c_value_t_5
	c_value_t_6	c_value_t_7	c_value_t_8	c_value_t_9
	c_value_t_10	c_value_t_11	c_value_t_12	c_value_t_13
	c_value_t_14	c_value_t_15	c_value_t_16	c_value_t_17
	c_value_t_18	grand_sum_c_value_t	team_object_num
	paper_break_dt_start	c_value	c_value_1	c_value_2
	c_value_3	c_value_4	c_value_5	compute_9_5
	sum_c_value_5	c_value_6	c_value_7	c_value_8
	c_value_9	c_value_10	c_value_11	c_value_12
	c_value_13	c_value_14	c_value_15	c_value_16
	c_value_17	c_value_18	compute_9_1	sum_c_value_1
	grand_sum_c_value	compute_5	compute_6
	compute_6_1	compute_6_2	compute_6_3	compute_6_4
	compute_6_5	compute_7_5	compute_11_5	compute_6_6
	compute_6_7	compute_6_8	compute_6_9	compute_6_10
	compute_6_11	compute_6_12	compute_6_13	compute_6_14
	compute_6_15	compute_6_16	compute_6_17	compute_6_18
	compute_7_18	compute_11_18	compute_8	compute_1
	compute_2	compute_2_1	compute_2_2	compute_2_3
	compute_2_4	compute_2_5	compute_3_5	compute_10_5
	compute_2_6	compute_2_7	compute_2_8	compute_2_9
	compute_2_10	compute_2_11	compute_2_12	compute_2_13
	compute_2_14	compute_2_15	compute_2_16	compute_2_17
	compute_2_18	compute_3_18	compute_10_18	compute_4
	t_hdr
c_value... - из запроса, compute_... - вычисляемые на клиенте
*/ 
...
Рейтинг: 0 / 0
22.10.2003, 22:10
    #32302283
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
На то, что возвращает Describe ("DataWindow.Objects") static/dynamic mode влияет, на Describы ("DataWindow.Crosstab.*") - НЕ влияет
...
Рейтинг: 0 / 0
23.10.2003, 15:28
    #32303182
PaulJB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
Я в основном нигде не использую ф-ции Describe( ... )/Modify( ... ) и по этому не знаю их поведение в разных случаях.
Вот такая конструкция в одной из моих программ работает:

dw_stato_report.retrieve()
dw_stato_report.object.DataWindow.Crosstab.StaticMode='yes'
dw_stato_report.object.DataWindow.column.count - выдает кол-во колонок в кросстабе.
...
Рейтинг: 0 / 0
23.10.2003, 15:58
    #32303269
urvas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в DataStore типа CrossTab определить
Получилось!
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как в DataStore типа CrossTab определить / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]