ADOX:: _property:get_value () * всегда * терпит неудачу ! !
Обычно я не пытаюсь обратиться за помощью в интернете (если только это не какая-то не очень известная программная технология, как, скажем, CUDA), но эта проблема заставляет меня рвать на себе волосы, как говорится (у меня слишком мало волос, чтобы сделать это в буквальном смысле, но все равно)..
Кстати, это вопрос с++. Приношу извинения сообществу VB, если это неподходящее место для публикации этого вопроса..
Проблема в АДОКСЕ. Более конкретно, с интерфейсом" Property "(или" class", или" object", или" IDispatch pointer", или как еще вы хотите его назвать), определенным same.
У меня нет проблем с получением указателя IDispatch интерфейса " Property "из коллекции" Properties", последний из которых я получаю либо из интерфейсов" Table"," Column", либо" Index". Эта часть отлично работает.
У меня также нет никаких проблем при использовании указателя IDispatch класса " Property "для получения" Name "и" Type " свойства ADOX.
Проблема в том, что всякий раз, когда я пытаюсь получить "значение ""свойства" (для которого у меня есть "имя "и" тип"), оно всегда возвращать ошибку.
Код ошибки (он же "HRESULT") всегда один и тот же: 0x800a0cb3. Разбивая это, согласно (отличным) комментариям в WinError. h, я получаю:
Серьезность ("указывает на успех/неудачу"): сбой
Facility ("код объекта"): "FACILITY_CONTROL" (что бы это ни значило)
Код ("код состояния объекта"): 3251 (0xCB3)
Согласно "Ссылка на ошибку ADO", Код ошибки 3251 переводится как "код ошибки ADO" (в отличие от" кода ошибки ADOX", который, похоже, не существует) под названием "adErrFeatureNotAvailable", который он описывает как:
"Объект или поставщик не способен выполнить запрошенную операцию. Некоторые операции зависят от конкретной версии поставщика."
Но это не имеет большого смысла. Почему любой поставщик базы данных должен указывать имя и тип свойства, но не его значение?
Говоря о поставщиках баз данных, я попытался получить свойство ADOX "Value", используя несколько различных "поставщиков" баз данных, среди которых:
"Поставщик Microsoft OLE DB для SQL Server"
"Собственный клиент SQL Server 10.0"
"Собственный клиент SQL Server 11.0"
О, И да, как довольно очевидно из вышесказанного, я подключаюсь к локальному экземпляру SQL Server Express 2008 и получаю доступ к базе данных, которую я создал сам, используя аутентификацию SQL Server (то есть используя имя и пароль). Я также подключаюсь через интерфейс ADOX "DataLink", который, похоже, работает безупречно (то есть никаких ошибок, никаких сюрпризов).
Рыская в интернете в поисках решений (что я и продолжаю делать), я наткнулся на это страница, суть которого гласит (или, скорее, подразумевает), что для того, чтобы "обеспечить доступ к специфичным для поставщика свойствам", вы сначала должны установить свойство таблицы ADOX "ParentCatalog" в "каталог" (интерфейс), который в первую очередь у вас есть объект таблицы Независимо от того, насколько глупо или избыточно это звучит, я все равно попробовал и - подождите - получил еще одну ошибку.
На этот раз код ошибки был 3219, что переводится (согласно вышеупомянутой веб-странице) в код ошибки ADO под названием "adErrIntegrityViolation", который он (веб-страница) описал как:
"Значение данных конфликтует с ограничениями целостности поля. Новое значение для поля приведет к дубликату ключа. Значение, которое образует одну сторону связи между двумя записями, может быть недоступно для обновления."
Что было бы здорово, если бы я имел дело с объектом поля ADO-но это не так.
Все это очень расстраивает и сбивает с толку. Кто-нибудь может помочь?
Что я уже пробовал:
Я попытался установить свойство ADOX:: _Table "ParentCatalog" на указатель IDispatch родительского каталога _Table, но получил ошибку, которая не имела смысла в контексте ADOX::_Table..