powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в VB передать из ХП MSSQLServer курсор?
8 сообщений из 8, страница 1 из 1
Как в VB передать из ХП MSSQLServer курсор?
    #33165648
gav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые знатоки, подскажите пожалуйста,

Имеется хранимая процедура на VSSQLServer, имеющая выходным параметром курсор

Как этот курсор передать в Recordset?
Проблема в том, что в перечне типов параметров Command нет ничего похожего на курсор.

Пробовал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Dim Cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

    Set Cn = ConnectToServer(UserName, UserPassw, "db1", ServerName)
                         
Dim cmd As New ADODB.Command
    Set cmd.ActiveConnection = Cn
    cmd.CommandType = adCmdText
    cmd.CommandText = "EXEC db1.dbo.usp_all_ds_po_osn_dog1 " & id_dog1

    Set rs = cmd.Execute

    rs.Open

    If rs.BOF And rs.EOF Then
        Exit Function
    End If


Также пробовал:
Код: plaintext
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.
Dim Cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

    Set Cn = ConnectToServer(UserName, UserPassw, "db1", ServerName)
                         
Dim cmd As New ADODB.Command
    Set cmd.ActiveConnection = Cn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "usp_all_ds_po_osn_dog1"

Dim prm1 As New ADODB.Parameter     
    prm1.Type = adInteger
    prm1.Direction = adParamInput
    prm1.Size =  4 
    prm1.Value = id_dog1
    cmd.Parameters.Append prm1
    
    Set rs = cmd.Execute
    
    rs.Open
    
    If rs.BOF And rs.EOF Then
        DefArrayDSOfDog1 = False
        Exit Function
    End If



Сообщение на IF строке: Операция не допускается если объект закрыт.

А хочется получить данные из уже готовой ХП!

Спасибо всем кто ответит.
...
Рейтинг: 0 / 0
Как в VB передать из ХП MSSQLServer курсор?
    #33165883
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<...ну кто так строит?..>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim cmd As New ADODB.Command
    With cmd
        .CommandType = adCmdStoredProc
        Set .ActiveConnection = cn
        .CommandText = scmd
        .Parameters.Refresh
        .Parameters("id_dog1").Value = id_dog1
    End With
    Set rs = New ADODB.Recordset
    rs.Open cmd, , adOpenStatic, adLockBatchOptimistic

...
Рейтинг: 0 / 0
Как в VB передать из ХП MSSQLServer курсор?
    #33165887
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.CommandText = "usp_all_ds_po_osn_dog1"
...
Рейтинг: 0 / 0
Как в VB передать из ХП MSSQLServer курсор?
    #33166103
gav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy
.Parameters("id_dog1").Value = id_dog1


Пишет: не найдено объектов соотв. требуемому имени или порядковому номеру

Сделал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Dim cmd As New ADODB.Command
With cmd
    .CommandType = adCmdStoredProc
    Set .ActiveConnection = Cn
    .CommandText = "usp_all_ds_po_osn_dog1"
    .Parameters.Refresh
End With

Dim prm1 As New ADODB.Parameter
With prm1
    .Type = adInteger
    .Direction = adParamInput
    '.Size = 4
    .Value = id_dog1
End With

    cmd.Parameters.Append prm1

    Set rs = New ADODB.Recordset
    rs.Open cmd, , adOpenStatic, adLockBatchOptimistic


Кстати, а зачем cmd.Refresh?

Результат:
Сообщение: "Procedure or Function 'usp_all_ds_po_osn_dog1' has too many arguments specified"

Короче требует много аргументов, хотя в теле ХП аргумент1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE PROCEDURE [dbo].[usp_all_ds_po_osn_dog1] 

@id_dog1 INT

AS

DECLARE @nomer CHAR( 20 ), @data DATETIME

SELECT @nomer=nomer, @data=data
FROM dog1
WHERE id_dog1=@id_dog1

RETURN 	SELECT *
	FROM view_isp_dog1
	WHERE nomer=@nomer AND data=@data
GO

Че за ерунда?
...
Рейтинг: 0 / 0
Как в VB передать из ХП MSSQLServer курсор?
    #33166196
gav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, аважаемый Антонарий, не помогли мне Ваши советы.
...
Рейтинг: 0 / 0
Как в VB передать из ХП MSSQLServer курсор?
    #33166234
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE PROCEDURE [dbo].[usp_all_ds_po_osn_dog1] 

@id_dog1 INT

AS

SET NOCOUNT ON
DECLARE @nomer CHAR( 20 ), @data DATETIME

SELECT @nomer=nomer, @data=data
FROM dog1
WHERE id_dog1=@id_dog1

SET NOCOUNT OFF

SELECT * FROM view_isp_dog1 WHERE nomer=@nomer AND data=@data
GO


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Function GetUSP(Byval id_dog1 as Long) As ADODB.Recordset
Dim cmd As ADODB.Command, p As ADODB.Parameters
Dim rs as ADODB.Recordset

    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    Set cmd = New ADODB.Command
    Set cmd.ActiveConnection = cn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "usp_all_ds_po_osn_dog1"
    Set p = cmd.Parameters
    p.Append cmd.CreateParameter("@id_dog1", adInteger, adParamInput, , id_dog1)
    rs.Open cmd, ,adOpenStatic, adLockReadOnly
    Set rs.ActiveConnection = Nothing
    Set GetUSP = rs
    Set p = Nothing
    Set cmd = Nothing

End Function

Код: plaintext
Set rs=GetUSP(id_dog1)
...
Рейтинг: 0 / 0
Как в VB передать из ХП MSSQLServer курсор?
    #33166496
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gavИмеется хранимая процедура на VSSQLServer, имеющая выходным параметром курсор
gavRETURN SELECT *
FROM view_isp_dog1
WHERE nomer=@nomer AND data=@data
Какой нафик курсор? Возвращается обычный рекордсет. Марш учить терминологию.

Код: plaintext
1.
rs.Open "db1.dbo.usp_all_ds_po_osn_dog1 " & id_dog1, cn, adOpenStatic, adLockBatchOptimistic
без всяких команд.
...
Рейтинг: 0 / 0
Как в VB передать из ХП MSSQLServer курсор?
    #33166816
gav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо еще раз ребята за поддержку,

Фигня оказалась не там где думал-в ХП

Почему-то ХП в таком виде не открывала рекордсет (прости, Антонарий за курсор:) - бес попутал)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE PROCEDURE [dbo].[ddd] 

@id_dog1 INT

AS

DECLARE @nomer CHAR( 20 )
DECLARE @data DATETIME

SELECT @nomer=nomer, @data=data
FROM view_dog1_readonly
WHERE id_dog1=@id_dog1

RETURN SELECT *
FROM view_dog1_readonly
WHERE nomer=@nomer AND data=@data
GO

Убрал инстр. RETURN перед последним селектом и все заработало, думаю-чем мешал RETURN? Надо почитать справку

Так работает:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CREATE PROCEDURE [dbo].[ddd] 

@id_dog1 INT

AS

DECLARE @nomer CHAR( 20 )
DECLARE @data DATETIME

SELECT @nomer=nomer, @data=data
FROM view_dog1_readonly
WHERE id_dog1=@id_dog1

SELECT *
FROM view_dog1_readonly
WHERE nomer=@nomer AND data=@data
GO
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в VB передать из ХП MSSQLServer курсор?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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