|
|
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
есть хп на 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... Помогите пож-та. что я не так делаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 09:22:52 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
В хп отсутствует селект, поэтому рекордсет закрыт. Видимо нужно сделать Select * from @l ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 09:42:27 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
нет, конец процедуры такой: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 10:22:46 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
А в query analyzer этот exec возвращает записи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 10:28:05 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
Попробуй кстати ss = ".." без exec ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 10:28:51 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
в qa exec возвращает 10 записей. вы написали попробовать без exec. это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 10:30:43 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
ss = "select_analizzp 1, 6, 2005, 2004" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 10:41:21 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
такой же результат. может всё дело в этой табличной переменной. попробуйте набрать этот код в qa. что он вам возвратит? declare @a table (red int) insert into @a (red) values (232) insert into @a (red) values (343) select * from @a ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 10:46:06 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
Возващает 232, 343 автор name_pred, a from @l group by name_predpr, name_pred, a Что такое а? В таблице его нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 11:13:44 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
нет, в таблице а есть. я просто не до конца запрос написала, он очень длинный. так вот, правильно возвращает 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? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 11:21:44 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
Не выходит каменный цветок. Однако так сработало: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 12:03:05 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
а где код ХП? приведите его полностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 12:25:07 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
Дык вот же он: alter proc tmpTest .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 12:42:00 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
странно, но всё работает. скажите, что это за драйвер такой? cn.Open "DRIVER={SQL Server};SERVER=(local);DATABASE=Universys" почему тогда provider oledb не работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 12:46:43 |
|
||
|
ХП и вызов ее из приложения
|
|||
|---|---|---|---|
|
#18+
Обычный установленный в системе драйвер SQL Server, без реверансов в сторону odbc и oledb. Некоторые нюансы поведения рекордсетов и команд зависят от провайдера. Видимо процедура с declare table относится к ним. Еще натыкался на различное поведение при возвращении процедурой нескольких рекордсетов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2005, 14:11:27 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=33182057&tid=2167450]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
84ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 247ms |
| total: | 455ms |

| 0 / 0 |
