0

我一直在 Vb.net 上工作,但我切换到 PowerBuilder 12.5 Classic,我正在寻找解决方法。我需要知道等效的 PowerBuilder 脚本;

  1. 清除控件“textbox1.clear()”
  2. 聚焦“textbox1.focus()”
  3. 将 SQL 数据库项插入下拉列表框
    While dr.Read
       ComboBox1.Items.Add(dr("itemname"))
    end while
4

2 回答 2

4

在完全无视您的问题的情况下回答...

请记住,PowerBuilder 的强大之处在于 DataWindow。从数据库加载下拉列表就像在 DataWindow 列上设置一些属性一样简单,方法是将列设置为 DropDownDataWindow 编辑样式。根据您的需要,在设置 DDDW 属性后,将在检索主 DataWindow 时加载 DDDW 值,无需代码(除此之外,与主 DataWindow 建立数据库连接并检索主 DataWindow)。事实上,DDDW 为组合框提供了额外的功能,因为它的下拉列表是另一个 DataWindow,因此它可以有多个列、标题、图形、基于行的表达式、条件着色、多条文本行高的项目“行”,等等......通过使用 DataWindow,您可以为更多机会敞开大门。(我知道。我退出了我的 PB 简介课程,认为 DW 被夸大了,并试图在没有它们的情况下进行编程。学会欣赏他们所做的一切很快。在下一个项目中放弃了我的非 DW 方法。)

祝你好运,

特里

于 2012-07-11T17:14:44.053 回答
2
  1. textbox1.Reset()
  2. textbox1.SetFocus()
  3. 示例(未经测试,但它显示了这个想法):
    string ls_sql, ls_syntax, ls_errors

    ls_sql = "select name from users"
    ls_syntax = sqlca.SyntaxFromSql(ls_sql, "", ls_errors)
    if len(ls_errors) > 0 then return

    datastore ds
    ds = create datastore
    ds.create(ls_syntax, ls_errors)
    if len(ls_errors) = 0 then
        ds.SetTransObject(sqlca)
        ds.Retrieve()

        long ll_row,ll_rows
        string ls_val
        ll_rows = ds.RowCount()
        for ll_row = 1 to ll_rows
            ls_val = ds.GetItemString(ll_row, "name")
            Combobox1.AddItem(ls_val)
        next

    end if

    destroy ds

编辑一些评论:正如 Terry 在其回答中所说,Datawindow 和 DataStore 是 Powerbuilder 的关键控件。将 DataStore 视为 VB 记录集,而 DW 是一种可视化记录集(可以以表格、网格等方式显示数据)。

我通过使用 DS 检索数据并轻松地对其进行迭代来回答您的问题(它比光标更容易操作)并且我翻译了组合框的填充。但正如 Terry 所说,您应该研究如何使用更强大和更进化的 DropDownDataWindow。

于 2012-07-11T15:20:23.953 回答