1

如何在 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

如何创建它?

4

3 回答 3

2

您需要的是 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

我希望这会有所帮助。请随时询问更多。我们在我们的项目中大量使用这个动态数据窗口概念。

兄弟。加博尔

于 2013-04-19T14:39:47.733 回答
2

您可以使用 DataWindow 或 DataStore 的 Create() 函数轻松动态地动态创建数据对象,将语法正确的 DataWindow 源传递给它(就像您在 IDE 中的 DataWindow 上编辑源时看到的那样)。甚至还有一个函数,Transaction 对象的 SyntaxFromSQL(),它将帮助您从 SELECT 语句构建语法,尽管您可以根据需要构建此语法字符串。

我在您的问题中看到的问题是您不是从 SELECT 语句开始,而是从从数据库传回的游标对象开始。我不相信 PB 中的任何地方都支持这种游标。(您可以在 PowerScript 中创建光标,但据我了解,这是不同的。)因此,由于没有与 DBMS 生成的光标兼容的 DataWindow 语法,我相信您的问题的答案就目前而言,它无法完成

如果您可以控制存储过程,另一种选择是将其更改为传回 SELECT 语句的字符串。这样,您不仅可以动态创建 DataWindow 语法 (SyntaxFromSQL()) 并生成 DataWindow (Create()),而且还可以获得更好的性能,因为 DataWindow在大多数情况下(例如,不是在 RetrieveRow 事件发生时) coded) 将使用“一个”网络事务在尽可能少的网络块中检索整个数据集,而游标一次只能检索一行。

祝你好运,

特里。

于 2013-04-19T17:07:03.520 回答
0

您可以向您的框架添加一个函数,该函数返回由提供的 SQL SELECT 动态创建的 DataStore。它的代码在这里

于 2013-04-23T20:56:23.167 回答