2013-08-06 82 views
1

我試圖插入一個新的記錄,但有時不DATAWINDOW包括所有列。PowerBuilder的數據窗口更新錯誤

所有列在更新屬性選擇的,但我沒有得到在INSERT語句中的所有列。

+0

你得到一個錯誤信息,或者做一些列只是失蹤? – Seki

+0

我收到數據庫錯誤。當我檢查插入語句我發現列丟失。即使表主鍵。它並不總是發生,但有時它發生。 – user1788373

+0

您能否提供一些細節,如PB版本,使用的dbms和錯誤消息的副本?現在我們必須用cristal球做出一些猜測。 – Seki

回答

1

DataWindow不會在其生成的INSERT語句中始終包含全部列。包含在給定行中的列將取決於DataWindow維護的項目狀態。如果DataWindow將該列視爲DataModified!,則該列將包含在INSERT中。這樣,它不會生成併發送不必要的SQL。

天生列方式將被設置爲DataModified的方式!包括用戶輸入的數據,以及該列是否在DataWindow中設置了初始值,並且是否有數據輸入。 (即具有初始值的列自動設置爲DataModified!,但只有在另一列已設置爲DataModified!後)。 合成你可以設置一列到DataModified!以編程方式使用SetItemStatus()函數。 (只是要注意,我經常看到有人試圖使用這個功能,並且最終會產生意想不到的後果;您需要仔細考慮使用此功能並徹底測試時所有可能性。)

如果有在應用程序的行爲中仍然存在無法解釋的漏洞,我會在DataWindow的SQLPreview事件中設置一個斷點並探索列的值,原始值和項目狀態。查看這三個值幾乎總能解釋生成的SQL。解釋這些值如何達到目前的狀態...通常需要更多的挖掘。

祝你好運,

特里。

+0

但首先將自身插入失敗沒有對新行 – user1788373

+0

因此,所有列的值,回到我所描述的,該如何解決?您是否強制用戶在發出dw.Update()之前輸入值,或者您是否在DataWindow畫家中提供初始值來爲這些列提供默認值?如果用戶和程序員都沒有提供價值,我不確定PB可以預期哪些值可以放入這些列。 (備用:使列可以爲空或在數據庫表定義上提供默認值。) – Terry

0

你也許不調用更新之前accepttext()?