Асинхронный коннект

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
tofik
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 102
Зарегистрирован: 30.04.2004 (Пт) 13:18

Асинхронный коннект

Сообщение tofik » 05.05.2004 (Ср) 13:21

Народ!
Я снова прошу помощи!
Суть проблеммы:
Допустим я асинхронно коннекчусь к серверу с БД, через ADO!
На форме у меня есть две кнопочки "Connect", "Disconnect".
Первой я непосредственно подключаюсь к прописанному в connection_string серверу, а второй соответственно отключаюсь!
А теперь представим, что в connection_string я некорректно прописал имя сервера и теперь я должен ждать пока не будет ConnectionTimeout!
Что мне сделать, чтобы я смог прерывать AsyncConnect, нажатием кнопки!

Поможите братья!!!

Jenizix
Географ
Географ
Аватара пользователя
 
Сообщения: 545
Зарегистрирован: 20.04.2004 (Вт) 20:52
Откуда: Москва

Сообщение Jenizix » 05.05.2004 (Ср) 18:57

А в имя сервера ты пишешь его ip или имя буквами? :?:

aaf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 190
Зарегистрирован: 08.02.2002 (Пт) 13:48
Откуда: Russia

Сообщение aaf » 06.05.2004 (Чт) 8:16

попрбовать close ему сделать.
или nothing а потом close
Вечный LAmer

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.05.2004 (Чт) 8:56

У Connection есть метод .Cancel
Lasciate ogni speranza, voi ch'entrate.

tofik
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 102
Зарегистрирован: 30.04.2004 (Пт) 13:18

Сообщение tofik » 06.05.2004 (Чт) 14:01

В конекшан стринге пишу имя сервера!
Если это имя введено не корректно, он ищет его и слетает только при коннекшан таймауте, close не работает и не должен работать, т.к. не произошло соединения!
с Nothing щас попробую
а вот кенсел нифига не закрывает!
Спасибо большое!

tofik
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 102
Зарегистрирован: 30.04.2004 (Пт) 13:18

Сообщение tofik » 06.05.2004 (Чт) 16:16

Кому интересно, то я разобрался!
Если хочешь остановить асинхронный коннект, не дожидаясь пока он слетит по таймауту, надо просто создать его заново, типа
Set Conn = New ADODB.Connection
и всё!!!!

Всем спасибо!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 06.05.2004 (Чт) 16:25

Не обязательно.
Достаточно было сделать
Код: Выделить всё
Conn.Cancel
Set Conn = Nothing
Lasciate ogni speranza, voi ch'entrate.

retiv
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 15.09.2002 (Вс) 12:20
Откуда: Russia

Сообщение retiv » 10.05.2004 (Пн) 19:53

Код: Выделить всё
Conn.Cancel
Set Conn = Nothing

не работает!
На строке Conn.Cancel программа висит до окончания таймаута и только после него переходит на Set Conn = Nothing.

Вот код, который устанавливает соединение:

Код: Выделить всё
   Set Conn = New ADODB.Connection
   Conn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=db;Data Source=server"
   Conn.ConnectionTimeout = 100
   Conn.CommandTimeout = 100
   Conn.Open , , , adAsyncConnect 


Что не так?

tofik
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 102
Зарегистрирован: 30.04.2004 (Пт) 13:18

Сообщение tofik » 13.05.2004 (Чт) 13:17

У меня есть:

Public WithEvents Conn As ADODB.Connection

Я пытаюсь установить соединение по:

Set Conn = New ADODB.Connection
Conn.ConnectionString = Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=DataBase;Data Source=server
Conn.ConnectionTimeout = 10
Conn.CommandTimeout = 10
Conn.Open Conn_String, , , adAsyncConnect


Допустим сервера с именем "server" нет! Чтобы не дожидаться

Conn.ConnectionTimeout = 10

я жму на кнопочку с кодом
If Conn.State = adStateOpen Then
Conn.Close
Else
Conn.Cancel
Set Conn = Nothing
End If

на
Conn.Cancel
программа останавливается, дожидается
Conn.ConnectionTimeout = 10
и переходит на процедуру

Private Sub Conn_ConnectComplete(ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pConnection As ADODB.Connection)
If pConnection.State = adStateOpen Then
.......
End If
End Sub

и при сравнении pConnection.State = adStateOpen вываливает ошибку:
[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied

т.к. в pConnection.State , как собственно и в Conn.State(см. выше) передается эта строка с ошибкой вместо состояния соединения!

Если в отладчике перед тем как произойдет conn.cencel посмотреть чему равен conn.state, изначально он будет как раз той строчкой, после чего примет нормальное числовое значение!
Почему так, и как сделать Нормально!!!!!
Помогите!


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

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

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 22

    TopList