SQL状态37000 [Microsoft] [ODBC Microsoft Access驱动程序]语法错误或访问冲突

问题描述:

美好的一天!SQL状态37000 [Microsoft] [ODBC Microsoft Access驱动程序]语法错误或访问冲突

我得到这个错误:

SQL STATE 37000 [微软] [ODBC Microsoft Access驱动程序]语法错误 或访问冲突,试图在 的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 

我能拿出一个只需使用PowerBuilder的datetime()函数即可解决此问题。但是,该程序的其他部分导致了这一点,我很难确定程序的哪一部分会导致此问题。我觉得这很奇怪,因为我在我的dev-pc这里运行相同的脚本,根本没有任何问题,但是当试图在客户端的工作站上运行该程序时,出现此错误。我还没有发现工作站和我的dev-pc有任何差异。我也试过按照说明here,但问题仍然存在。

更新:我能确定导致此问题的其他脚本:像传递日期时间变量

///////////////////////////////////////////////////////////////////////////// 
// 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 

似乎导致上述错误。其他脚本工作正常。

+0

什么是冒号的目的正确的日期时间格式? –

+0

在SQL语句中可以引用常量的地方,以冒号(:)开头的PowerScript变量可以替代。 - 这是来自powerbuilder帮助文件。 – jmevangelist

+0

部署的ODBC驱动程序的任何可能性与您在开发机器上使用的ODBC驱动程序不一样?也许部署的驱动程序没有获得许可。 (我也想问问你为什么使用ODBC,而不是接近本地的东西,但这可能超出了一个小的“修复”)。 – Terry

  • 创建事务用户对象继承trom事务。
  • 将逻辑放入对象的sqlpreview中,以捕获并记录发送到db的sql语句。
  • 实例化它,连接到数据库,并在嵌入式SQL中使用它。
  • 假设用户得到错误,您可以检查发送到数据库的内容并从那里开始。

您的第一条语句中的错误应该是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

与你使用