powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Результат хранимки через ADO
22 сообщений из 47, страница 2 из 2
Результат хранимки через ADO
    #39111485
Фотография Palarm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на клиенте соответсвенно:
Код: vbnet
1.
2.
3.
Set Me.OrgKey.Recordset = con.Execute("EXEC hp_ObjSource 'OrgKey', @RecKeyList='IN 1 3'")
Set Me.OrgKey1.Recordset = Me.OrgKey.Recordset
Set Me.OrgKey2.Recordset = con.Execute("EXEC hp_ObjSource 'OrgKey', @RecKeyList='NOTIN 1 3'")
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39111488
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так это ж опять динамика. Что тебе мешает создать статическую вьюшку, я никак не могу понять. Зачем ее каждый раз создавать и удалять?
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39111492
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Palarm
Код: sql
1.
2.
@RecKeyList nvarchar(50)
IF CHARINDEX('NOTIN', @RecKeyList) > 0

небольшое замечание по ходу дела: ты постоянно оперируешь между varchar и nvarchar-строками, то есть заставляешь сервер постоянно преобразовывать один тип данных в другой, правильно так:
Код: sql
1.
IF CHARINDEX(N'NOTIN', @RecKeyList) > 0
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39111588
Фотография Palarm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProТак это ж опять динамика. Что тебе мешает создать статическую вьюшку, я никак не могу понять. Зачем ее каждый раз создавать и удалять?Видимо долгое юзание Аксес в качестве СУБД сформировало порочные с позиции T-SQL автоматизмы мышления: динамические запросы, обработка данных на клиенте, процедурное программирование и т. д. - БД по сути использовалось как мешок для мусора, в котором надо ковыряться из клиента. В итоге со скрипом въезжаю в то, что для тебя банальности.

PS:
тут да, конечно пишем статичную вьюху - кавычки в топку
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115214
Фотография Palarm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
IF @ObjName = 'CT_ID'
    SELECT CT_ID, Alfa2 + ' - ' + Country_Ukr FROM tab_Country WHERE Sost=0 ORDER BY Country_Ukr
IF @ObjName = 'CTyp_ID'
   SELECT CTyp_ID, CTypName FROM tab_MCenaType WHERE Sost=0 ORDER BY CTypName
IF @ObjName = 'DC_ID'
   SELECT DC_ID, DocType FROM tab_Document_Type WHERE Sost=0 ORDER BY DocType
...


При таком коде не будет лишних тормозов при пробежке по If-ам, которых может быть сотни? Тут как бы просится ELSEIF которого нет в T-SQL или может здесь при нахождении нужного условия дальнейший поиск прекращается?
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115218
Фотография Palarm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProДинамика компилируется каждый раз при вызове, каждый раз производится анализ таблиц и составляется план запроса. Не динамический запрос компилируется сразу, план составляется тоже сразу. Излишне говорить, что это влияет на производительность.Я так понимаю, что запуск селекта через ADO имеет тот же негатив? То есть con.Execute(...) выполняется медленнее чем запуск хранимки через тот же con.Execute?
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115338
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PalarmПри таком коде не будет лишних тормозов при пробежке по If-ам, которых может быть сотни? Тут как бы просится ELSEIF которого нет в T-SQL или может здесь при нахождении нужного условия дальнейший поиск прекращается?Что мешает использовать else? elseif всего лишь удобная форма для записи цепочки if-ов. А вообще, правильнее под каждый селект создавать отдельную хранимку, а не пытаться запихать всю логику всего приложения в одну. Это, кстати, поможет оптимизатору SQL. Понимаю, что снова мешает менталитет программиста динамических запросов на клиенте, но, как я уже говорил, надо менять взгляды.
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115343
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PalarmЯ так понимаю, что запуск селекта через ADO имеет тот же негатив? То есть con.Execute(...) выполняется медленнее чем запуск хранимки через тот же con.Execute?совершенно верно. Select - это тот же динамический запрос. Как я уже говорил выше - клиента нужно писать так, чтобы он понятия не имел про язык SQL. Он просто вызывает хранимку с определенными параметрами и получает ответ в определенном формате. Нет ничего страшного, что на сервере будет тысяча хранимок. Тебе же не мешает та же самая тысяча процедур/функций на клиенте. Так и воспринимай - хранимка, это процедура/функция, которая выполняется на сервере, а не на клиенте. И если функция на клиенте или хранимка на сервере содержит всего одну строку - в этом нет ничего страшного.

