Ошибка MSDataShape, ошибка при обновлении до Windows 10 1809 Feature Update - PullRequest
0 голосов
/ 04 октября 2018

В нашем приложении VB6 мы используем ADODB.Recordsets и используем поставщик данных для MSDataShape для создания реляционного набора записей с командами SHAPE.

В последней версии Windows 10 (1809) наш код ломаетсяследующая ошибка: -

"- 2147217900 Длина нового столбца 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

Это может быть связано с тем, что это в конечном итоге будет удалено , как упомянуто здесь .

... но я не уверен, что это только сейчас.Кто-нибудь сталкивался с этой проблемой?


РЕДАКТИРОВАТЬ : я пробовал это на модернизированной машине и Fresh установке 1809, и она сломана на обоих.


РЕДАКТИРОВАТЬ 2 : Список других тем форума, относящихся к этой проблеме:

EDIT 3 : последнее обновление 13 ноября для Windows 1809, по-прежнему не решает эту проблему. Однако для обхода проблемы прочитайте это .

Ответы [ 5 ]

0 голосов
/ 25 июня 2019

Как уже упоминал @Shrikant, это было исправлено в недавнем обновлении Windows (версия: сборка ОС 1809: 17763.475), а также подтверждает, что это исправлено в 1903 году.

0 голосов
/ 16 февраля 2019

Я нашел решение, которое работает во всех сценариях.

Вместо 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)

Примечания:

  1. DBTYPE_BSTR не принимаю размер поля, поэтому это не совсем varchar
  2. Мне пришлось использовать ключевое слово DBTYPE_BSTR , использование adBSTR привело к сообщению об ошибке в команде (?!).
0 голосов
/ 04 ноября 2018

Хотя это не дает прямого ответа на ваш вопрос, MSDataShape устарела и удаляется.

Рекомендуется перенести ваши запросы на FROM XML и изменить ваш клиент для анализа ответа с использованием SAX или парсера pull.

0 голосов
/ 08 января 2019

Кажется, изменение SHAPE APPEND new adVarChar(8) as SiteCode на SHAPE APPEND new adLongVarChar as SiteCode приводит к тому, что SiteCode не может быть ключом сортировки.

Однако кажется, что SiteCode_Calc SHAPE APPEND new adLongVarChar as SiteCode,calc(Left$(SiteCode,8)) as SiteCode_Calc может быть ключом сортировки.

Однакокажется, что MoveNext / EOF не будет работать правильно, когда получено значение SiteCode_Calc.

0 голосов
/ 05 октября 2018

Та же проблема со мной ... Однако я нашел обходной путь для этой проблемы ... Замена adVarChar (##) на adLongVarChar делает работу за меня ...

Пожалуйста, ответьте, если кто-нибудьимеет другое решение

Отредактировано: этот обходной путь не применим к таким запросам, как

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). У меня все работает нормально.

...