Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / MSSql server и процедуры через адо / 24 сообщений из 24, страница 1 из 1
25.03.2004, 16:38
    #32457299
johnnybo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Привет всем.
Короче вызывваю я процедуру на SQL сервере все происходит нормально но почемуто рекордсет сам по себе закрывается.
Когда-то я уже подымал эту тему на форуме, тогда все решилось подстановкой
set nocount on в процедеру. Сейчас же это не срабатывает, причем особо нового в процедуре на появилось, ну транзакция и пару апдейтов.
да через одбс все работает. Сейчас смотрю справку по скл серверу и на мсдн, но никак не могу ничего найти.
Бросте кто-то информацию где можно поподробней об этом почитать или как это можно обойти
...
Рейтинг: 0 / 0
25.03.2004, 16:49
    #32457324
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Ты уверен что процедура возвращает результаты?
Коды в студию!
Вызова и собственно процедуры.

Magnus
...
Рейтинг: 0 / 0
25.03.2004, 17:17
    #32457392
johnnybo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
вызываю вот так
record.Open "exec recalc '"+docnum+"','"+workcode+"','"+link+"'"

а вот и процедура


CREATE PROCEDURE recalc
@docnum varchar(32),
@workcode int,
@link int
AS

SET NOCOUNT ON

declare @nError int
declare @bTrans int
declare @ready int
declare @markcode_ref int
declare @markcode_order int
declare @modelcode_order int
declare @markdefault int
declare @fixed char(1)
declare @workname varchar(100)
declare @mechname varchar(64)
declare @moneyinwork int
declare @worktariff decimal(10,2)
declare @workprice decimal(10,2)
declare @rise_work decimal(10,2)
set @bTrans = 0
set @nError = 0
set @worktariff= 0.0


select @workprice=AW,@fixed=FIXED,@ready=READY,@markcode_order=MARK_CODE,@modelcode_order=MODEL_CODE,@rise_work=work_percent from ORDERS Where ORDER_NUM=@docnum
if @fixed='1' OR @ready=1 OR @docnum = '' OR @docnum IS NULL
begin
set @nError = 13002 goto lEnd
end

select @workname=W_NAME from AWORK where W_CODE=@workcode
if @@ROWCOUNT=0
begin
set @nError = 13061 goto lEnd
end

if NOT EXISTS (select WORK_CODE from ORDERAV where ORDER_NUM=@docnum and WORK_CODE=@workcode)
begin
set @nError = 13064 goto lEnd
end

select @markcode_ref=MARK_CODE from AMODEL Where M_CODE=(select M_CODE from AWORK where W_CODE=@workcode)
if @@ROWCOUNT <=0
begin
set @nError = 13062 goto lEnd
end
select @markdefault=MARK_DEFAULT,@moneyinwork=MONEY_IN_WORK from AMARK Where MARK_CODE=@markcode_ref

BEGIN TRAN tran_calcwork
set @bTrans = 1

if @moneyinwork<>0
begin
Select @worktariff=WORK_TARIFF From AWORK Where W_CODE=@workcode
if @@ERROR<>0
begin
set @nError = @@ERROR goto lEnd
end
end
else
begin
Select @worktariff=SUM(O_TARIFF) From ORDERAVOPER
Where ORDER_NUM=@docnum and ORDER_LINK=@link
if @@ERROR<>0
begin
set @nError = @@ERROR goto lEnd
end
end
Update ORDERAV Set
WORK_TARIFF=@worktariff,PRICE_AV=WORK_TARIFF*@workprice
Where ORDER_NUM=@docnum and ORDER_LINK=@link
if @@ERROR<>0
begin
set @nError = @@ERROR goto lEnd
end
set @worktariff = 0.0
Select @worktariff=SUM(WORK_TARIFF) From ORDERAV Where ORDER_NUM=@docnum
Update ORDERS Set SUMMA_AW=@worktariff,
SUMMA=@worktariff*@workprice*(100-@rise_work)*0.01 Where ORDER_NUM=@docnum
if @@ERROR<>0
begin
set @nError = @@ERROR goto lEnd
end
if @@ERROR<>0
begin
set @nError = @@ERROR goto lEnd
end
lEnd:
if @nError <> 0
begin
if @bTRans = 1
ROLLBACK TRAN tran_calcwork
end
else
begin
if @bTRans = 1
begin
COMMIT TRAN tran_calcwork
end
end
select @nError
--return @nError
GO
...
Рейтинг: 0 / 0
25.03.2004, 17:35
    #32457436
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Не совсем разобрался в структуре(ты бы его отформатировал), но ИМХО, последним селектом у тебя идет возврат ошибки, естессно только он и будет всегда.

Magnus
...
Рейтинг: 0 / 0
25.03.2004, 17:46
    #32457464
johnnybo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Не совсем тебя понял, что ты имееш ввиду под

