2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 34
1

Timeout expired & AdoDB & RecordSet

28.09.2015, 13:11. Показов 1257. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
добрый день! Подскажите пожалуйста - столкнулся с проблемой. Пытаюсь запустить хранимую процедуру из базы на MS Server 2008. На тестовой процедуре с простым созданием таблицы работает. А на процедуре, которая запускает внутри себя несколько других, выпадает в ошибку Timeout expired и ругается на строчку Set rsData = Cmd.Execute. На сервере все работает - время выполнения хранимой процедуры порядка 4ех часов. И как можно вывести время выполнения на форму? Заранее спасибо!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Dim Cmd As New ADODB.Command
Dim rsData As New ADODB.Recordset
     Set Conn = Nothing
     Set Conn = New ADODB.Connection
     Conn.ConnectionTimeout = 0
     Conn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Server=...; Database=...;Workstation ID
= ...;Trusted_Connection=False"
     If Conn.State = 1 Then
         MsgBox "Соединение установлено"
     Else
         MsgBox "Соединение не установлено"
     End If
 
Cmd.ActiveConnection = Conn
Cmd.CommandType = adCmdStoredProc
Cmd.CommandText = "STest_new"
Cmd.Parameters.Refresh
Cmd.Parameters(1) = Combo1.Text
Cmd.Parameters(2) = Combo1.Text + 1
Text1.Text = Combo1.Text + 1
Cmd.Parameters(3) = Combo1.Text + 2
Text2.Text = Combo1.Text + 2
Set rsData = Cmd.Execute
Set rsData = Nothing
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2015, 13:11
Ответы с готовыми решениями:

