Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в VB передать из ХП MSSQLServer курсор? / 8 сообщений из 8, страница 1 из 1
14.07.2005, 12:48:25
    #33165648
gav
gav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB передать из ХП MSSQLServer курсор?
Уважаемые знатоки, подскажите пожалуйста,

Имеется хранимая процедура на 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
14.07.2005, 13:38:55
    #33165883
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB передать из ХП MSSQLServer курсор?
<...ну кто так строит?..>

Код: 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
14.07.2005, 13:40:02
    #33165887
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB передать из ХП MSSQLServer курсор?
.CommandText = "usp_all_ds_po_osn_dog1"
...
Рейтинг: 0 / 0
14.07.2005, 14:40:18
    #33166103
gav
gav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB передать из ХП MSSQLServer курсор?
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
14.07.2005, 15:03:54
    #33166196
gav
gav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB передать из ХП MSSQLServer курсор?
Короче, аважаемый Антонарий, не помогли мне Ваши советы.
...
Рейтинг: 0 / 0
14.07.2005, 15:13:11
    #33166234
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB передать из ХП MSSQLServer курсор?
Код: 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
14.07.2005, 16:18:42
    #33166496
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB передать из ХП MSSQLServer курсор?
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
14.07.2005, 17:38:32
    #33166816
gav
gav
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в VB передать из ХП MSSQLServer курсор?
Спасибо еще раз ребята за поддержку,

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

Почему-то ХП в таком виде не открывала рекордсет (прости, Антонарий за курсор:) - бес попутал)
Код: 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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как в VB передать из ХП MSSQLServer курсор? / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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