powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / проблема с Recordset-ом
8 сообщений из 8, страница 1 из 1
проблема с Recordset-ом
    #34354007
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет !!!
Помогите пожалуйста разобратся.
При работе функции которая вызывает хранимую процедуру в SQL Server 2000 возникает ошибка.
Вот моя функция на VB
авторPublic Function Pogr_abs(dd1 As Variant, mm1 As Variant, yy1 As Variant, _
dd2 As Variant, mm2 As Variant, yy2 As Variant, _
sODBC As Variant) As Variant
On Error GoTo Err_Debug
Dim p As ADODB.Parameter, p1 As ADODB.Parameter
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim cmd As ADODB.Command

Set cn = New ADODB.Connection
cn.CursorLocation = adUseClient
cn.Open CStr(sODBC)

Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient

Set cmd = New ADODB.Command
With cmd
Set .ActiveConnection = cn
.CommandTimeout = 0
.CommandType = adCmdStoredProc
.CommandText = "ItogPogrAbs"
Set p = .CreateParameter("dateMin", adVarChar, adParamInput, 8, mm1 & "/" & dd1 & "/" & yy1)
Set p1 = .CreateParameter("dateMax", adVarChar, adParamInput, 8, mm2 & "/" & dd2 & "/" & yy2)
.Parameters.Append p
.Parameters.Append p1
End With
rs.Open cmd, , adOpenStatic, adLockReadOnly
Pogr_abs = rs.GetRows()
lb_out:
Set p = Nothing
Set cmd = Nothing
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
Exit Function
Err_Debug:
Resume lb_out
End Function


в строке
авторPogr_abs = rs.GetRows()

выдает вот такую ошибку
авторRun-time error '3704'
Операция не допускается, если объект закрыт

Понимаю что для вас профессионалов вопрос может быть совсем дурацкий, но по возможности подскажите. Я уже все перепробывал.
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34354019
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в ХП опция SET NOCOUNT стоит?
I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34354047
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня Windows 2003 Server.
Где можно посмотреть SET NOCOUNT и как ?
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34354058
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SET NOCOUNT ON
должен быть в коде хранимки
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34354081
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот текст хронимой процедуры
авторCREATE PROCEDURE dbo.ItogPogrAbs
@dateMin varchar (8),
@dateMax varchar (8)
AS
Declare @Query nvarchar (1000), @imm int,
@mdateMin datetime, @mdateMax datetime,
@dd_min nvarchar (2), @mm_min nvarchar (2), @yy_min nvarchar (2),
@dd_max nvarchar (2), @mm_max nvarchar (2), @yy_max nvarchar (2)

Set @mdateMin=convert(datetime, @dateMin)
Set @mdateMax=convert(datetime, @dateMax)
Set @imm = DATEDIFF(mm, @mdateMin, @mdateMax)

if Day(@mdateMin)<10
Set @dd_min = '0' + (CONVERT(nvarchar (2), Day(@mdateMin)))
else
begin
Set @dd_min = (CONVERT(nvarchar (2), Day(@mdateMin)))
end
if Month(@mdateMin)<10
Set @mm_min= '0' + (CONVERT(nvarchar (2), Month(@mdateMin)))
else
begin
Set @mm_min= (CONVERT(nvarchar (2), Month(@mdateMin)))
end
Set @yy_min=Right(CONVERT(nvarchar (4), Year(@mdateMin)),2)

if Day(@mdateMax)<10
Set @dd_max = '0' + (CONVERT(nvarchar (2), Day(@mdateMax)))
else
begin
Set @dd_max = (CONVERT(nvarchar (2), Day(@mdateMax)))
end
if Month(@mdateMax)<10
Set @mm_max= '0' + (CONVERT(nvarchar (2), Month(@mdateMax)))
else
begin
Set @mm_max= (CONVERT(nvarchar (2), Month(@mdateMax)))
end
Set @yy_max=Right(CONVERT(nvarchar (4), Year(@mdateMax)),2)

