Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ХП и вызов ее из приложения / 15 сообщений из 15, страница 1 из 1
25.07.2005, 09:22:52
    #33181925
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
есть хп на sql-servere. там текст начинается так:
CREATE PROCEDURE select_analizZP (
@mes int, @mes1 int, @god int, @god1 int) as
declare @i int, @i1 int, @g int, @g1 int
declare @l table(name_predpr nvarchar(20), ФЗП1 decimal(20, 10), ФЗП2 decimal(20, 10), ФЗП3 decimal(20, 10), ФЗП4 decimal(20, 10),
name_pred varchar(20), a int)
set @i=@mes
set @i1=@mes1
set @g=@god
set @g1=@god1
while @i <= @i1
begin
insert @l

т.е. там создается табличная переменная @l, и с ней дальше происходят действия. в query analizere я ее запускаю так:
exec select_analizzp 1,6,2005,2004. всё идеально работает. но с запуском из приложения начинаются проблемы. делаю так:

Dim rcd As New ADODB.Recordset
Dim cn As New ADODB.Connection

cn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Otiz;Data Source=BTSERVER"
cn.Open
ss = "exec select_analizzp 1, 6, 2005, 2004"
rcd.CursorLocation = adUseClient
rcd.Open ss, cn, adOpenStatic, adLockBatchOptimistic
MsgBox rcd.RecordCount вот тут сразу возникает ошибка:
операция не допускается, если объект закрыт.
Вопрос: как он может быть закрыт, если я его открываю rcd.open...
Помогите пож-та. что я не так делаю.
...
Рейтинг: 0 / 0
25.07.2005, 09:42:27
    #33181953
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
В хп отсутствует селект, поэтому рекордсет закрыт. Видимо нужно сделать Select * from @l
...
Рейтинг: 0 / 0
25.07.2005, 10:22:46
    #33182018
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
нет, конец процедуры такой:

select name_predpr as predpr,
sum(isnull(ФЗП1,0)) as ФЗП1, sum(isnull(ФЗП2,0)) as ФЗП2, sum(isnull(ФЗП3,0)) as ФЗП3,
sum(isnull(ФЗП4,0)) as ФЗП4, sum(isnull(ФЗП5,0)) as ФЗП5, sum(isnull(ФЗП6,0)) as ФЗП6, name_pred, a from @l group by name_predpr, name_pred, a
...
Рейтинг: 0 / 0
25.07.2005, 10:28:05
    #33182029
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
А в query analyzer этот exec возвращает записи?
...
Рейтинг: 0 / 0
25.07.2005, 10:28:51
    #33182032
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
Попробуй кстати ss = ".." без exec
...
Рейтинг: 0 / 0
25.07.2005, 10:30:43
    #33182035
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
в qa exec возвращает 10 записей.
вы написали попробовать без exec. это как?
...
Рейтинг: 0 / 0
25.07.2005, 10:41:21
    #33182057
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
ss = "select_analizzp 1, 6, 2005, 2004"
...
Рейтинг: 0 / 0
25.07.2005, 10:46:06
    #33182075
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
такой же результат. может всё дело в этой табличной переменной. попробуйте набрать этот код в qa. что он вам возвратит?

declare @a table (red int)
insert into @a (red) values (232)
insert into @a (red) values (343)
select * from @a
...
Рейтинг: 0 / 0
25.07.2005, 11:13:44
    #33182143
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
Возващает 232, 343

автор name_pred, a from @l group by name_predpr, name_pred, a
Что такое а? В таблице его нет.
...
Рейтинг: 0 / 0
25.07.2005, 11:21:44
    #33182167
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
нет, в таблице а есть. я просто не до конца запрос написала, он очень длинный.
так вот, правильно возвращает 2 записи: теперь делаем то же самое из кода:

Dim rcd As New ADODB.Recordset
Dim cn As New ADODB.Connection

Private Sub Command1_Click()
cn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Otiz;Data Source=ITSERVER"
cn.Open
ss = "declare @a table (red int) insert into @a (red) values (232) insert into @a (red) values (343) select * from @a"
rcd.CursorLocation = adUseClient
rcd.Open ss, cn, adOpenStatic, adLockReadOnly
MsgBox rcd.RecordCount
End Sub

и начинается ругань на msgbox с recordcountom. протестируйте у себя и скажите результат, удалось ли получить recordcount?
...
Рейтинг: 0 / 0
25.07.2005, 12:03:05
    #33182273
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
Не выходит каменный цветок.
Однако так сработало:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Command3_Click()
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cn.Open "DRIVER={SQL Server};SERVER=(local);DATABASE=Universys"
ss = "tmptest"
rs.CursorLocation = adUseClient
rs.Open ss, cn, adOpenStatic, adLockReadOnly
MsgBox rs.RecordCount
End Sub
Код: plaintext
1.
2.
3.
4.
5.
alter proc tmpTest
as
declare @a table (red int) 
insert into @a (red) values ( 232 ) 
insert into @a (red) values ( 343 ) 
select * from @a
...
Рейтинг: 0 / 0
25.07.2005, 12:25:07
    #33182342
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
а где код ХП? приведите его полностью.
...
Рейтинг: 0 / 0
25.07.2005, 12:42:00
    #33182382
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
Дык вот же он: alter proc tmpTest ....
...
Рейтинг: 0 / 0
25.07.2005, 12:46:43
    #33182392
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
странно, но всё работает. скажите, что это за драйвер такой?

cn.Open "DRIVER={SQL Server};SERVER=(local);DATABASE=Universys"

почему тогда provider oledb не работает?
...
Рейтинг: 0 / 0
25.07.2005, 14:11:27
    #33182657
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ХП и вызов ее из приложения
Обычный установленный в системе драйвер SQL Server, без реверансов в сторону odbc и oledb. Некоторые нюансы поведения рекордсетов и команд зависят от провайдера. Видимо процедура с declare table относится к ним. Еще натыкался на различное поведение при возвращении процедурой нескольких рекордсетов.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ХП и вызов ее из приложения / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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