Восстановление соединения с БД в DataEnvironment

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Восстановление соединения с БД в DataEnvironment

Сообщение $Yastrebov$ » 16.03.2007 (Пт) 8:11

Кратко: Делаю BackUp для БД посредством копирования исходной БД, в другое место. При активном соединении с БД, функция FileCopy(Source,Dest) - выдает ошибку 70 (доступ закрыт).
В случае DataEnvironment1.Connection1.Close, БД копируется, но восстановить соединение не получается. Начальное соединение устанавливается в Private Sub DataEnvironment_Initialize путем указания DataEnvironment1.Connection1.ConnectionString, но повторное соединение ни через DataEnvironment1.Connection1.Open, ни через DataEnvironment1.Connection1.ConnectionString не получается.

Даже если найти способ копирования без отключения, то с восстановлением без отключения никак не обойтись.

Как правильно восстановить соединение как при DataEnvironment_Initialize? Спасибо.
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 18.03.2007 (Вс) 18:30

Специалисты и гуру VB. Я взываю к Вам. :!: Проявите инициативу. Одна надежда на Вашу помощь!
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 18.03.2007 (Вс) 20:03

Я может что-то не понял в вопросе, но проблемы вроде нет.
Код: Выделить всё

Dim JE As New JetEngine

Private Sub Command1_Click()
Dim scnstr1 As String
Dim scnstr2 As String

    scnstr1 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files\Microsoft Visual Studio\VB98\BIBLIO.MDB;"
    scnstr2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\BIBLIO.MDB;"
   
    If DataEnvironment1.Connection1.State = 1 Then DataEnvironment1.Connection1.Close
    If Dir("C:\BIBLIO.MDB") <> "" Then Kill "C:\BIBLIO.MDB"
   
    DataEnvironment1.Connection1.ConnectionString = scnstr1
    DataEnvironment1.Connection1.Open

    DataEnvironment1.Connection1.Close

    JE.CompactDatabase scnstr1, scnstr2

    DataEnvironment1.Connection1.ConnectionString = scnstr2
    DataEnvironment1.Connection1.Open

    Debug.Print DataEnvironment1.Connection1.Properties("DATA SOURCE NAME") '"C:\BIBLIO.MDB"

End Sub

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 18.03.2007 (Вс) 21:09

Спасибо за код.
Сейчас подробнее попробую объяснить проблему.

После DataEnvironment1.Connection1.Open - соединение вроде как устанавливается, но при обращении к таблице(rcCommandX) выдается ошибка. Как указать DataEnvironment1, что rsCommandX - эта та таблица, которая была объявлена в режиме дизайна. Как свзать это из кода?
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 18.03.2007 (Вс) 22:14

но при обращении к таблице(rcCommandX) выдается ошибка



DataEnvironment1.rsCommand1.Open
Debug.Print DataEnvironment1.rsCommand1.Fields(0)

чтобы не происходила блокировка базы, то в дизайне наверно лучше удалить в свойствах DEConection строку ConnectionSource и оставить только иерархию команд

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 19.03.2007 (Пн) 7:29

Вот такая беда:
Код: Выделить всё
DataEnvironment1.Connection1.Close
        'Копирование БД
FileCopy...
        'Подключение к БД
MsgBox DataEnvironment1.Connection1.State 'Тут возвращает 0
DataEnvironment1.Connection1.ConnectionString = ...
DataEnvironment1.Connection1.Open
MsgBox DataEnvironment1.Connection1.State 'Тут возвращает 1

DataEnvironment1.rsCommand1.Open 'А вот тут ощибка - 3709

Debug.Print DataEnvironment1.rsCommand1.Fields(0)


Что может быть не так?
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 19.03.2007 (Пн) 7:37

EUGY писал(а):то в дизайне наверно лучше удалить в свойствах DEConection строку ConnectionSource и оставить только иерархию команд


В этом случае уже на стадии запуска я получаю ошибку (80040200)
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 20.03.2007 (Вт) 9:40

О, великие модераторы alibek, tyomitch, GSerg, Amed :) Призываю Вас к помощи. Знающие, жажду Ваших идей! Нужно срочно решить проблему!
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.03.2007 (Вт) 9:59

:neutral:
ОК, человеку нужен ответ.
Ответ: я никогда не использую DataEnvironment для доступа к данным и только приблизительно догадываюсь, что это.
Остальные ответят за себя...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Сообщение EUGY » 20.03.2007 (Вт) 19:33

GSerg правильно не использует DataEnvironment.
Все можно и через ADO. Поначалу мне он был нужен (DataEnvironment) для связки с DataReport.
Но потом иерархические отчеты научился строить и без него.
Если не лень тебе и всем остальным, приложи аттачем пример.
Разберемся.

$Yastrebov$
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 154
Зарегистрирован: 24.01.2007 (Ср) 7:27
Откуда: Ukraine

Сообщение $Yastrebov$ » 24.03.2007 (Сб) 19:57

Удалось найти решение поставленной задачи!
Вот код для восстановления связи с таблицами в DataEnvironment

Код: Выделить всё
'Собственно восстанавливает связь и открывает таблицы
With DataEnvironment1
.Command1
.Command2
.Command3
End With

'Закрываем открытые таблицы
DataEnvironment1.rsCommand1.Close
DataEnvironment1.rsCommand2.Close
DataEnvironment1.rsCommand3.Close


Всем спасибо!
Жизнь, она как коробка конфет - никогда не знаешь, что вытянешь!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Majestic-12 [Bot] и гости: 92

    TopList