CREATE TABLE #Pogr_abs (kotd varchar (10), tp varchar (10), rodv varchar (10), park varchar (10), prin varchar (20), KolVag int)

if @imm=0
begin
Set @Query='INSERT INTO #Pogr_abs (kotd, tp, rodv, park, prin, KolVag)
SELECT kotd, tp, rodv, park, prin, KolVag
FROM AIV_Pogruzka' + @mm_min + @yy_min +
' WHERE date_op between ' + @dd_min + @mm_min + @yy_min + ' and ' + @dd_max + @mm_max + @yy_max
exec (@Query)
goto finish
end
if @imm=1
begin
Set @Query='INSERT INTO #Pogr_abs (kotd, tp, rodv, park, prin, KolVag)
SELECT kotd, tp, rodv, park, prin, KolVag
FROM AIV_Pogruzka' + @mm_min + @yy_min +
' WHERE date_op >= ' + @dd_min + @mm_min + @yy_min +
' UNION ALL
SELECT kotd, tp, rodv, park, prin, KolVag
FROM AIV_Pogruzka' + @mm_max + @yy_max +
' WHERE date_op <= ' + @dd_max + @mm_max + @yy_max
exec (@Query)
goto finish
end
if @imm>1
begin
Set @Query='INSERT INTO #Pogr_abs (kotd, tp, rodv, park, prin, KolVag)
SELECT kotd, tp, rodv, park, prin, KolVag
FROM AIV_Pogruzka' + @mm_min + @yy_min +
' WHERE date_op >= ' + @dd_min + @mm_min + @yy_min
declare @i int, @mm_Prom nvarchar (2), @yy_Prom nvarchar (2)
while @i=@imm -1
begin
Set @i=@i+1
if MONTH(DATEADD(mm, @i, @mdateMin))<10
Set @mm_Prom='0' + CONVERT(nvarchar (2), MONTH(DATEADD(mm, @i, @mdateMin)))
else
begin
Set @mm_Prom=CONVERT(nvarchar (2), MONTH(DATEADD(mm, @i, @mdateMin)))
end
Set @yy_Prom=Right(CONVERT(nvarchar (4), YEAR(DATEADD(mm, @i, @mdateMin))),2)
Set @Query =@Query + ' UNION ALL
SELECT kotd, tp, rodv, park, prin, KolVag
FROM AIV_Pogruzka' + @mm_Prom + @yy_Prom
end
Set @Query =@Query + ' UNION ALL
SELECT kotd, tp, rodv, park, prin, KolVag
FROM AIV_Pogruzka' + @mm_max + @yy_max +
' WHERE date_op <= ' + @dd_max + @mm_max + @yy_max
exec (@Query)
end
finish:
SELECT kotd, tp, rodv, park, prin, Sum(KolVag) as KolVag
FROM #Pogr_abs
GROUP BY kotd, tp, rodv, park, prin
GO


Где должна быть SET NOCOUNT ON
И подскжите для чего она нужна. Если есть у вас ссылка по этой теме на русском языке в инете то буду очень благодарен.
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34354372
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кусок примера из МСДН

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Set adoRs = New adoDb.Recordset
With adoRs
    Set .ActiveConnection = adoCn
    .LockType = adLockOptimistic
    .CursorLocation = adUseServer
    .CursorType = adOpenForwardOnly
    .Open "SET NOCOUNT ON" 
End With
adoRs.Open adoCm, , , , adCmdStoredProc

Как видишь adoRs сначало открывает "SET NOCOUNT ON"
потом отркрывает саму комманду
Попробуй может получиться

Код: plaintext
1.
2.
rs.Open "SET NOCOUNT ON" 
rs.Open cmd, , adOpenStatic, adLockReadOnly
Pogr_abs = rs.GetRows()
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34354592
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TIKO Нет не получается.
...
Рейтинг: 0 / 0
проблема с Recordset-ом
    #34354682
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все разобрался надо было в начале хранимой процедуры поставить SET NOCOUNT ON и сразу все заработало. Вопрос снимается. Всем большое спасибо.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / проблема с Recordset-ом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]