PowerBuilder - динамическое окно данных из курсора

Как создать динамическое окно данных в PowerBuilder?

У меня есть процедура в базе данных, которая возвращает мне курсор. Как с помощью этого курсора я могу создать DataWindow со столбцами?

Пример 1: Курсор:

SELECT DATA, ID FROM TABLE1
I want DW with columns:
DATA, ID

Пример 2: Курсор:

SELECT DATA, ID, COUNTRY FROM TABLE1
I want DW with columns:
DATA, ID, COUNTRY

Как это создать?


person Piszu    schedule 19.04.2013    source источник


Ответы (3)


вам нужна функция Syntaxfromsql. Вы можете прочитать это здесь:

http://infocenter.sybase.com/archive/index.jsp?topic=/com.sybase.help.pb_10.5.psref/html/psref/CCJCHAJI.htm

для вашего примера:

string  ls_sql_syntax, ls_dw_source, ERRORS

ls_sql_syntax   = "SELECT DATA, ID, COUNTRY FROM TABLE1"
ls_dw_source    = SQLCA.SyntaxFromSQL(ls_sql_syntax, "Grid", ERRORS)
IF Len(ERRORS) > 0 THEN
    MessageBox("Caution", "SyntaxFromSQL caused these errors: " + ERRORS)
    RETURN 0
END IF
dw_work.Create( ls_dw_source, ERRORS)
IF Len(ERRORS) > 0 THEN
    MessageBox("Caution", "Create cause these errors: " + ERRORS)
    RETURN 0
END IF  

Где мы предполагаем, что dw_work — это имя элемента управления окном данных. После создания этого «базового» окна данных вы можете настроить его во время выполнения с помощью методов Modify. Вы можете установить практически все (ширину, высоту, размер шрифта, цвет и т.

Подробнее здесь:

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc00044_0250/html/dwprgnet/X_ref299343589.htm

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

бр. Габор

person DARKinVADER    schedule 19.04.2013

Вы можете легко динамически создавать объект данных с помощью функции Create() DataWindow или DataStore, передавая ему синтаксически правильный источник DataWindow (например, то, что вы видите, когда редактируете источник в DataWindow в IDE). Существует даже функция SyntaxFromSQL() объекта Transaction, которая поможет вам построить синтаксис из оператора SELECT, хотя вы можете построить эту синтаксическую строку так, как пожелаете.

Проблема, которую я вижу в вашем вопросе, заключается в том, что вы начинаете не с оператора SELECT, а с объекта курсора, переданного обратно из базы данных. Я не верю, что где-либо в PB есть поддержка такого курсора. (Вы можете создать курсор в своем PowerScript, но, насколько я понимаю, что вы говорите, это другое.) Итак, поскольку не существует синтаксиса DataWindow, совместимого с курсором, сгенерированным СУБД, я верю ответу на ваш вопрос в его нынешнем виде заключается в том, что это невозможно сделать.

Один из вариантов, если у вас есть контроль над хранимой процедурой, состоит в том, чтобы изменить ее, чтобы вернуть строку инструкции SELECT. Таким образом, вы не только сможете динамически создать синтаксис DataWindow (SyntaxFromSQL()) и сгенерировать DataWindow (Create()), но и повысить производительность, поскольку DataWindow в большинстве случаев ( например, когда событие RetrieveRow закодировано) будет извлекать весь набор данных в как можно меньшем количестве сетевых блоков с помощью «одной» сетевой транзакции, в отличие от курсора, который извлекает только одну строку за раз.

Удачи,

Терри.

person Terry    schedule 19.04.2013

Вы можете добавить в свою структуру функцию, которая возвращает хранилище данных, созданное динамически с помощью предоставленного SQL SELECT. Его код находится здесь.

person Ursego    schedule 23.04.2013