在我们的VB6应用程序中,我们使用ADODB.Recordsets并利用MSDataShape的数据提供程序通过SHAPE命令创建一个关系记录集。
在最新的Windows 10功能(1809)中,我们的代码因以下错误而中断:-
“-2147217900 NEW列SiteCode的长度不能为零”
来自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
这可能与最终被删除as mentioned here有关。
...但是我不确定是否还没有。有人遇到过这个问题吗?
编辑:我已经在升级的计算机和1809的全新安装上尝试过此操作,并且在两者上均已损坏。
编辑2 :与该问题有关的其他论坛主题列表:
编辑3 :Windows 1809的11月13日最新更新仍然无法解决此问题。 要解决此问题,请read this 。
答案 0 :(得分:3)
我遇到了同样的问题...但是,我发现了此问题的解决方法... 用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 OS Build:17763.475)中得到解决。,一切对我来说都很好。
答案 1 :(得分:1)
我找到了一种适用于所有情况的解决方案。
使用OLEDB数据类型SELECT
代替public Collection<?> unite(Collection<Collection<?>> collection) {
Collection<?> newCollection = new Collection<>();
for(Collection<?> element : collection) {
newCollection.merge(element);
}
return newCollection;
}
。例如,相反:
adVarChar(size)
写:
DBTYPE_BSTR
注释:
答案 2 :(得分:0)
虽然这不能直接回答您的问题,但MSDataShape已过时并已删除。
建议您将查询移植到FROM XML
并更改客户端以使用SAX或请求解析器解析响应。
答案 3 :(得分:0)
似乎将SHAPE APPEND new adVarChar(8) as SiteCode
更改为
SHAPE APPEND new adLongVarChar as SiteCode
导致SiteCode不能作为排序键。
但是SHAPE APPEND new adLongVarChar as SiteCode,calc(Left$(SiteCode,8)) as SiteCode_Calc
的SiteCode_Calc似乎可以作为排序键。
但是,当获得SiteCode_Calc的值时,MoveNext / EOF似乎无法正常工作。
答案 4 :(得分:0)
正如@Shrikant所提到的,此问题已在最近的Windows更新(版本:1809 OS Build:17763.475)中得到修复,并确认已在1903年得到修复。