AdoDB & RecordSet & TimeOut
люди... есть такой вот код... Public Function GetPR(ByVal PRName As String, ByVal Params As...

Запрос не хочет работать (sSql = 'SELECT * FROM PhoneBase WHERE Phone LIKE '' & txtPhone sSql = sSql & '%' AND Name LIKE '' & txtName & '%' AND Stre)
Всем привет! У меня следующая проблема. Я написал телефонный справочник и хочу, чтобы искать в...

Recommended style: Private rstOrder As ADODB.Recordset Set rstOrder = New ADODB.REcordset
Ошибка такая Object variable or With block variable not set. Код такой: Private rstOrder As...

TypeCursor & LockType В ADODB-Command.Execute()???
Как поменять CursorType & LockType у Рекордсета полученного от Set rs=command.execute() Спасибо.

10
285 / 213 / 42
Регистрация: 04.02.2015
Сообщений: 1,343
28.09.2015, 15:35 2
Хранимка выполняется 4 часа??? Если да тогда ставьте таймаут больше при соединении. Права даны на выполнения процедуры? Почему TrustedConnection False?
1
2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 34
28.09.2015, 16:49  [ТС] 3
Попробовал задать значение таймаута на 7200 (к примеру, делал и больше 720000) - всё равно возникает эта же ошибка. Права все выделены. По поводу TrustedConnection - пробовал варианты с доступом. Сейчас задал Yes,соответственно, указал User Id и Password. Хранимая процедура, которая выполнялась без проблем, находится в той же базе.
0
285 / 213 / 42
Регистрация: 04.02.2015
Сообщений: 1,343
28.09.2015, 17:58 4
То есть из самого sql server хранимка выполняется без задержек, а из vb не работает?

Добавлено через 8 минут
У Вас хранимка собирает данные из базы вы получаете набор записей?
1
2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 34
29.09.2015, 08:18  [ТС] 5
Хранимка выполняется без задержек на сервере. В процессе работы собираются данные из нескольких баз в мою. Т.е. та хранимая процедура, которую я хочу запустить сама запускает несколько десятков хранимок. Они и используют данные других баз в процессе выполнения. Попробовал запустить одну из них напрямую из VB - выдалась эта же ошибка. (Хранимка должна выполнить запрос отбора записей из 12 баз. На сервере прошло все минуты за 2 и без ошибок)
0
285 / 213 / 42
Регистрация: 04.02.2015
Сообщений: 1,343
29.09.2015, 08:43 6
Ejinator, Я более чем уверен хотя есть сомнения ошибка у Вас в том, что вы не указали тип соединения, а именно:

Определяет расположение курсора, т.е. место, где выполняется работа с данными. Возможные значения:

adUseNone(1) - курсор не используется (только для совместимости со старыми версиями).
adUseServer(2) - курсор на стороне провайдера (по умолчанию).
adUseClient(3) - курсор на стороне пользователя. Может предоставлять дополнительные возможности, которые отсутствуют на стороне провайдера.

Это параметры для вашего "Conn".

Тут более детально. И еще мне кажется, что вы неправильно указали параметры соединения для работы с хранимыми процедурами, так же советую пробежаться по этой статье. Там в самом низу работа с хранимыми процедурами.
1
2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 34
29.09.2015, 08:47  [ТС] 7
Благодарю, сейчас посмотрю!
0
285 / 213 / 42
Регистрация: 04.02.2015
Сообщений: 1,343
29.09.2015, 08:51 8
Лучший ответ Сообщение было отмечено Ejinator как решение

Решение

Хранимая процедура может принимать один или несколько аргументов. Хранимая процедура также может возвращать один или несколько аргументов, может возвращать код возврата процедуры и может возвращать один или несколько наборов данных. Если процедура возвращает и параметры, и набор(ы) данных, то вызывать ее надо следующим способом:

Хранимая процедура с параметрами, возвращающая набор данных

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
cmd.ActiveConnection = Connection
cmd.CommandType = adCmdStoredProc 
cmd.CommandText = "mysp1" 
cmd.Parameters.Append cmd.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue)
cmd.Parameters.Append cmd.CreateParameter("@Arg1", adSmallInt, adParamInput, , 1234)
cmd.Parameters.Append cmd.CreateParameter("@Arg2", adBSTR, adParamInput, , "test string")
cmd.Parameters.Append cmd.CreateParameter("@Arg3", adDate, adParamInput, , Now())
cmd.Parameters.Append cmd.CreateParameter("@Result1", adBSTR, adParamOutput)
cmd.Parameters.Append cmd.CreateParameter("@Result2", adBoolean, adParamOutput)
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockReadOnly
rs.Open cmd
If cmd.Parameters("RETURN_VALUE").Value < 0 Then
  MsgBox "Процедура вернула ошибку" & vbNewLine & _
         "Параметр Result1 равен: " & cmd.Parameters("@Result1").Value & vbNewLine & _
         "Параметр Result2 равен: " & cmd.Parameters("@Result2").Value
Else
  MsgBox "Процедура отработала успешно. Получено строк: " rs.RecordCount & vbNewLine & _
         "Параметр Result1 равен: " & cmd.Parameters("@Result1").Value & vbNewLine & _
         "Параметр Result2 равен: " & cmd.Parameters("@Result2").Value
  Do Until rs.EOF
    Debug.Print "  - строка " & rs.AbsolutePosition & "; " & rs.Fields(0).Value
    rs.MoveNext
  Loop
End If
1
2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 34
29.09.2015, 10:51  [ТС] 9
Помогло,благодарю!!!! Пришлось добавить еще
Visual Basic
1
cmd.CommandTimeout = 20000
0
285 / 213 / 42
Регистрация: 04.02.2015
Сообщений: 1,343
29.09.2015, 11:25 10
Ejinator, 20000 это 20 секунд, 60000 это 1 минута по времени таймера visual basic если я не ошибаюсь.
1
2 / 2 / 1
Регистрация: 27.07.2015
Сообщений: 34
29.09.2015, 12:17  [ТС] 11
UBUNTU, точно ведь - в мс же измерение времени идет! Благодарю!
0
29.09.2015, 12:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.09.2015, 12:17
Помогаю со студенческими работами здесь

Проблема с запросом: TRec.Open 'SELECT * FROM таблица Where ((таблица.дата) Like ' & Date & ' & '%') ', DBgen
Люди, подскажите что сиё такое и можно ли как то с этим бороться. Создаю следующий запрос: ...

Run-time error 430 ADODB & MySQL-select
ПОМОГИТЕ, ПЛИС!!!! Не пошла большая программа, начали тестировать просто соединение с БД. ...

Set rs = db.OpenRecordset('SELECT * FROM ' & strNom1 & ' ORDER BY Nomer')
В визуал бэйсике рекордсет открывается так: Set rs = db.OpenRecordset('SELECT * FROM Nom1 ORDER BY...

Конвертирование цвета из &H80000009& в Long
Как конвертировать идентификатор цвета из такого вида: &amp;H80000009&amp; в формат Long? Заранее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru