Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

VBA и открытие базы

Здравствуйте, comp

Как в VBA открыть базу Access, и проверить есть ли в ней
таблица с заданым именем. Если известно только путь к
базе и имя таблицы.

С уважением, KS
Номер выпуска : 2816
Возраст листа : 200 (дней)
Количество подписчиков : 388
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/122126
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   KS Fri, 9 Apr 2004 22:18:28 +0300 (#122126)

 

Ответы:

Уважаемый KS!
Прочел Ваше письмо об открытии БД Access и проверке наличия там таблицы.
Извините, что долго не мог ответить - тяжкие проблемы в паганном
"реале". Если "поезд еще не ушел" - пожалуйста: Для
открытия базы данных Access требуется использовать средства объектной
среды DBEngine в которой и "существуют" такие БД. В своей программе
Вам потребуется описать и определить объект, соответствующий требуемой
БД, а затем открыть его соответствующим методом. Приведу фрагмент
соответствующего исходного кода VBA:

Rem NameB - имя параметра, представляющего имя требуемой Вам базы
Rem данных (полное имя - "вместе с путем")
Rem NameT - имя параметра, представляющего имя требуемой таблицы
Rem tbd - база данных
Dim tbd As DataBase
Rem tws - рабочая область
Dim tws As Workspace
Rem nws - номер рабочей области
Dim cws - число рабочих областей
Dim nws As Long, cnw As Long
Rem Inorma - код возможной ошибки
Dim Inorma As Integer,I1 As Integer
Rem Ifind - признак наличия требуемой таблицы
Dim Ifind As Boolean
Let Ifind = False
Rem ...

Let cnw = DBEngine.Workspaces.Count - 1
For nws = 0 To cnw Step 1
Set tws = DBEngine.Workspaces(nws)
Let Inorma = Err.number
On Error Resume Next
Set tbd = tws.OpenDatabase( Eval(NameB) )
Rem если так не пройдет - поставьте
Rem даже Set tbd = Eval( "tws.OpenDatabase(""" & NameB & """)")
Rem если же Вы хотите сделать исходный код для
Rem уникальной-неповторимой-единственной базы данных, то
Rem поставьте Set tbd = tws.OpenDatabase("полное имя Вашей БД в виде
Rem строкового выражения")
If Not Err.Number = Inorma Then GoTo W1
Rem ТЕПЕРЬ БАЗА ДАННЫХ ВСЯ ВАША - ИМЕЙТЕ ЕЕ ПО СВОИМ ПОТРЕБНОСТЯМ!
Rem чтобы было более выразительно - позволю себе процедуру опознания
Rem таблицы представить в отдельном фрагменте кода, а тут поставим
Rem псевдокод:
Rem ПРОВЕРКА НАЛИЧИЯ ТАБЛИЦЫ NameT В БАЗЕ ДАННЫХ NameB

Rem ...тут должен стоять тот код, что я покажу отдельно

Rem ВСЕ-ПРОВЕРКА НАЛИЧИЯ ТАБЛИЦЫ NameT В БАЗЕ ДАННЫХ NameB
If Ifind Then Exit For
W1:
Err.Clear
Next nws
W2:
Rem ...

Итак, делаем проверку наличия таблицы NameT:

Rem ttb - текущая база данных
Dim ttb As TableDef

Rem ...

For Each ttb In tbd.TableDefs
Let Ifind = (ttb.Name = NameT)
If ttb.Name = NameT Then
Let S1 = "ТРЕБУЕМАЯ ТАБЛИЦА '" & NameT & "' НАШЛАСЬ В"
Let S2 = " УКАЗАННОЙ БАЗЕ ДАННЫХ '" & NameB & "'!"
Let S3 = "I ШО Ж ЦЭ ТОБI ДАЛО?"
Let I1=MsgBox( S1 & S2 ,,S3)
Exit For
End If
Next ttb

Хочу обратить Ваше внимание на то обстоятельство, что СУБД Access
обладает довольно развитой справочной системой. Во всяком случае, это
мое утверждение полностью справедливо для Access95. Так что если Вы
будете вести себя как "Алиса в стране чудес" и "кушать", что попадет
под руку, не брезгуя достаточно часто нажимать F1 и конечно,
"сохраняясь", как doom'ер, то за какую-нибудь недельку у Вас пропадет
охота задавать подобные вопросы. Но если на Вашей Access нет хорошего
help'а, то это довольно печально (и никаких других комментариев не
дам) - тогда ставьте себе Access95.
Может быть, когда-нибудь снова встретимся в Сети.
Пока, Приходько.



Номер выпуска : 2883
Возраст листа : 210 (дней)
Количество подписчиков : 385
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/128943
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Mon, 19 Apr 2004 14:00:06 +0400 (#128943)