Данный подход имеет и побочный эффект: можно модернизировать хранилище, не переписывая клиента и/или сохранять совместимость со старыми версиями. Это особенно удобно, если клиентов много и взять и резко обновить всем версию клиента представляется затруднительным. Просто в новой версии обращаешься к тем же данным по-новому (новая хранимка или новые параметры хранимки, имеющие значения по умолчанию), старые клиенты продолжают работать по-старому
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115430
Фотография Palarm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProА вообще, правильнее под каждый селект создавать отдельную хранимку, а не пытаться запихать всю логику всего приложения в одну. Это, кстати, поможет оптимизатору SQL. Понимаю, что снова мешает менталитет программиста динамических запросов на клиенте, но, как я уже говорил, надо менять взгляды.
Хочешь сказать, что вот так хранимку для списка писать не кошерно, с позиwии T-SQL
Код: sql
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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
IF @ObjName = 'OrgKey'
	BEGIN
		IF @RecKeyList = ''
			BEGIN
				IF @RecKey <> 0 AND @RecKey1 = 0
					SELECT	OrgKey, RecFld
					FROM	qry_hp_ObjSource_sub
					WHERE	OrgType=@RecKey
					ORDER BY NameYur
				IF @RecKey = 0 AND @RecKey1 <> 0
					SELECT	OrgKey, RecFld
					FROM	qry_hp_ObjSource_sub
					WHERE	OrgKey=@RecKey
					ORDER BY NameYur
				IF @RecKey <> 0 AND @RecKey1 <> 0
					SELECT	OrgKey, RecFld
					FROM	qry_hp_ObjSource_sub
					WHERE	OrgType=@RecKey AND OrgKey = @RecKey1
					ORDER BY NameYur								
			END
		ELSE
			BEGIN
				IF CHARINDEX(N'NOTIN', @RecKeyList) > 0
					BEGIN
						SET @DopWhere = SUBSTRING(@RecKeyList, 7, Len(@RecKeyList));
						SELECT	OrgKey, RecFld
						FROM	qry_hp_ObjSource_sub
						WHERE	OrgType NOT IN(SELECT number FROM dbo.iter_intlist_to_table(@DopWhere))
						ORDER BY NameYur
					END					
				ELSE
					IF CHARINDEX(N'IN', @RecKeyList) > 0
						BEGIN
							SET @DopWhere = SUBSTRING(@RecKeyList, 3, Len(@RecKeyList));
							SELECT	OrgKey, RecFld
							FROM	qry_hp_ObjSource_sub
							WHERE	OrgType IN(SELECT number FROM dbo.iter_intlist_to_table(@DopWhere))
							ORDER BY NameYur
						END									
			END
	END


Я тут начал изворачиваться через комбинации параметров, чтобы через одну вьюху и хранимку создать источники для нескольких списков, использующих одну таблицу, но с разными фильтрами. А по твоим рассуждениям надо каждому списку свою хранимку - чтобы получить максимальную скорость. Ну допустим.
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115431
Фотография Palarm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Натыкался еще на такой способ "уменьшения кол-во объектов на сервере" - использование .NextRecordset. То есть пишется хранимка с несколькими селектами, а спискам в той же последовательности присваиваются через .NextRecordset источники. Понятно, что опять рефлексия минимизации - а скорость будет такая же как при отдельных хранимках или ниже?

Shocker.ProДанный подход имеет и побочный эффект: можно модернизировать хранилище, не переписывая клиента и/или сохранять совместимость со старыми версиями. Это особенно удобно, если клиентов много и взять и резко обновить всем версию клиента представляется затруднительным. Просто в новой версии обращаешься к тем же данным по-новому (новая хранимка или новые параметры хранимки, имеющие значения по умолчанию), старые клиенты продолжают работать по-старомуМне твой совет по переносу всех селектов на сервер толкнул еще одну мысль - проще будет сменить платформу клиента. Не век же на Аксесе лабать. + возможность развернуть целую сетку клиентских приложений на смартфонах, планшетах и т. п. юзающих одну БД + возможность параллельной разработки БД и клиента, как в web: дизайнер + программист.
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115438
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Palarm
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
				IF @RecKey <> 0 AND @RecKey1 = 0
					SELECT	OrgKey, RecFld
					FROM	qry_hp_ObjSource_sub
					WHERE	OrgType=@RecKey
					ORDER BY NameYur
				IF @RecKey = 0 AND @RecKey1 <> 0
					SELECT	OrgKey, RecFld
					FROM	qry_hp_ObjSource_sub
					WHERE	OrgKey=@RecKey
					ORDER BY NameYur
				IF @RecKey <> 0 AND @RecKey1 <> 0
					SELECT	OrgKey, RecFld
					FROM	qry_hp_ObjSource_sub
					WHERE	OrgType=@RecKey AND OrgKey = @RecKey1
					ORDER BY NameYur	

