cannot access the file,because it's being used by another ..

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Loiste
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 136
Зарегистрирован: 28.09.2005 (Ср) 11:59

cannot access the file,because it's being used by another ..

Сообщение Loiste » 05.12.2005 (Пн) 10:32

Дубль два :)
Я программно создаю базу данных и заполняю ее таблицами. Вот так:

Код: Выделить всё
Dim strDbName As String
strDbName = Application.StartupPath.Remove(Application.StartupPath.Length - 4, 4) + "\db\" + DiscDBName
Dim catConnection As ADOX.Catalog
catConnection = New ADOX.Catalog
catConnection.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                             "Data Source=" & strDbName)

Dim con As ADODB.Connection
Dim strSQL As String
con = New ADODB.Connection
con.Open("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                             "Data Source=" & strDbName)

catConnection.ActiveConnection = con

strSQL = "CREATE TABLE Razdeli (" & _
                 "Razd_ID int," & _
                 "Razdel VarChar(150));"
con.Execute(strSQL)
strSQL = "CREATE TABLE Topics (" & _
                "Razd_ID int," & _
                 "Topic_ID int," & _
                 "Topic VarChar(150));"
con.Execute(strSQL)
strSQL = "CREATE TABLE Questions (" & _
                 "Topic_ID int," & _
                 "Quest_ID int," & _
                 "Var int," & _
                 "Question VarChar(150)," & _
                 "Ans_Num int);"
con.Execute(strSQL)
strSQL = "CREATE TABLE Answers (" & _
                 "Quest_ID int," & _
                 "Ans_ID int," & _
                 "Answer VarChar(150)," & _
                 "Ans_Key Bit);"
con.Execute(strSQL)
strSQL = "CREATE TABLE Variants (" & _
                 "ID int," & _
                 "Variant VarChar(150));"
con.Execute(strSQL)
        con.Close()
        con = Nothing
        catConnection = Nothing


В процессе работы приложения создаю несколько таких баз. Но может потребоваться удалить какую-либо из них. Проблема заключается в следующем. Если база - файл *.mdb - была создана при одном предыдущих запусков приложения, то файл удаляется без проблем. Если же я хочу удалить файл, созданный при текущей работе приложения, то на строке

Код: Выделить всё
File.Delete(путь)


Возникает вот такая ошибка:

An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll

Additional information: The process cannot access the file "...\tdb73.mdb" because it is being used by another process.


Я так понимаю, что все создаваемые соединения почему-то не закрываются. Видимо в коде, прописаном выше, что-то не так. Может я как-то не так закрываю эти самые соединения. Пожалуйста, подскажите (если можно, развернутый ответ :) ) как это исправить! Замучалась уже, работа стоит :(

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 05.12.2005 (Пн) 10:50

а ты уверена что после этого:

catConnection.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strDbName)

вот это TRUE?
catConnection.ActiveConnection is Nothing

Не теряешь ли ты открытое соединение?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Loiste
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 136
Зарегистрирован: 28.09.2005 (Ср) 11:59

Сообщение Loiste » 05.12.2005 (Пн) 10:52

Погоди секундочку...сейчас проверю!

Такс...после:

Код: Выделить всё
catConnection = New ADOX.Catalog
        catConnection.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                             "Data Source=" & strDbName)


отладчик пишет, что:

Код: Выделить всё
catConnection.ActiveConnection = {System.__ComObject}


А catConnection.ActiveConnection is Nothing у меня FALSE

Это нормально? Или должно быть TRUE?

Loiste
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 136
Зарегистрирован: 28.09.2005 (Ср) 11:59

Сообщение Loiste » 06.12.2005 (Вт) 8:58

Все, разобралась :)

Код теперь выглядит так:

Код: Выделить всё
Dim strDbName As String
        strDbName = Application.StartupPath.Remove(Application.StartupPath.Length - 4, 4) + "\db\" + DiscDBName
        Dim catConnection As ADOX.Catalog
        catConnection = New ADOX.Catalog
        catConnection.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                             "Data Source=" & strDbName)
        Dim con As ADODB.Connection
        Dim strSQL As String
        con = catConnection.ActiveConnection
        catConnection.ActiveConnection = con
        strSQL = "CREATE TABLE Razdeli (" & _
                 "Razd_ID int," & _
                 "Razdel VarChar(150));"
        con.Execute(strSQL)
        strSQL = "CREATE TABLE Topics (" & _
                 "Razd_ID int," & _
                 "Topic_ID int," & _
                 "Topic VarChar(150));"
        con.Execute(strSQL)
        strSQL = "CREATE TABLE Questions (" & _
                 "Topic_ID int," & _
                 "Quest_ID int," & _
                 "Var int," & _
                 "Question VarChar(150)," & _
                 "Ans_Num int);"
        con.Execute(strSQL)
        strSQL = "CREATE TABLE Answers (" & _
                 "Quest_ID int," & _
                 "Ans_ID int," & _
                 "Answer VarChar(150)," & _
                 "Ans_Key Bit);"
        con.Execute(strSQL)
        strSQL = "CREATE TABLE Variants (" & _
                 "ID int," & _
                 "Variant VarChar(150));"
        con.Execute(strSQL)
        con.Close()
        con = Nothing
        catConnection = Nothing


Нужно было не объявлять новый объект ADODB.Connection а присвоить этой переменной catConnection.ActiveConnection, так как при создании ADOX.Catalog автоматически создавалось и ADODB.Connection в качестве активного соединения.

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 06.12.2005 (Вт) 9:37

ПОЗДРАВЛЯЮ! :lol:
Особенно воодушевило на дальнейшие изыскания
в данном направлении:
Loiste писал(а):
Код: Выделить всё
        con = catConnection.ActiveConnection
        catConnection.ActiveConnection = con

Max

Loiste
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 136
Зарегистрирован: 28.09.2005 (Ср) 11:59

Сообщение Loiste » 06.12.2005 (Вт) 9:38

гы%)))


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

    TopList  
cron