Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: CreateObject под Runtime2003 !!!???
 
 автор: Прохожий   (16.01.2009 в 16:08)   личное сообщение
 
 

Выдает сообщение, что ActiveX компонент не может создать объект...
В чем тут дело?
Кто нибудь сталкивался с подобным?

  Ответить  
 
 автор: час   (16.01.2009 в 16:15)   личное сообщение
 
 

извините,
а где пример кода?

  Ответить  
 
 автор: FORMAT   (16.01.2009 в 16:18)   личное сообщение
 
 

И шо может дать этот пример кода?
Разве што глянуть как регется этот актив икс

  Ответить  
 
 автор: час   (16.01.2009 в 16:44)   личное сообщение
 
 

Ну извини, FORMAT - я подумал может так нагляднее разговор получиться - нежели ни о чём...
Был не прав

  Ответить  
 
 автор: osmor   (16.01.2009 в 16:20)   личное сообщение
 
 

Вероятно Объект который вы пытаетесь Create отсутвует или криво зарегистрирован

  Ответить  
 
 автор: Прохожий   (16.01.2009 в 16:27)   личное сообщение
 
 

Dim appAccess As Access.Application
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase strActiveConnection, False
appAccess.DoCmd.CopyObject strReplicaName, , acTable, "tblWares"
appAccess.DoCmd.CopyObject strReplicaName, , acTable, "tblBarCode"
appAccess.DoCmd.CopyObject strReplicaName, , acTable, "tblAvailability"
Set appAccess = Nothing

Под Access все работает, глюк возникает при запуске под Runtime

  Ответить  
 
 автор: osmor   (16.01.2009 в 16:37)   личное сообщение
 
 

а-а-а так вы ACCESS создаете...
Кажется Run-Time так нельзя создать т.к. он не запускается без MDB файла, попробуйте использовать GetObject("C:\Путь\ФАйл.mdb")

правда не совсем понятно зачем второй раз отрывать тот же MDB (мне показалось что именно это Вы делаете)

  Ответить  
 
 автор: Прохожий   (16.01.2009 в 16:47)   личное сообщение
 
 

Запускается библиотечная процедура которая на данном кусочке кода КОПИРУЕТ таблицы из одного файла mdb в другой mdb
Определяющим мотивом является применение команды DoCmd.CopyObject
как самый простой путь.
И все работало, пока не потребовалось запускаться под Runtime

  Ответить  
 
 автор: час   (16.01.2009 в 16:52)   личное сообщение
 
 

Может Вам попробовать создать запросом таблицу в другой базе прилинковав предварительно таблицу к текущей базе?

  Ответить  
 
 автор: Прохожий   (16.01.2009 в 17:09)   личное сообщение
 
 

В том то и дело, что хочется уйти от этого гемороя:
ведь таблицу (а она не временная, это дополнительные локальные таблицы в создаваемой реплике), созданную по запросу, необходимо потом настраивать:
форматировать поля, уточнять типы данных, настраивать ключи и т.д.
т.е. явно делать, то, что "автоматом" делается при копировании объекта.

  Ответить  
 
 автор: Прохожий   (16.01.2009 в 21:51)   личное сообщение
 
 

Провел зксперименты с тремя базами:
1.содержит копируемую таблицу
2.пустая
3.содержит функцию с кодом, аналогичном приведенному ранее

Под рантаймом все тот же результат

А ведь функции CreateObject, GetObject и команда New лежат в основе технологий
использования Access как сервера (клиента) автоматизации...

Получается, что под рантаймом не всякое приложение будет работоспособным.
А жаль, два привлекательных инструментария и оказывается не совмещаются ...
Полный облом.

  Ответить  
 
 автор: Serge Gavrilov   (16.01.2009 в 22:26)   личное сообщение
 
 

Да в чем облом-то?
Что вам мешает заменить CreateObject на GetObject?
Вообще не видно никакой проблемы.
По поводу New: что мешает, например, хранить пустую БД в OLE поле и при необходимости сохранять на диск и использовать GetObject?

  Ответить  
 
 автор: Прохожий   (17.01.2009 в 05:00)   личное сообщение
 
 

Пробовал все и CreateObject и GetObject и New с одним и тем же конечным результатом.
Простой пример из области технологии автоматизации.

запускается db3.mdb в которой по макросу AutoExec вызывается функция:

Public Function MyCopyTable()
On Error GoTo Err_MyCopyTable
Dim appAccess As Access.Application
' Dim appAccess As New Access.Application
MsgBox 1
' Set appAccess = CreateObject("Access.Application")
' appAccess.OpenCurrentDatabase "D:\Мои документы\db2.mdb", False
Set appAccess = GetObject("D:\Мои документы\db2.mdb", "Access.Application")