просто, если немножко подумать, то:
Код: sql
1.
2.
3.
4.
5.
SELECT	OrgKey, RecFld
FROM	qry_hp_ObjSource_sub
WHERE	(@RecKey = 0 OR OrgType = @RecKey) AND
        (@RecKey1 = 0 OR OrgKey = @RecKey1)
ORDER BY NameYur



что касается [NOT] IN - то тут делается инлайн-функция для повторяющегося кода, а where и order остаютс в процедуре, но тот всего два варианта ведь, а не сотня
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115440
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PalarmНатыкался еще на такой способ "уменьшения кол-во объектов на сервере" - использование .NextRecordset. То есть пишется хранимка с несколькими селектами, а спискам в той же последовательности присваиваются через .NextRecordset источники. Понятно, что опять рефлексия минимизации - а скорость будет такая же как при отдельных хранимках или ниже?тут, в общем-то, идет минимизация обращений к серверу. То есть используя возврат нескольких рекордсетов ты экономишь на накладных расходах установки соединения и отсылке запроса к серверу. При медленном соединении и интенсивных запросах на этом можно сэкономить. Но у меня, к примеру, в проекте с полутора тысячью хранимок этот прием используется дай бог в десятке.
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115449
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Palarmпроще будет сменить платформу клиента. Не век же на Аксесе лабать. + возможность развернуть целую сетку клиентских приложений на смартфонах, планшетах и т. п. юзающих одну БД + возможность параллельной разработки БД и клиента, как в web: дизайнер + программист.Тогда во-первых смотри на трехзвенную архитектуру: СУБД, сервер приложения и клиент. При этом клиент в таком случае не то что об SQL, вообще о БД не имеет никакого понятия. Он обращается к серверу приложений за высокоуровневыми функциями.

Но тут уже смотри... Последнее время есть тенденция использовать ORM. Это означает в основном отказ от языка SQL. Тут свои достоинства и недостатки, споров много, в основном переход на ORM считается прогрессивным. Я одно приложение наваял не очень нагруженное - да - удобно, но надо опять сильно перестраивать мозг.
Вообще, выбор платформы, это тема бесконечной дискуссии ))
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115571
Фотография Palarm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за помощь :)

Еще вопрос: есть много таких блоков
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
If sLookup("SELECT COUNT(OrgKey2) AS ReCnt FROM tab_Org WHERE OrgKey=" & Me.OrgKey1) > 0 Then
    If MsgBox("бла бла бла?", vbExclamation + vbYesNo + vbDefaultButton2, NomWers) = vbNo Then
        Exit Sub
    Else
        con.Execute "hp_InsertZakazIsp " & Me.TTD_ID & "," & Me.OrgKey1 & "," & Me.Zak_ID
    End If
End If


тут видится 2 варианта:
1. сделать udf возвращающей bit и в зависимости от него запускать мессагу (но опять же - как гвоздем по стеклу - лепить кучи одностроковых функций - эх)
2. вставить проверку в хранимку - делать прерывание - отсылать клиенту код - ждать ответа - продолжать или закрывать выполнение. Но тут походу кощунство для T-SQL адептов - попытка внедрить процедурное мышление :) Да и навряд ли T-SQL поддерживает такие пинг-понги с клиентом, по крайней мере я не встречал примеров.
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115601
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, открой для себя Exists, это будет быстрее, чем Count>0

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

Хранимка возвращает >=0 при успешном выполнении, -1, если ошибка без возможности продолжения, -2 запрос к пользователю на возможность продолжения. Поскольку подтверждений может быть несколько, ответ циклически накапливается в Confirm, текст ошибки или подтверждения в ErrMsg. В хранимке:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE PROCEDURE MyProc
......
@ErrMsg$ nvarchar(1000)=N'' OUTPUT,
@Confirms$ nvarchar(1000)=N'' OUTPUT
AS

if (критическое_условие) begin
  set @ErrMsg$=N'Текст ошибки.'
  return -1
end

if charindex(N'MYKEY1$',@Confirms$)=0 begin
  if (проверка_некритичного_условия) begin
    set @ErrMsg$=N'Текст подтверждения для клиента'
    set @Confirms$=@Confirms$+N'MYKEY1$'
    return -2
  end
end

--основные действия процедуры

