1

再会!

我收到此错误:

SQL STATE 37000 [Microsoft][ODBC Microsoft Access Driver] 尝试在 Powerscript 上运行嵌入式 SQL 语句时出现语法错误或访问冲突。

我正在使用 MsSQL Server 2008 和 PowerBuilder 10.5,操作系统是 Windows 7。我能够确定导致问题的查询之一:

SELECT top 1 CONVERT(DATETIME,:ls_datetime)
into :ldtme_datetime
from employee_information
USING SQLCA;

if SQLCA.SQLCODE = -1 then
    Messagebox('SQL ERROR',SQLCA.SQLERRTEXT)
    return -1 
end if

datetime()通过使用PowerBuilder的功能,我能够想出一个解决方案。但是程序的其他部分导致了这种情况,我很难确定程序的哪一部分导致了这种情况。我觉得这很奇怪,因为我在这里运行相同的脚本dev-pc完全没有问题,但是当尝试在我的客户端工作站上运行程序时,我收到了这个错误。我没有发现工作站和我的dev-pc. 我也尝试按照此处的说明进行操作,但问题仍然存在。

更新:我能够识别导致问题的其他脚本:

/////////////////////////////////////////////////////////////////////////////
//  f_datediff
//  Computes the time difference (in number of minutes) between adtme_datefrom and adtme_dateto
////////////////////////////

decimal ld_time_diff

SELECT top 1 DATEDIFF(MINUTE,:adtme_datefrom,:adtme_dateto)
into :ld_time_diff
FROM EMPLOYEE_INFORMATION
USING SQLCA;

    if SQLCA.SQLCODE = -1 then
        Messagebox('SQL ERROR',SQLCA.SQLERRTEXT)
        return -1
    end if

return ld_time_diff

似乎传递日期时间变量会导致上述错误。其他脚本工作正常。

4

2 回答 2

0
  • 创建一个事务用户对象继承 trom 事务。
  • 将逻辑放在对象的 sqlpreview 中,以捕获并记录发送到数据库的 sql 语句。
  • 实例化它,连接到数据库,并在您的嵌入式 sql 中使用它。
  • 假设用户收到错误,您可以检查发送到数据库的内容并从那里开始。
于 2013-08-02T11:47:59.683 回答
0

第一条语句中的错误应该是 CONVERT 函数的第二个参数。它的类型不是字符串,它的类型是有效的表达式 https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql

所以我希望你的

CONVERT(DATETIME,:ls_datetime)

将评估为

CONVERT(DATETIME, 'ls_datetime')

但应该是

CONVERT(DATETIME, DateTimeColumn)

第二条语句中的错误可能是您提供了错误的日期时间格式。所以请检查您使用此功能时是否仍然出现错误 https://docs.microsoft.com/en-us/sql/t-sql/statements/set-dateformat-transact-sql

使用您使用的正确日期时间格式

于 2017-05-11T10:13:53.620 回答