appAccess.DoCmd.CopyObject "D:\Мои документы\db1.mdb", , acTable, "tblWares"
Set appAccess = Nothing
MsgBox 2
Exit_MyCopyTable:
Exit Function
Err_MyCopyTable:
MsgBox Err & ": " & Error$
Resume Exit_MyCopyTable
End Function

В программе:
Формируется ссылка (по GetObject в данном случае) на приложение db2.mdb
В приложении db2.mdb запускается команда копирования таблицы в базу db1.mdb
Простейший пример.

Под полновесным Access все отрабатывает без проблем.
А вот под Runtime выдает сообщение:

429: ActiveX conponent can't create object

Причем вне зависимости от того как формируется ссылка на приложение выполняющее роль сервера автоматизации:
по CreateObject или GetObject или New

А проблема в том, что возникла потребность исполнения приложения,
используещего такого рода ссылки под рантаймом.
Само приложение я естествено не привожу, в нем своих сложностей хватает.
Но вот пример, без лишней шелухи, казалось бы проще простого.
И работать вроде бы должен, и в рантайме есть все нужные библиотеки в которых
присутствуют все нужные функции и объекты.

ВОТ ТАКАЯ НЕПОНЯТКА...

P.S. При запуске примера под Access в режиме /runtime все работает.
Не работает под "натуральным" рантаймом, хотя вроде бы и должен.

  Ответить  
 
 автор: Serge Gavrilov   (17.01.2009 в 14:51)   личное сообщение
 
 

На какой строке возникает ошибка?
Вы пробовали вместо

Dim appAccess As Access.Application
Set appAccess = GetObject("D:\Мои документы\db2.mdb", "Access.Application")

использовать

Dim appAccess As Object
Set appAccess = GetObject("D:\Мои документы\db2.mdb")

Я разрабатывал проекты для рантайм и особых проблем не было.
Сейчас пока проверить негде.
Может быть скачаю рантайм 2007 и посмотрь

  Ответить  
 
 автор: Прохожий   (17.01.2009 в 20:13)   личное сообщение
 
 

глючит всегда на Set appAccess = и т.д.
т.е. при создании экземпляра класса

Что характерно, глюк как-то связан с типом Access.Aplication

CreateObject при работе с объектами файловой системы
работает под рантаймом без проблем.

P.S. Я работаю по 2003 Office
Ваше последнее предложение я также опробировал.
С тем же результатом.

  Ответить  
 
 автор: Serge Gavrilov   (18.01.2009 в 03:07)   личное сообщение
 
 

Установил на VM Access Runtime 2007.
Вы правы, указанный код приводит к ошибке.
Но достаточно немного подкорректировать и все работает:

Public Function MyCopyTable()
On Error GoTo Err_MyCopyTable
Dim appAccess As Object
Shell """" & Application.SysCmd(acSysCmdAccessDir) & "msaccess.exe"" ""D:\Мои документы\db2.mdb"""
Set appAccess = GetObject("D:\Мои документы\db2.mdb")

appAccess.DoCmd.CopyObject "D:\Мои документы\db1.mdb", , acTable, "blWare"
appAccess.Quit
Set appAccess = Nothing

Exit_MyCopyTable:
Exit Function
Err_MyCopyTable:
MsgBox Err & ": " & Error$
Resume Exit_MyCopyTable
End Function


Для того, чтобы избежать Security Warning создал Trusted Location для каталога с базами

  Ответить  
 
 автор: Прохожий   (18.01.2009 в 21:04)   личное сообщение
 
 

Любопытно, но не совсем понятно.
Не могли бы вы пояснить происходящее
либо сослаться на источник, где бы рассматривался похожий случай.

P.S.
Наблюдал один феномен.
Вначале, в предложенной вами строке Shell и т.д.
допустил синтаксическую ошибку.
Вследствие чего приложение db2.mdb не было найдено и соответственно запущено,
(запустился и повис экземпляр Access)
но ввиду того, что такая ошибка в команде Shell, прерывания исполняемого кода не вызывает,
все отработало и отработало ожидаемым образом.
Получается, что в строке с Shell имя запускаемого приложения для нашего случая
не имеет значения.

  Ответить  
 
 автор: Serge Gavrilov   (18.01.2009 в 21:19)   личное сообщение
 
 

Не могли бы вы пояснить происходящее
либо сослаться на источник, где бы рассматривался похожий случай.


Я добавил строку Shell исходя из логики, так что сослаться на источник не могу.
Известно, что GetObject("ИмяФайла.mdb) либо возвращает ссылку на приложение, если этот файл открыт, либо открывает этот файл в новом или запущенном Access.Application.
Раз не получился один вариант, я попробовал второй.

А описанный вами феномен вы наблюдали в Runtime?

  Ответить  
 
 автор: Прохожий   (18.01.2009 в 21:52)   личное сообщение
 
 

Феномен он и есть феномен, ввиду отсутствия регулярной повторяемости.
Если чесно, то я сейчас и сам сомневаюсь и задаю себе ваш вопрос.
Спасибо за помощь.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList