powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / не отрабатывает объект docmd в ActiveX контроле
10 сообщений из 10, страница 1 из 1
не отрабатывает объект docmd в ActiveX контроле
    #33603724
Eshu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть база данных access, к которой прикреплен контрол.Контрол работает нормально.Вот кусок кода, из контрола. Здесь удаляется таблица из базы данных.

проблема заключается в том , что вроде все отрабатывает без ошибок, появляется сообщение "Удаляется таблица buffer" , но в базе данных никаких изменений не происходит.

Функция myfunc вызывается при нажатии кнопки в форме из бызы данных...


Public Function myfunc(ByVal buf As String, ByVal fname As String) As Variant

Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
MsgBox "Удаляется таблица buffer"
appAccess.DoCmd.DeleteObject acTable, "buffer"

помогите , объясните , господа программисты ... не понимаю... что то делаю не так
...
Рейтинг: 0 / 0
не отрабатывает объект docmd в ActiveX контроле
    #33603765
Интересный код. Что-то не видно, как ты базу открываешь.

Еще... Раз ты используешь поздное связывание и у тебя НЕ подключена ссылка на Access, то твоя программа понятия не имеет, что такое acTable. acTable - это константа Access (если у тебя стоит Option Explicit, то по идее должна быть ошибка "Variable not defined").

Исходя из учета всего вышеизложенного предлагаю такой вариант.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim appAccess As Object
Const acTable =  0 

Sub DeleteTable( _
  strTableName As String)
    
    Set appAccess = CreateObject("Access.Application")

    With appAccess
        .OpenCurrentDatabase ("E:\1\db1.mdb")
        ' Видимость на твое усмотрение.
        '.Visible = True
        .DoCmd.DeleteObject acTable, strTableName
    End With
End Sub
...
Рейтинг: 0 / 0
не отрабатывает объект docmd в ActiveX контроле
    #33603780
Eshu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я так пробовал открывать базу...появляется сообщение :
run-time error '7866 '
приложению не удается открыть базу , база данных открыта другим пользователем с монопольным доступом , или файл базы данных отсутствует.

Путь к базе написан правильно , несколько раз проверял .Кроме того , база уже открыта , в ней все дело происходит.и контрол этот находиться в базе в одной из форм.А все эти константы определены в дао , кажется , потому никаких ошибок не выходит ...
...
Рейтинг: 0 / 0
не отрабатывает объект docmd в ActiveX контроле
    #33603804
Eshu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кроме того на добавленную в этот же код команду :

appAccess.DoCmd.OpenForm "error"

появляется ошибка :
run-time error '2046'
Команда или макрокоманда "открыть форму" в данное време недоступна.



тут уж нет никаких констант
...
Рейтинг: 0 / 0
не отрабатывает объект docmd в ActiveX контроле
    #33603805
Eshu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"error"- это форма в базе данных
...
Рейтинг: 0 / 0
не отрабатывает объект docmd в ActiveX контроле
    #33604117
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если верить этому Eshu Функция myfunc вызывается при нажатии кнопки в форме из бызы данных...
то вы уже находитесь в базе данных и лишних телодвижений делать не надо
Код: plaintext
1.
2.
3.
4.
Private Sub Кнопка0_Click()
    MsgBox "Delete Table"
    DoCmd.DeleteObject acTable, "Таблица1"
End Sub
...
Рейтинг: 0 / 0
не отрабатывает объект docmd в ActiveX контроле
    #33604574
Eshu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за подсказку...но дело в том , что это учебная работа, и суть заключается именно в том , чтоб совершать некоторые действия над базой данных при помощи activex ...в частности присутствует обработка таблиц и форм
...
Рейтинг: 0 / 0
не отрабатывает объект docmd в ActiveX контроле
    #33605256
Eshu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
для того, что бы производить какие то операции над базой необходимо ее открыть ...
при попытке сделать это из activex controla появляется сообщение об ошибке, причем это сообщение появляется всегда , какую бы базу я не пытался открыть:
run-time error '7866 'приложению не удается открыть базу , база данных открыта другим пользователем с монопольным доступом , или файл базы данных отсутствует.

однако если я вставляю эдентичный код в обработку события в форме , то все отрабатывает отлично, база открывается и таблица удаляется ...

Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase ("C:\Work\dms2.mdb")
appAccess.DoCmd.DeleteObject acTable, "buffer"

может у activex controla ограниченная функциональность и многое нельзя делать, например открывать базы данных и удалять из них таблицы ...
объясните , пожалуйста, господа прогараммисты :)
...
Рейтинг: 0 / 0
не отрабатывает объект docmd в ActiveX контроле
    #33606785
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дублирую
Все можно, просто вместо CreateObject надо было использовать GetObject.
Для примера я создал ActiveX dll TestAccessDocmd, содержащий класс Docmd:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Option Explicit
Enum AcObjectType
    acTable =  0 
    acQuery =  1 
    acForm =  2 
    acReport =  3 
    acMacro =  4 
    acModule =  5 
End Enum

Public Function DeleteObject(ObjectType As AcObjectType, ObjectName As String, DataBaseName As String)
    Dim objAccess As Object
    Set objAccess = GetObject(DataBaseName)
    objAccess.Docmd.DeleteObject ObjectType, ObjectName
    Set objAccess = Nothing
End Function

В коде mdb пишу
Код: plaintext
1.
2.
3.
    Dim obj As Object
    Set obj = CreateObject("TestAccessDocmd.Docmd")
    obj.DeleteObject acTable, "Table1", CurrentDb.Name
    Set obj = Nothing

Запускаю, процедуру, содержащую этот код, все нормально удаляет.
...
Рейтинг: 0 / 0
не отрабатывает объект docmd в ActiveX контроле
    #33609966
Serge Gavrilov прав вместо функции CreateObject, воспользуйся функцией GetObject.

Создал ActiveX Control с методом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Const acTable =  0 

Public Function DeleteTable(strDbName As String, strTableName As String) _
  As Variant
    Dim objAcc As Object

    Set objAcc = GetObject(strDbName)

    objAcc.DoCmd.DeleteObject acTable, strTableName

    Set objAcc = Nothing
End Function

Компилирую и добавляю элемент на форму.

На кнопку, размещенную на той же форме, что и элемент добавляю код:

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub cmdDelete_Click()
    Dim ctl As ctlDelTable
    
    Set ctl = Me.ctlDelTable6.Object
    
    ctl.DeleteTable CurrentProject.FullName, "buffer"
End Sub

Все прекрасно удаляется.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / не отрабатывает объект docmd в ActiveX контроле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]