我在PowerBuilder 12.5 Classic上使用SetTransObject()和Retrieve()。然而,它并没有给用户提供检索数据的强大功能; 我有一行编辑(sle_employeeID),用户需要在员工ID中插入,DataWindow显示所选ID的员工数据(IDNO,姓名,年龄,名称)。
dw_1.settransobject(sqlca)
string employeeID
employeeID=sle_employee.text
dw_1.retrieve(employeeID)
代码从DataWindow对象中按照我的规范检索整个数据,我使用了表格和快速选择语句。 请帮助我们一个代码,让我更自由地通过控件选择数据。
答案 0 :(得分:1)
我不清楚你的期望是什么,但是我觉得SetTransObject()和Retrieve()完全按照你的要求去做;问题不在那里。如果您创建了20个SLE和一个带有20个参数的DataWindow(以及一个附带的SELECT语句,如果参数为空则足以处理跳过参数作为条件),那么SetTransObject()和Retrieve()将正常工作。
您可能需要查看DataWindow的一个名为Query By Example(QBE)的功能。但是,虽然这为用户提供了重要的查询功能,但您可能需要考虑用户是谁。如果用户拥有数据分析或计算机科学博士学位,那么QBE就可以了;如果用户是一个闲暇的休闲就业电话推销员,你可能会把他们扔在头上。
祝你好运,特里。
答案 1 :(得分:1)
您可能希望使用DataWindow的查询模式,如Terry所述。您必须向用户提供说明,但基本用法是直接在DataWindow中输入要匹配的值。有关详细信息,请参阅DataWindow程序员指南中的为用户提供查询功能主题。这是我在其中一个实用程序窗口中的代码。它使用带有工具栏按钮的菜单将DataWindow置于查询模式,并关闭查询模式并进行检索。我在菜单和DataWindow事件之间使用PFC消息路由,但您只需通过按钮单击事件调用该事件,在这种情况下,您将删除修改菜单的行。
// 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
要获得最大的灵活性,请在部分或全部列上设置criteria.override_edit ='yes'。下面的代码在所有列上设置criteria.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