web-dev-qa-db-fra.com

Erreur MSDataShape, corrigée lors de la mise à niveau vers Windows 10 Feature Update 1809

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.

2
Max Power

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

3
Shrikant Pungle

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:

  1. DBTYPE_BSTR n'accepte pas la taille du champ, donc ce n'est pas exactement un varchar
  2. Je devais utiliser DBTYPE_BSTR mot clé, utiliser adBSTR produisit un message d'erreur dans la commande (?!).
0
Milan Oparnica

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.

0
Adrian

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.

0
nabe