Результат хранимки через ADO - VB

Узнай цену своей работы

Формулировка задачи:

Функция:

хранимка, где она юзается:

Запускаю в менеджере SQL

выдает 1,2,3... и т. д. - работает стало быть
Запускаю через ADO (VBA):

выдает "переменная объекта или переменная не задана"
другие процедуры, запускаемые аналогично отрабатываются, эта не хочет. В чем прикол?

Решение задачи: «Результат хранимки через ADO»

textual
Листинг программы
USE [tam]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--Источники данных форм и контролов
ALTER PROCEDURE [dbo].[hp_ObjSource] 
	@ObjName varchar(50), @RecKey INT = 0, @RecKeyList nvarchar(50) = ''
AS
DECLARE @DopWhere nvarchar(50), @SQL nvarchar(1000)
 
BEGIN
	SET NOCOUNT ON;

	--Списки
	IF @ObjName = 'UP_ID'
		SELECT UP_ID, UPKod + ' - ' + UPName AS UKod FROM tab_UsPostawki WHERE Sost=0 ORDER BY UPKod
	IF @ObjName = 'TR_ID'
		SELECT TR_ID, NameYur FROM tab_Customs_Region WHERE Sost=0 ORDER BY NameYur
	IF @ObjName = 'TTD_ID'
		SELECT TTD_ID, TTName FROM tab_Decl_Type WHERE Sost=0 ORDER BY TTName
	IF @ObjName = 'WName'
		SELECT WName FROM tab_WType WHERE Sost=0 ORDER BY WName
	IF @ObjName = 'CT_ID'
		SELECT CT_ID, Alfa2 + ' - ' + Country_Ukr FROM tab_Country WHERE Sost=0 ORDER BY Country_Ukr
	IF @ObjName = 'BR_ID'
		SELECT tab_Border.BR_ID, tab_Border.Name_In + ' - ' + tab_Border.Name_Out + ' (' + tab_Country.Country_Ukr + ')' AS RecName
        FROM   tab_Border INNER JOIN
               tab_Country ON tab_Border.CT_ID = tab_Country.CT_ID
        WHERE  tab_Border.Sost=0
        ORDER BY tab_Border.Favor DESC, RecName
	IF @ObjName = 'TR_Key'
		SELECT TR_Key, NameYur FROM tab_Customs_Region WHERE Sost=0 ORDER BY NameYur
	IF @ObjName = 'OrgKey'
		BEGIN
			IF (SELECT COUNT(*) FROM sys.objects AS O WHERE O.NAME='v_tmp') > 0
				DROP VIEW v_tmp
			ELSE
				EXEC ('CREATE VIEW v_tmp AS
SELECT	OrgType, OrgKey, CASE WHEN ISNULL(NameSokr, '''')='''' THEN NameYur ELSE NameSokr END AS RecFld
FROM	tab_Org
WHERE	Sost=0')
			IF @RecKeyList = ''
				SELECT	OrgKey, RecFld
				FROM	v_tmp
				WHERE	OrgType=@RecKey
			ELSE
				BEGIN
					IF CHARINDEX('NOTIN', @RecKeyList) > 0
						BEGIN
							SET @DopWhere = SUBSTRING(@RecKeyList, 7, Len(@RecKeyList));
							SELECT	OrgKey, RecFld
							FROM	v_tmp
							WHERE	OrgType NOT IN(SELECT number FROM dbo.iter_intlist_to_table(@DopWhere))
						END					
					ELSE
						IF CHARINDEX('IN', @RecKeyList) > 0
							BEGIN
								SET @DopWhere = SUBSTRING(@RecKeyList, 3, Len(@RecKeyList));
								SELECT	OrgKey, RecFld
								FROM	v_tmp
								WHERE	OrgType IN(SELECT number FROM dbo.iter_intlist_to_table(@DopWhere))
							END									
				END
			DROP VIEW v_tmp
		END
END

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.462 из 5