sql 您所在的位置:网站首页 错误代码80040e21 sql

sql

2024-04-22 19:31| 来源: 网络整理| 查看: 265

仔细检查表(T_SAP_ZSSTABL_NEW)的数据类型。Oracle 可能具有不能立即转换为ADO 类型的数据类型,例如BLOB、CLOB、BFILE、高精度数字类型、最大字符类型或扩展类型(XML、媒体等)。

尝试扩展数据长度(或在参数分配中留空):

Set MyParameter = cmd.CreateParameter("MATNR", adVarChar, adParamInput, 100, POSNR) Set MyParameter = cmd.CreateParameter("MATNR", adVarChar, adParamInput, , POSNR)

如果需要,请在附加参数之前使用 VBA 检查可变长度Len()以引发用户警告。

尝试运行SELECT具有相同参数的查询版本以返回单行结果。如果发生同样的错误,从第一个参数开始,然后依次添加第二个或批次 10 以隔离有问题的项目。

SELECT ? AS TSZ_CHARG_PARAM, ? AS TSZ_MATNR_PARAM, ? AS TSZ_MAKTX_PARAM, ... FROM T_SAP_ZSSTABL_NEW WHERE TSZ_VBELN = ? AND TSZ_POSNR = ?

重构代码以保持一致性,因为您可能错过了一个或未对齐的一个,这可能会出现许多重复行。始终以 DRY(不要重复自己)代码为目标。一种选择是使用带有键/值对的字典,而不是 160 多个变量或命名范围:

Dim key As Variant Dim paramDict As Object Set paramDict = CreateObject("Scripting.Dictionary") For ... paramDict.Add "KeyX", "ValueX" Next ... ... With cmd .ActiveConnection = myOracleConn .CommandText = strSQL .CommandType = adCmdText For Each key In paramDict.Keys .Parameters.Append .CreateParameter(key, adVarChar, adParamInput, , paramDict(key)) Next key .Execute End With

如果您有混合类型,请尝试为每种类型创建不同的字典并按顺序迭代它们以附加参数。并调整UPDATE所有相同类型的彼此靠近。召回UPDATE不需要遵循表定义中的列顺序。

如果可能(或长期解决方案),请考虑将TSZ列的宽格式表重新设计为长格式的规范化形式。

ID POSNR VBELN Indicator Value # XXX XXX CHARG XXX # XXX XXX MATNR XXX # XXX XXX MAKTX XXX ...

虽然这将为每个唯一标识符添加 167 行,但在数据库设计中,行比列便宜得多,因此查询会更容易,数据存储更可扩展,维护更高效。例如,新指标不需要包含所有元信息的新定义列,而只需一个新行。使用 Oracle,PIVOT您可以轻松地重新渲染宽格式。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有