то есть в @Confirms$ накапливаются подтверждения пользователя типа N'MYKEY1$N'DELETE$EMPTYNAME$' и т.п. по количеству проверок.

на клиенте
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim ErrMsg As String, Confirms As String

rep:
Select Case вызов_хранимки(.........., "@ErrMsg$", ErrMsg, "@Confirms$", Confirms)
  Case 0
    'действия при успешном выполнении
  Case -1
    MsgBox ErrMsg, vbCritical, "Заголовок"
  Case -2
    If MsgBox(ErrMsg + vbCr + "Продолжить?", vbExclamation + vbYesNo, "Заголовок") = vbYes Then GoTo rep
End Select


или
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim ErrMsg As String, Confirms As String

rep:
Select Case вызов_хранимки(.........., "@ErrMsg$", ErrMsg, "@Confirms$", Confirms)
  Case -1
    MsgBox ErrMsg, vbCritical, "Заголовок"
    Exit Sub
  Case -2
    If MsgBox(ErrMsg + vbCr + "Продолжить?", vbExclamation + vbYesNo, "Заголовок") = vbYes Then GoTo rep
    Exit Sub
End Select
'действия при успешном выполнении
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115624
Фотография Palarm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стало быть повторный вызов с обновленным параметром, причем если через return то придется запускать через cmd.Parameters.Append cmd.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue). А если как мне больше нравится через con - тогда свой Output параметр туда вводить.
Спасибо за наводку.
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115629
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PalarmСтало быть повторный вызовда. Ведь надо понимать, что пользователь может думать час над мессаджбоксом, за это время в базе может много чего измениться. То есть все проверки каждый раз проводятся заново - во избежание...
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39115666
Фотография Palarm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наваял, работает, причем всем назло через con.Execute, а не cmd.Parameters :)
Было:
Код: vbnet
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.
32.
33.
34.
35.
36.
37.
Function funInsertDopKod(ByVal Kart_ID As Long, ByVal UKT_ID As Long) As Boolean
Dim flg_Trans As Boolean

On Error GoTo Err_
    If Nz(sLookup("SELECT Count(*) AS RecCnt FROM tab_UKT_ZED_DopKodInvois WHERE UKT_ID=" & UKT_ID), 0) = 0 Then
        If Nz(sLookup("SELECT Count(*) AS RecCnt FROM tab_MKart_DopKodInvois WHERE Kart_ID=" & Kart_ID), 0) > 0 Then
            If MsgBox("Для обраного коду УКТ ЗЕД відсутні дані по додатковим кодам в Електронний Інвойс, 
але додаткові коди з іншого коду УКТ ЗЕД вже присутні в картці товару. Видалити їх?", 
vbExclamation + vbYesNo + vbDefaultButton2, NomWers) = vbNo Then Exit Function
            con.Execute "Delete From tab_MKart_DopKodInvois Where Kart_ID=" & Kart_ID
            funInsertDopKod = True
        End If
    Else
        If MsgBox("Присутні дані по додатковим кодам в Електронний Інвойс. Додати їх в картку товару? Попередні дані будуть видалені.",
 vbExclamation + vbYesNo + vbDefaultButton2, NomWers) = vbNo Then Exit Function
'***************<Начало транзакции>********************
        con.BeginTrans
        flg_Trans = True
        
        con.Execute "Delete From tab_MKart_DopKodInvois Where Kart_ID=" & Kart_ID
        con.Execute _
            "Insert Into tab_MKart_DopKodInvois(Kart_ID, DK_ID) " & _
            "SELECT " & Kart_ID & ",DK_ID " & _
            "FROM   tab_UKT_ZED_DopKodInvois " & _
            "WHERE  UKT_ID=" & UKT_ID

        con.CommitTrans
        flg_Trans = False
'***************<Конец/ транзакции>********************
        funInsertDopKod = True
    End If
Exit Function

Err_:
    If flg_Trans = True Then con.RollbackTrans
    Call ErrorBases(Err, "mdl_FormFun", "InsertDopKod")
End Function


Стало
Код: vbnet
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.
Function funInsertDopKod(ByVal Kart_ID As Long, ByVal UKT_ID As Long) As Boolean
Dim Result As Integer
Dim rs As ADODB.Recordset
Dim sErrMsg As String, sConfirms As String

On Error GoTo Err_
    Set rs = New ADODB.Recordset
