PowerBuilder - динамичен DataWindow от Cursor

Как да създадете динамичен DataWindow в 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 е името на контролата на datawindow. След като създадете този "основен" прозорец с данни, можете да го персонализирате по време на изпълнение с методите 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

Можете да добавите към вашата рамка функция, която връща DataStore, създаден динамично от предоставения SQL SELECT. Кодът му е тук.

person Ursego    schedule 23.04.2013