如何将外部DataWindow转换为SQL选择DataWindow

时间:2012-12-21 18:51:35

标签: powerbuilder

我正在尝试制作ID徽章App。用户在为该卡创建表之后设计卡以进行数据输入。因此,在接受用户的字段(列,文本,行,图片,复选框,单选按钮,条形码等)后,我会动态创建外部DataWindow。现在我需要在为此目的创建表之后将这个创建的DataWindow(即时)转换为SQL SELECT DataWindow。

我如何转换?

3 个答案:

答案 0 :(得分:1)

没有自动机制将外部数据窗口转换为SQL Select。如果您了解.srd文件格式的方法,可以手动完成,但从头开始重新创建新的dw要容易得多。

-Paul Horan- SAP

答案 1 :(得分:1)

我要做的是用你想要的SQL创建一个新的DataWindow;不要费心调整用户界面(我假设你想从原来的DW中挽救它)。获取新DW的table()部分并替换原始DW的table()部分。确保你正确匹配括号; table()部分中有许多嵌入的括号集。如果有疑问,请使用类似NotePad ++的内容为您找到匹配的括号。

这听起来很简单,这很容易。真正的踢球者,取决于数据集的大小,是确保数据集匹配,元素元素,数据类型的数据类型。一个接一个,你就会以一种难以想象的事情来解决这个问题。

祝你好运,

特里。


我第一次错过了“飞行中”部分,但同样的建议适用;你只需要以编程方式完成它,这仍然更难。当你不必忽略可能包含在SQL SELECT语句中的parens时,找到匹配的paren就足够具有挑战性了,更不用说其他字符串如列值表达式了。有可能,只有很多边缘情况需要测试,很难预料,比如当SELECT语句中的字符串有一个开始paren而没有关闭paren时会发生什么?然后必须以编程方式完成匹配数据类型,理论上这意味着解析每个DW的列部分并比较数据类型。在实践中(没有完成这个,只是抛出一个想法),你可以使用两种语法的Create(),看看两者之间的ShareData()是否失败。 (ShareData()允许一些灵活性,例如整数和长整数,我不知道这些差异是否会导致你在其他方面遇到问题。)当然,这可能会提出一个问题:为什么不呢?创建两组DW语法,一组外部和一个SELECT,并在它们之间做一个ShareData()?

答案 2 :(得分:1)

您会发现首先创建表格然后从SQL创建DataWindow要简单得多。您将能够使用已有的大部分代码来创建/修改DataWindow的可视部分。

我建议您仔细考虑这个设计,因为用户迟早想要更改现有徽章设计上的数据,如果不删除并重新创建表并迁移,则无法完成数据。一个好的经验法则是永远不要让最终用户设计数据库。我会为你要支持的每种数据类型创建一个表,并将它们链接到带有属性标识符的徽章。用户唯一要做的就是添加可用数据类型的属性,为它们命名,并将它们粘贴在徽章上。保留外部DataWindow并为每种支持的属性类型使用DataStore。如果使用属性名称作为外部列名,则可以轻松编写通用代码以从检索中的属性填充徽章,并将属性复制回DataStore进行保存。如果您将查看pfc_n_cst_dwsrv.of_populatedddw(无参数版本),您将看到基本概念,除了您将查看列的数据类型并将请求分派给处理该数据类型的DataStore,并将其提供给要填充的行和列名称(属性名称)。除了为DataStore提供值以设置回DataStore之外,保存的工作方式相同。您无需担心数据是否发生了变化,因为DataStore非常智能,可以判断数据是否相同。如果您使用PFC,您只需将更新列表设置为您的DataStore,PFC将为您处理它们(在这种情况下您将使用n_ds作为DataStores)。您还需要在DataStores中设置新行的徽章ID。您可以使用n_ds的pfc_updatePrep事件。