Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите!! Временные таблицы и ADO / 10 сообщений из 10, страница 1 из 1
13.08.2002, 09:46:55
    #32042738
Артем
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите!! Временные таблицы и ADO
Всем привет.
Кто знает как получить через ADO результат выполнения ХП типа:

Create table #test(...)
insert into#test
insert into#test
select * from #test
drop table #test

ПОМОГИТЕ!!!
...
Рейтинг: 0 / 0
13.08.2002, 10:00:52
    #32042744
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите!! Временные таблицы и ADO
как вариант
1. попробуй поставить вначале SET NOCOUNT ON (не выводит разных сообщений типа ХХХ affected)
2. лучше это все оформить в ХП.
...
Рейтинг: 0 / 0
13.08.2002, 10:17:47
    #32042751
~Bazul~
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите!! Временные таблицы и ADO
Нет никакой необходимости в выражении
drop table #test.
Оставь это на совесть сервера.
BOL: CREATE TABLE (T-SQL)
A local temporary table created in a stored procedure is dropped automatically when the stored procedure completes
. The table can be referenced by any nested stored procedures executed by the stored procedure that created the table. The table cannot be referenced by the process which called the stored procedure that created the table.

All other local temporary tables are dropped automatically at the end of the current session .

Global temporary tables are automatically dropped when the session that created the table ends and all other tasks have stopped referencing them. The association between a task and a table is maintained only for the life of a single Transact-SQL statement. This means that a global temporary table is dropped at the completion of the last Transact-SQL statement that was actively referencing the table when the creating session ended.

Так что смело ставь последним выражением свой селект и получай рекордсет.
...
Рейтинг: 0 / 0
13.08.2002, 10:25:03
    #32042756
Alk
Alk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите!! Временные таблицы и ADO
на стороне клиента это
adodb.command c параметрами

на стороне сервера - процедура с выходным параметром (результат исполнения)
...
Рейтинг: 0 / 0
13.08.2002, 11:06:50
    #32042777
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите!! Временные таблицы и ADO
2All
разумеется моя рекмоендация оформить в ХП не уместна. попробуй все же SET NOCOUNT ON.
это наиболее распространенная ошибка.
...
Рейтинг: 0 / 0
13.08.2002, 11:37:47
    #32042793
Артем
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите!! Временные таблицы и ADO
После попытки в VB получить данные
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Dim dc As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset

    dc.ConnectionString =  "Provider=SQLOLEDB.1 ;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DATA;Data Source=COMPAQ;Use Procedure for Prepare= 1 ;Auto Translate=True;Packet Size= 4096 ;Workstation ID=COMPAQ;Use Encryption for Data=False;Tag with column collation when possible=False"
    dc.Open
        Set cmd.ActiveConnection = dc
        cmd.CommandType = adCmdStoredProc
        cmd.CommandText =  "dbo.spvGetNotPrintedNariads" 
        cmd.Prepared = True
        rs.CursorType = adOpenForwardOnly
        rs.CursorLocation = adUseClient
        
        Set rs = cmd.Execute()
        
        MsgBox rs.RecordCount
    dc.Close



в момент исполнения MSGBOX выскакивает ошибка
данные немогут быть получены тк рекордсет закрыт

Спасибо.
...
Рейтинг: 0 / 0
13.08.2002, 11:43:03
    #32042795
~Bazul~
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите!! Временные таблицы и ADO
какое выражение стоит последним в хранимой процедуре?
...
Рейтинг: 0 / 0
13.08.2002, 11:43:28
    #32042796
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите!! Временные таблицы и ADO
AAron правильно указал причину - отсутствие в начале процедуры SET NOCOUNT ON.
Это приводит к тому, что пораждаемые командами insert into #test результаты работы воспринимаются ADO как дополнительные record set-ы, о чем и говорит ошибка "данные немогут быть получены тк рекордсет закрыт".

PS
Можете конечно поискать в коллекции recordset-ов recordset, который содержит результаты вашего select-а
...
Рейтинг: 0 / 0
13.08.2002, 11:54:42
    #32042805
Артем
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите!! Временные таблицы и ADO
СПАСИБО БОЛЬШОЕ.
...
Рейтинг: 0 / 0
13.08.2002, 12:14:12
    #32042814
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите!! Временные таблицы и ADO
для того чтобы получит результат выполнения процедуры необязательно использовать рекордсет

вот пример кода VB
процедура получает 2 входных параметра различных типов
и возвращает 3


Код: 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.
27.
28.
29.
30.
31.
Public Sub lastsotrinfo(codesotr As Integer, data As Date)

Dim cmd As New ADODB.Command
'@idsotr int, @ondate datetime = '01. 04 . 02 ' , @idfil int output , @iddol int output , @iddep int output

cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText =  "ts2..sotr_status" 
cmd.CommandType = adCmdStoredProc

cmd.Parameters.Append cmd.CreateParameter( "@idsotr" , adInteger, adParamInput)
cmd.Parameters( 0 ) = codesotr

cmd.Parameters.Append cmd.CreateParameter( "@ondate" , adInteger, adParamInput)
cmd.Parameters( 1 ) = SqlData(data)

cmd.Parameters.Append cmd.CreateParameter( "@idfil" , adInteger, adParamInputOutput)
cmd.Parameters( 2 ) =  0 

cmd.Parameters.Append cmd.CreateParameter( "@iddol" , adInteger, adParamInputOutput)
cmd.Parameters( 3 ) =  0 

cmd.Parameters.Append cmd.CreateParameter( "@iddep" , adInteger, adParamInputOutput)
cmd.Parameters( 4 ) =  0 

cmd.Execute

sotrinfofil = cmd.Parameters( 2 )
sotrinfodep = cmd.Parameters( 4 )
sotrinfodol = cmd.Parameters( 3 )

End Sub


ее процедура
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ALTER PROCEDURE dbo.sotr_status
@idsotr int, @ondate int , @idfil int output , @iddol int output , @iddep int output 

AS


set  @idfil = (select ... 
set @iddol = ...
set @iddep = ...

...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите!! Временные таблицы и ADO / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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