2011-08-23 85 views
0

在我們的應用程序中使用DataWindow中的SqlErrText時,我似乎遇到了一個奇怪的問題。PowerBuilder沒有正確存儲來自SQL Server的錯誤消息

DataWindow執行一個存儲過程,讓我們調用它vp_ut_storedProc,在我的情況下,它會在DataWindow更新時拋出一個錯誤。

當我進入的功能,爲我們的應用程序中的錯誤信息,則SqlErrText傳入如下(參數asErrText):

SQLSTATE = 42000 
Microsoft SQL Server Native Client 10.0 
TimestampNV|Someone Has Updated the Record. Please Refresh. 

No changes made to the database 

execute dbo.vp_ut_storedProc 

我知道PowerBuilder的接收整個錯誤文本這是一件好事。但是,當我們試圖以錯誤文本保存到一個局部變量

isErrText = asErrText 

isErrText的值是:SQLSTATE = 42000

所以,出於某種原因,它完全忽略第二行之後的一切。我認爲這與PowerBuilder在字符串中讀取的方式有關,但我不知道爲什麼會發生這種情況。

我還應該指出,它不僅限於這一個DataWindow。它發生在其中很多人身上。

+0

你能告訴我們你是如何確定isErrText的價值嗎?您是否嘗試將其分配給MLE,該MLE是爲處理多行文本而構建的? – Terry

+0

我正在通過運行調試器來確定數值。 當傳入錯誤文本(asErErText)時,一切正常,即可以看到所有行。 但是,只要isErrText(STRING)被分配爲ErrText,isErrText的值就是「SQLSTATE = 42000」 然後顯示在彈出式窗口中,MLE被分配了isErrText的值。 –

+0

那麼,我可以舉幾十個更多的情況下調試器顯示是一個問題比我可以在字符串傳遞或字符串分配(你從來沒有告訴我們asErrText是預期的)損壞的數據的情況下。我打開QuickWatch並輸入「剪貼板(isErrText)」和評估,然後粘貼到文本編輯器中,以獲得更可靠的變量值評估。另外,如果您建議使用PB錯誤,指定版本將對您有所幫助。 – Terry

回答

0

把這個在你的DataWindow

串s_temp

長l_start你dberror事件,l_end

l_start = 42 +波什(sqlerrtext, 'Microsoft SQL Server本機客戶端10.0')

l_end =名次(sqlerrtext,sqlsyntax) - l_start - 3

IF l_e ND < = 0 THEN l_end = LEN(sqlerrtext) - l_start

s_temp =中(sqlerrtext,l_start,l_end)

fw_msg(s_temp)//可以在消息框(this.title,s_temp)寫此/ /代替

RETURN 1

如果其插入或選擇錯誤。它會忽略語法並輸出錯誤。如果它有不同的錯誤。它顯示了其餘的errcode

相關問題