PowerBuilder Retrieve() через элементы управления пользователя

Я использую SetTransObject() и Retrieve() в PowerBuilder 12.5 Classic. Однако это не дает пользователю больших возможностей для извлечения данных; У меня есть однострочное редактирование (sle_employeeID), которое пользователь должен вставить в идентификатор сотрудника, а DataWindow отображает данные сотрудника (IDNO, имя, возраст, обозначение) выбранного ID NO.

dw_1.settransobject(sqlca)
string employeeID
employeeID=sle_employee.text
dw_1.retrieve(employeeID)

Код извлекает все данные в соответствии с моими спецификациями из объекта DataWindow, я использовал табличный оператор и оператор быстрого выбора. Пожалуйста, помогите с кодом, который даст мне более свободный способ выбора данных с помощью элементов управления.


person Wepex    schedule 26.07.2012    source источник
comment
Что вы пробовали? Возможно, вам просто нужно больше аргументов для извлечения в DataWindow для дальнейшей фильтрации результатов.   -  person Bernard    schedule 26.07.2012


Ответы (2)


Вы можете использовать режим запроса DataWindow, как упоминал Терри. Вам нужно будет предоставить пользователю инструкции, но основное использование заключается в простом вводе значений, которые вы хотите сопоставить, непосредственно в DataWindow. Дополнительные сведения см. в разделе Предоставление пользователям возможности запросов в Руководстве программиста DataWindow. Вот код, который у меня есть в одном из моих служебных окон. Он использует меню с кнопкой на панели инструментов, чтобы перевести DataWindow в режим запроса, а также выключить режим запроса и получить данные. Я использую маршрутизацию сообщений PFC между меню и событием DataWindow, но вы можете просто вызвать событие из события нажатия кнопки, и в этом случае вы удалите строки, которые изменяют меню.

// this code is in an event in the DataWindow
// toggles query mode on and off

if "no" = object.dataWindow.queryMode then
    // you may want to check for unsaved changes here and let the user go back
    object.dataWindow.queryMode = "yes"
    m_myMenu.m_rows.m_query.checked = TRUE  // this has a button on the toolbar

else
    m_myMenu.m_rows.m_query.checked = FALSE
    acceptText()
    object.dataWindow.queryMode = "no"
    retrieve()

end if

Чтобы получить максимальную гибкость, задайте критерии.override_edit='yes' для некоторых или всех столбцов. Код ниже устанавливает критерии.override_edit='yes' для всех столбцов. Это может не подходить для вашей ситуации. Без override_edit пользователь может вводить значения запроса, которые проходят проверку столбца.

// this code is in an event in the DataWindow
// it is called after the DataObject is set
// it sets criteria.override_edit='yes' for all the columns

string ls_describe, ls_modify, ls_col, ls_result
integer li_colCount, li_col

setTransObject(SQLCA)
ls_describe = "datawindow.column.count"
ls_result = dw_1.describe(ls_describe)
if not isnumber(ls_result) then
        // logging code elided
        ls_result = '0'
end if
li_colCount = integer(ls_result)
for li_col = li_colCount to 1 step -1
    ls_col = "#" + string(li_col)
    ls_modify = ls_col + ".criteria.override_edit='yes'"
    ls_result = dw_1.modify(ls_modify)
    if "" <> ls_result then 
   // every column may not have an edit, and some edits might not          // have the property. it's just as fast to try to modify it as it
   // is to check it
       // logging code elided
    end if
next 
person Hugh Brackett    schedule 28.07.2012

Мне непонятно, каковы ваши ожидания, но мне кажется, что SetTransObject() и Retrieve() делают именно то, о чем вы их просили; проблема не в этом. Если вы создадите 20 SLE и DataWindow с 20 аргументами (и сопровождающим их оператором SELECT, достаточно сложным, чтобы обрабатывать аргументы пропуска как критерии, если аргумент пуст), то SetTransObject() и Retrieve() будут работать просто отлично.

Существует функция DataWindow, называемая Query By Example (QBE), на которую вы можете обратить внимание. Однако, несмотря на то, что это дает пользователю значительные возможности для выполнения запросов, вы можете подумать о том, кто ваш пользователь. Если у пользователя есть докторская степень в области аналитики данных или компьютерных наук, то QBE вполне подойдет; если пользователь является случайным телемаркетологом с похмелья, вы можете бросить его через голову.

Удачи,

Терри.

person Terry    schedule 26.07.2012