Dans notre application VB6, nous utilisons ADODB.Recordsets et utilisons le fournisseur de données pour MSDataShape pour créer un jeu d'enregistrements relationnel avec des commandes SHAPE.
Dans la dernière fonctionnalité Windows 10 (1809), notre code rompt avec l'erreur suivante: -
"-2147217900 La longueur de la colonne NEW SiteCode ne peut pas être zéro"
à partir de la macro suivante dans Excel (où MDAC est une référence)
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
Cela pourrait être lié au fait que cela a finalement été supprimé comme mentionné ici .
... mais je ne suis pas sûr que ce soit pour le moment. Quelqu'un at-il rencontré ce problème?
EDIT: J'ai essayé ceci sur une machine mise à jour et une nouvelle installation de 1809 et c'est cassé sur les deux.
EDIT 2 : Liste des autres sujets du forum relatifs à ce problème:
EDIT 3 : La dernière mise à jour du 13 novembre pour Windows 1809 ne résout toujours pas ce problème. Pour une solution de contournement cependant, lisez ceci.
Même problème avec moi ... Cependant, j'ai trouvé la solution de contournement pour ce problème ... Remplacer adVarChar (##) par adLongVarChar fait le travail pour moi ...
S'il vous plaît répondre, si quelqu'un a une autre solution
Modifié: Cette solution de contournement ne s'applique pas aux requêtes telles que
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)
Trouver une solution pour sortir de ce problème
J'ai trouvé une solution qui fonctionne dans tous les scénarios.
Au lieu de adVarChar(size)
, utilisez le type de données OLEDB DBTYPE_BSTR
. Par exemple, à la place:
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)
écrire:
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)
Remarques:
Bien que cela ne réponde pas directement à votre question, MSDataShape est obsolète et est supprimé.
Nous vous suggérons de porter vos requêtes sur FROM XML
et de changer votre client pour qu'il analyse la réponse à l'aide de SAX ou d'un analyseur syntaxique.
Il semble que changer SHAPE APPEND new adVarChar(8) as SiteCode
en SHAPE APPEND new adLongVarChar as SiteCode
provoque que SiteCode ne puisse pas être une clé de tri.
Cependant, il semble que SiteCode_Calc of SHAPE APPEND new adLongVarChar as SiteCode,calc(Left$(SiteCode,8)) as SiteCode_Calc
puisse être une clé de tri.
Cependant, il semble que MoveNext/EOF ne fonctionnera pas correctement lorsque la valeur de SiteCode_Calc sera obtenue.