正如标题所说,我的代码中有一个看似简单的嵌入式SQL Update语句,它挂起了Powerbuilder 12.5。
UPDATE COMMENTS SET comment_text = :strNewComment
WHERE ID = :lngID;
我看过调试中的代码;所有变量都具有有效值,并且执行在该SQL语句上完全停止。
我所知道的唯一“理论”是,可能存在锁定问题,因为数据窗口中的相同数据是打开的,但我不足以知道它是否是PB专家。< / p>
围绕此场景的一些背景信息:数据窗口网格显示注释列表。用户选择注释行,单击“编辑”按钮并触发其单击事件。将在文本框中显示带有注释文本的模态窗口。用户编辑评论文本,单击“确定”按钮。 Click事件继续,运行上面的sql语句,然后使用Retrieve()调用刷新数据窗口。
由于
答案 0 :(得分:6)
这不是我将如何实现它...将更新后的文本发送回调用过程(有很多方法可以做到这一点......)然后将一个SetItem()放入网格dw中。从那里,您可以立即在网格dw上调用Update(),或者等待收集更多更新并立即更新它们。
完全模仿现有数据窗口功能的嵌入式SQL更新是一种糟糕的设计选择。
答案 1 :(得分:2)
如果您以这种方式更新数据库,那么我会查看显示记录列表的数据窗口。也许嵌入式SQL会尝试更新锁定的数据,我想这可能会导致挂起。锁应该出现在数据库中。如果您没有通过数据窗口进行更新,请考虑选择“仅供读取”。
我得到的印象(来自对原始问题的评论)您能够执行更新,但更改未在数据库中持续存在。以下是常见的解决方案。它可能是其中任何一个,可能就是其中之一。答案取决于您用于更新的方法。
答案 2 :(得分:2)
所以我(不小心)设法找到导致我问题的原因。
我通过交互式SQL插入了一些测试记录,然后在开发过程中尝试编辑这些记录。问题是...... 鼓声 ...我忘了提交手动插入的记录!记录将被交互式SQL锁定,直到提交/回滚或(在我的情况下)关闭交互式SQL。我想每次遇到这个问题都是侥幸,这是用这些手动插入的记录之一。
所以,这里没有什么可看的。只是一个SQL Anywhere新手的错误。谢谢大家的帮助。
答案 3 :(得分:1)
COMMENTS表中的list_text列是什么数据类型?你期望支持多少个字符?
如果要从PowerBuilder嵌入式SQL更新大型文本或二进制数据,那么使用UPDATEBLOB语句的方法就是这样做。
Blob lBlob
bBlob = Blob(var_containing_large_string)
UPDATEBLOB COMMENTS
SET comment_text = :lBlob
WHERE ID = :lngID
USING trans_object ;
请查看设置BinTxtBlob以及SELECTBLOB和UPDATEBLOB语句的文档: http://infocenter.sybase.com 文档很混乱,因为它声明列必须是“blob”类型,但这包括text数据类型(可以从BinTxtBlob设置的文档中看到)。
答案 4 :(得分:0)
我不知道你正在使用什么数据库,但如果采用行锁,这就是我期望的行为。
<@> @NoazDad是一位经验丰富的PowerBuilder人,尽管他目前在SO上获得了71分。我会接受他的建议(和这也是我做事的方式)。答案 5 :(得分:0)
该表似乎已被锁定。 该表必须有多种可能的锁定方式。 1.其他用户连接到同一数据库,并在该表中进行一些数据操作。 2.该表在其他实例先前执行期间未提交或回滚。