естессно только он и будет всегда [/FIXED
...
Рейтинг: 0 / 0
25.03.2004, 18:38
    #32457567
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Вместо результатов ты получаешь значение переменной которая должна содержать ошибку и если ее нет то пустой набор и как следствие закрытый рекордсет.
ИМХО.

Magnus
...
Рейтинг: 0 / 0
25.03.2004, 18:53
    #32457592
johnnybo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
я делал в конце проуедури специально какуюто выборку с любой таблици, результат тотже,
кроме того в начале процедуры идет присвоение переменной значения set @nError = 0, тоесть рекордсет не пуст
...
Рейтинг: 0 / 0
25.03.2004, 19:12
    #32457620
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Да, не заметил сначала. Лучше, в следующий раз вставляй внутри тега SRC тогда гораздо лучше видно и операторы подсвечены.

Попробуем разобраться.
Какие парамерты открытия рекодсета?

Magnus
...
Рейтинг: 0 / 0
25.03.2004, 19:16
    #32457627
johnnybo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
ты имеешь ввиду тип курсора, блокировки, где курсор?
...
Рейтинг: 0 / 0
25.03.2004, 19:33
    #32457647
johnnybo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
все по умолчанию
record.Open "exec procname"
...
Рейтинг: 0 / 0
25.03.2004, 20:04
    #32457672
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Попробуй
record.CursorLocation=adUseClient

Magnus
...
Рейтинг: 0 / 0
25.03.2004, 20:36
    #32457691
johnnybo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Неа, то же самое,
...
Рейтинг: 0 / 0
25.03.2004, 21:16
    #32457710
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Просто запусти из QA. Возвращает ли она данные.

Вот это
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
if @@ERROR<> 0  
begin 
set @nError = @@ERROR goto lEnd 
end 
if @@ERROR<> 0  
begin 
set @nError = @@ERROR goto lEnd 
end 


Зачем 2 раза?
После любой операции @@ERROR сбрасывается.


Код: plaintext
1.
2.
3.
if @bTRans =  1  
begin 
COMMIT TRAN tran_calcwork 
end 


Если после условия присутствует только одна строка то Begin End не нужно.


Надо поколупаться. Выложи скрипт таблички и скрипт заполенения несколькими строками тестовых данных. Я дома поковыряю.


Magnus
...
Рейтинг: 0 / 0
26.03.2004, 09:19
    #32457921
johnnybo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Magnus.

Дело в том, что при выполнении этой процедуры вызываются еще как минимум два тригера на обновление. которые в свою очередь тоже могут вызывать (может неправильно сказал, не знаю как точно будет вызывает или порождает) еще тригеры. А если дать тебе одну таблицу - придется давать все таблицы, а их в этом процесе ох как много.

Чере qa процедура идет и возвращает рекордсет, но qa насколько я знаю использует одбс драйвер для подключения к серваку.

А проблемы с синтаксисом - это я так шаманил немного и видимо не поубирал лишнее.

Прикол в том что когда использую драйвер SQLOLEDB.1 эта хрень и происходит, если же драйвер MSDASQL.1 - все путем, да кстати у меня стоит мдак 2,8 может там глюк какой-то, я просто не могу понять или это баг от билла или так задумано и в этом есть какой-то смысл, что-то полезное,, а нормального описания этого на мсдн нет, или я плохо искал.

Я уже смотрю в сторону использования драйвера MSDASQL.1. По своему пусть небольшому опыту, выдел как SQLOLEDB.1 глючил, говорил, что сервака нету. при этом MSDASQL.1 работал как нивчем не бывало и как мне кажется он немного быстрее, если я не прав извините.

Но меня настораживает одно, SQLOLEDB.1 специально писался для сюл сервака и я так понимаю, что в нем есть то чего нету в MSDASQL.1 или я неправ, тогда исправте?
...
Рейтинг: 0 / 0
26.03.2004, 15:38
    #32458823
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
SQLOLEDB действительно заточен под сервер и должен(по идее) работать лучше.
Да уж, проблема серьезная. Явно баг.
Кое что накопал у мелкомягких, но в основном какие то невнятные сьезды.

Попробуем проверить.
На какой машине запускаешь? Сколько камней? Мозгов хватает?
На других пробовал?

Magnus
...
Рейтинг: 0 / 0
26.03.2004, 15:54
    #32458856
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Еще кое что. В QA возвращается только один набор записей?
Какие либо сообщения есть?

Запусти трассу на сервер и отлови что конкретно выполняется.

Magnus
...
Рейтинг: 0 / 0
26.03.2004, 15:56
    #32458860
johnnybo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Машина то селерон 1 г 512 оперативки, свободного на с 2,5 г
тестовый сервак п-3 800 512 40 г ,sql 2000 sp3.

Я сейчас думаю может я чего-то из компонент не подключил,может ему то ище чегото нужно, а подключено адо 2,8 и ole db service conponents 1.0,
...
Рейтинг: 0 / 0
26.03.2004, 16:03
    #32458879
johnnybo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
на других машынах таже проблема, причем на тех стоит 2,6 мдак.
...
Рейтинг: 0 / 0
26.03.2004, 16:14
    #32458901
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
Пока хорошо, а трасса?

Magnus
...
Рейтинг: 0 / 0
26.03.2004, 16:18
    #32458909
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
А это
ole db service conponents 1.0
зачем?
Даталлинки строишь?

Magnus
...
Рейтинг: 0 / 0
26.03.2004, 16:24
    #32458925
johnnybo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
траса то 100 на свиче
...
Рейтинг: 0 / 0
26.03.2004, 16:44
    #32458987
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
чета я нипонил. При чем тут свич? Я говорю о Trace в Profiler. :)
А ты о чем?

Magnus
...
Рейтинг: 0 / 0
26.03.2004, 16:49
    #32458998
johnnybo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
а я скорости сетки
...
Рейтинг: 0 / 0
26.03.2004, 18:06
    #32459144
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MSSql server и процедуры через адо
:)
Ясно. Скорость сетки собственно не причем.
Открой Profiler и запусти Trace на свой сервер. Хотелось бы увидеть что конкретно выполняется на сервере.

Magnus
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / MSSql server и процедуры через адо / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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