2010-06-14 70 views
2

我是powerbuilder的新手,并且在使用datawindows时遇到了很多麻烦。我无法绕过它的插入机制。有人可以向我解释,或者至少让我指出正确的方向(文章,提示等)吗?powerbuilder的datawindow如何执行插入命令

+4

四个小时和一个投诉?不耐心太多!在北美刚刚清晨。哪个插入机制?数据窗口?树视图?嵌入式SQL? ...你看过Sybase技术文档或PowerBuilder开发人员日记吗? – Terry 2010-06-14 12:37:08

+1

另一个令人满意的PB开发人员:) ...值得一提的是,PB IDE往往不稳定,但随着时间的推移,您将学习如何避免它发生崩溃等。另外,DataWindow是PB的核心所以这是迄今为止掌握的最重要的概念。我还建议您仔细阅读捆绑的API文档,并花费大量时间学习使用PB调试器。最终你甚至可能会喜欢PB。 – 2010-06-14 20:47:18

回答

9

DataWindow生成的SQL由更新属性(菜单项Rows/Update Properties ...)控制。从那里,您可以选择一个表并设置它将用于生成SQL的属性。 Where子句...确定哪些列及其原始值在WHERE子句中用于UPDATE和DELETE。仅当您更改(或允许用户更改)您定义为关键字的列时,重要修改才会发挥作用。可更新列是可以生成SQL的列表(这不会影响UI允许的方式)。键列可以是是主键(如果DBMS支持从数据库查询该键的话,可以使用主键按钮自动填充),但不一定是。 (有相当独特的情况下,你可能想要做一些不同的事情。)如果你有一个标识列作为你的密钥,你可以识别你的DataWindow,它将在INSERT后检索生成的值。

之后,使用InsertRow(),DeleteRow(),SetItem()填充数据窗口中的数据,当然还要让UI上的用户更改数据和状态标志,以确定生成的SQL当Update()被调用时。

所有这些都可以在运行时使用Modify()函数进行更改,因此您可以使用一个DataWindow更新多个表。这是在PowerBuilder Foundation Class的多表更新服务中实现的,因此如果您想在运行时更改这些值,那就是一些很好的示例代码。

祝你好运,

特里。

+0

假设我有一个名为'test'的表,它有三列,名为'test_id','test_name','test_address'。我在'test_id'上使用检索参数来从表中获取数据来过滤数据,而我只显示后面的两列。现在,当我使用数据窗口插入新行时,它说我违反了数据库上的'非空'约束,它无法找到'test_id'的值。我怎么解决这个问题? – 2010-06-15 04:57:00

+1

取决于。如果test_id是标识/自动增量列,则只需在“更新属性”中声明即可。如果这是您自己填充的值,则必须以编程方式在列“test_id”的新行上执行SetItem()。生成值的规则可能决定您是否可以同时将该值设置为InsertRow()或UpdateStart事件。如果要使用ModifiedCount()来确定是否需要保存,则可能需要延迟SetItem(),直到该函数调用完成。 (对于奖励标志,修改()DW列的初始属性... no spc2xpln。) – Terry 2010-06-15 14:38:29

2

@Archangel将行插入到数据窗口中时,即使为该对象指定了一个值作为检索参数,仍然需要提供test_id字段。在完成插入操作后,请确保对所有不允许空值的值执行setitem。