PowerBuilder 未正确存储来自 SQL Server 的错误消息

发布于 2024-11-30 22:37:13 字数 720 浏览 2 评论 0原文

在我们的应用程序中使用 DataWindow 中的 SqlErrText 时,我似乎遇到了一个奇怪的问题。

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 读取字符串的方式有关,但我不知道为什么会发生这种情况。

我还应该指出,它不仅限于这个数据窗口。其中相当多的人都会遇到这种情况。

I seem to be experiencing a strange issue when using the SqlErrText from a DataWindow in our application.

The DataWindow executes a stored procedure, lets call it vp_ut_storedProc, and in my case it throws an error when the DataWindow is updated.

When I go into the function to build the error message for our application, the SqlErrText is passed in as follows (as parameter 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

I know that PowerBuilder receives the entire error text which is a good thing. But, when we try to save the error text into a local variable

isErrText = asErrText

The value of isErrText is: SQLSTATE = 42000

So, for some reason, it completely ignores everything after the second line. I figure it has something to do with the way the PowerBuilder is reading in the string, but I don't know why this happens.

I should also note that it's not just limited to this one DataWindow. It happens on quite a few of them.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独自←快乐 2024-12-07 22:37:13

将其放入数据窗口的 dberror 事件中

字符串 s_temp

长l_start,l_end

l_start = 42 +Pos(sqlerrtext,'Microsoft SQL Server Native Client 10.0')

l_end = Pos(sqlerrtext,sqlsyntax) - l_start - 3

IF l_end <=0 THEN l_end = Len(sqlerrtext) - l_start

s_temp = Mid(sqlerrtext,l_start,l_end)

fw_msg(s_temp) //可以将其写在messagebox(this.title,s_temp) //改为

返回1

如果插入或选择错误 。它忽略语法并输出错误。如果它是一个不同的错误。它显示了错误代码的其余部分

put this in your dberror event of your datawindow

string s_temp

long l_start, l_end

l_start = 42 +Pos(sqlerrtext,'Microsoft SQL Server Native Client 10.0')

l_end = Pos(sqlerrtext,sqlsyntax) - l_start - 3

IF l_end <=0 THEN l_end = Len(sqlerrtext) - l_start

s_temp = Mid(sqlerrtext,l_start,l_end)

fw_msg(s_temp) //can write this at messagebox(this.title,s_temp) // instead

RETURN 1

if its insert or select error. it ignores the syntax and outputs the error. if its a different error. it shows the rest of the errcode

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文