powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как в DataStore типа CrossTab определить
15 сообщений из 15, страница 1 из 1
Как в DataStore типа CrossTab определить
    #32299630
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
количество колонок (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
Как в DataStore типа CrossTab определить
    #32299977
Геннадич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А так пробывал: Long(ds_addendum.Object.DataWindow.Column.Count)
...
Рейтинг: 0 / 0
Как в DataStore типа CrossTab определить
    #32300034
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал!
АНАЛОГИЧНО!!!
...
Рейтинг: 0 / 0
Как в DataStore типа CrossTab определить
    #32300427
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реально в твоём 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
Как в DataStore типа CrossTab определить
    #32300507
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И опять ничего хорошего не получилочь!
Describe выдал одно-единственное название колонки, а не реальные 63 штуки!
...
Рейтинг: 0 / 0
Как в DataStore типа CrossTab определить
    #32300519
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть ты не смог правильно пропарсать a comma- or tab-separated list of the names of columns? :-)
...
Рейтинг: 0 / 0
Как в DataStore типа CrossTab определить
    #32300525
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сделал так
columns = ds_addendum.Describe("DataWindow.Crosstab.Columns")
И получил строку columns = "value_date"
value_date - это из столбец sql-выражения
select a,b,c,value_date,d from ...., который лежит в основе DW
...
Рейтинг: 0 / 0
Как в DataStore типа CrossTab определить
    #32300538
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это означает, что в CrossTab Definition, в коробочке под названием Columns у тебя сидит одна колонка - value_date ...
...
Рейтинг: 0 / 0
Как в DataStore типа CrossTab определить
    #32300856
Фотография urvas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, вероятно, не совсем корректно сформулировал вопрос. Попробую более подробно. В 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
Как в DataStore типа CrossTab определить
    #32301997
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты вначале переведи свой кросстаб после заполнения данными в статический режим, а затем считай колонки. Иначе ничего не выйдет.
...
Рейтинг: 0 / 0
Как в DataStore типа CrossTab определить
    #32302220
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulJB , с точки зрения тех Describов, которые уже были urvasом опробованы, переведение в статический режим ничего не изменит.

У меня такое впечатление, что нужно просто Describe("DataWindow.objects") делать и парсить...
...
Рейтинг: 0 / 0
Как в DataStore типа CrossTab определить
    #32302252
Фотография PL99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как в DataStore типа CrossTab определить
    #32302283
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На то, что возвращает Describe ("DataWindow.Objects") static/dynamic mode влияет, на Describы ("DataWindow.Crosstab.*") - НЕ влияет
...
Рейтинг: 0 / 0
Как в DataStore типа CrossTab определить
    #32303182
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я в основном нигде не использую ф-ции Describe( ... )/Modify( ... ) и по этому не знаю их поведение в разных случаях.
Вот такая конструкция в одной из моих программ работает:

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


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