在我们的VB6应用程序中,我们使用ADODB。记录集,并使用 MSDataShape 的数据提供程序使用 SHAPE 命令创建关系记录集。
在最新的Windows 10功能(1809(中,我们的代码中断并出现以下错误:-
"-2147217900 新列的长度不能为零">
从 Excel 中的以下宏(其中 MDAC 是参考(
Public Sub TestRun()
Dim rsStockCheck As Recordset
On Error GoTo ErrorHandler
' set up shape recordset
Set rsStockCheck = New Recordset
With rsStockCheck
.ActiveConnection = "Provider=MSDataShape;Data Provider=None"
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockBatchOptimistic
.Open "SHAPE APPEND new adInteger as StockCheckID, new adInteger as SiteID, new adVarChar(8) as SiteCode"
.ActiveConnection = Nothing
End With
ErrorHandler:
If Err.Number <> 0 Then
MsgBox "failed: " & Err.Description
Else
MsgBox "works ok"
End If
Set rsStockCheck = Nothing
End Sub
这可能与此处提到的最终删除有关。
。但我不确定是否只是。有没有人遇到过这个问题?
编辑:我已经在升级的机器和1809的全新安装上尝试过这个,但它在两个机器上都坏了。
编辑2:有关此问题的其他论坛主题列表:
- Microsoft "数据平台开发> ADO.NET 数据集"论坛
(由其他人举报,也影响Server 2019(
Microsoft "Windows 桌面开发 - >常规 Windows 桌面开发问题"论坛 Microsoft "Windows 10
- IT 专业人员> Windows 10预览体验成员预览版"论坛
- Microsoft "Windows Server Windows> Server Insiders"论坛
编辑3:适用于Windows 13的最新11月1809更新仍未解决此问题。但是,有关解决方法,请阅读此内容。
我也有同样的问题...但是,我找到了解决此问题的方法... 用 adLongVarChar 替换 adVarChar(##( 为我完成了这项工作......
请回复,如果有人有其他解决方案
编辑: 此解决方法不适用于以下查询:
SHAPE APPEND NEW adLongVarChar As INVNO, NEW adLongVarChar As iCP,
((SHAPE APPEND NEW aadLongVarChar As INVNO,NEW adLongVarCharAs iCP,NEW adLongVarChar As F1,NEW adLongVarChar As F2,NEW adLongVarChar As F3)
AS Trans RELATE INVNO TO INVNO,iCP TO iCP)
寻找解决此问题的解决方案
编辑:此错误已在最近的Windows更新中修复(版本:1809操作系统内部版本:17763.475(。一切对我来说都很好。
我找到了一个适用于所有场景的解决方案。
而不是adVarChar(size)
使用 OLEDB 数据类型DBTYPE_BSTR
。例如,改为:
SHAPE APPEND NEW adVarChar(8) As INVNO, NEW adVarChar(8) As iCP,
((SHAPE APPEND NEW adVarChar(8) As INVNO,NEW adVarChar(8) As iCP...)
AS Trans RELATE INVNO TO INVNO,iCP TO iCP)
写:
SHAPE APPEND NEW DBTYPE_BSTR As INVNO, NEW DBTYPE_BSTR As iCP,
((SHAPE APPEND NEW DBTYPE_BSTR As INVNO,NEW DBTYPE_BSTR As iCP...)
AS Trans RELATE INVNO TO INVNO,iCP TO iCP)
笔记:
- DBTYPE_BSTR不接受字段的大小,所以它不完全是 varchar
- 我不得不使用DBTYPE_BSTR关键字,使用adBSTR在命令中生成了错误消息 (?!
虽然这不能直接回答你的问题,但 MSDataShape 已过时并被删除。
建议将查询移植到FROM XML
,并将客户端更改为使用 SAX 或拉取分析器分析响应。
似乎将SHAPE APPEND new adVarChar(8) as SiteCode
更改为SHAPE APPEND new adLongVarChar as SiteCode
导致站点代码不能是排序键。
但是,似乎SiteCode_CalcSHAPE APPEND new adLongVarChar as SiteCode,calc(Left$(SiteCode,8)) as SiteCode_Calc
都可以是排序键。
但是,当获得SiteCode_Calc的值时,MoveNext/EOF似乎将无法正常工作。
正如@Shrikant所提到的,这在最近的Windows更新(版本:1809操作系统内部版本:17763.475(中得到了修复,并且还确认它在1903年已修复。