lab:
    Set rs = con.Execute( _
            "USE tam;" & _
            "DECLARE @ErrMsg nvarchar(1000)='" & sErrMsg & "',@Confirms nvarchar(1000)='" & sConfirms & "',@Result INT;" & _
            "EXECUTE hp_InsertDopKod " & Kart_ID & "," & UKT_ID & ",@ErrMsg OUTPUT,@Confirms OUTPUT,@Result OUTPUT;" & _
            "SELECT @ErrMsg AS Cnt;SELECT @Confirms AS Cnt;SELECT @Result AS Cnt")
    sErrMsg = Nz(rs.NextRecordset.Fields(0).Value, "")
    sConfirms = Nz(rs.NextRecordset.Fields(0).Value, "")
    Result = Nz(rs.NextRecordset.Fields(0).Value, 0)
    
    Select Case Result
      Case -1
        MsgBox sErrMsg, vbCritical, NomWers
        Exit Function
      Case -2
        If MsgBox(sErrMsg, vbExclamation + vbYesNo, NomWers) = vbYes Then GoTo lab
    End Select
    funInsertDopKod = True
Exit Function

Err_:
    Call ErrorBases(Err, "mdl_FormFun", "InsertDopKod")
End Function


И на серваке
Код: sql
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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
ALTER PROCEDURE [dbo].[hp_InsertDopKod]
	@Kart_ID INT,
	@UKT_ID INT,
	@ErrMsg nvarchar(1000)=N'' OUTPUT,
	@Confirms nvarchar(1000)=N'' OUTPUT,
	@Result INT OUTPUT
AS
 
BEGIN
	SET NOCOUNT ON;

	IF NOT EXISTS(SELECT * FROM tab_UKT_ZED_DopKodInvois WHERE UKT_ID=@UKT_ID)
		IF EXISTS(SELECT * FROM tab_MKart_DopKodInvois WHERE Kart_ID=@Kart_ID) 
			IF CHARINDeX(N'check1', @Confirms) = 0 
				BEGIN
					SET @ErrMsg = 'Для обраного коду УКТ ЗЕД відсутні дані по додатковим кодам в Електронний Інвойс,
 але додаткові коди з іншого коду УКТ ЗЕД вже присутні в картці товару. Видалити їх?'
					SET @Confirms = @Confirms + N'check1'
					SET @Result = -2
				END
			ELSE
				DELETE FROM tab_MKart_DopKodInvois WHERE Kart_ID=@Kart_ID
	ELSE
		IF CHARINDeX(N'check2', @Confirms) = 0
			BEGIN			
				SET @ErrMsg = 'Присутні дані по додатковим кодам в Електронний Інвойс. 
Додати їх в картку товару? Попередні дані будуть видалені.'
				SET @Confirms = @Confirms + N'check2'
				SET @Result = -2
			END
		ELSE
			BEGIN
				BEGIN TRY
					BEGIN TRANSACTION
						DELETE FROM tab_MKart_DopKodInvois WHERE Kart_ID=@Kart_ID;
						INSERT INTO tab_MKart_DopKodInvois(Kart_ID, DK_ID)
						SELECT @Kart_ID, DK_ID
						FROM   tab_UKT_ZED_DopKodInvois
						WHERE  UKT_ID=@UKT_ID;
					COMMIT TRANSACTION
				END TRY
				BEGIN CATCH
					ROLLBACK
					SET @ErrMsg = 'Произошел откат транзакции';
					THROW
					SET @Result = -1
				END CATCH
			END
END
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39118117
Фотография Palarm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
If (Условие)=0 Then Exit Sub

Предполагаю, что аналога именно такого прерывания нет в T-SQL, а нужно делать как в вышеприведеных примерах - отсылать клиенту код ошибки и там уже принимать решение - перезапускать выполнение хранимки или нет. Правильно?
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39118130
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PalarmПредполагаю, что аналога именно такого прерывания нет в T-SQLчем не нравится return?
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39118153
Фотография Palarm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще то да. Тогда еще вопрос: есть ли возможность организовать индикацию процесса выполнения хранимки? Имеется в виду отдельная форма с бегунком. Тут ведь по любому придется делать множество перезапусков хранимки, чтобы вернуть текущее состояние процесса и отразить его для пользователя.
Оно понятно, что на сервере надо стараться работать с блоками данных, а не циклами, и по большому счету от бегунка кроме лишних тормозов толку особого нет - но из любопытства: может есть какой progressbar в T-sql или какой то маневр, чтобы его запустить на клиенте?
...
Рейтинг: 0 / 0
Результат хранимки через ADO
    #39118236
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, есть, в FAQ посмотри
...
Рейтинг: 0 / 0
22 сообщений из 47, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Результат хранимки через ADO
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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