powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ADO: Recordset из Command
3 сообщений из 3, страница 1 из 1
ADO: Recordset из Command
    #36816723
Hexogon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу VB скрипт в модуле MS Access. Необходимо получить результат вот такого запроса из БД MS SQL 2005:

Код: plaintext
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.
Select OBR.T_CEHA
	,Nom.Note
	,Nom.name
	
	,CASE NOM.CLASS_ID WHEN '25' 
		THEN IsNull(IsNull(OBR.T_OBR_IN * par_par.PARAMETER_VALUE,OBR.T_OBR_IN * Koef_per.COEFF),OBR.T_OBR_IN)
		ELSE OBR.T_OBR_IN
	END as ОстНач
	
	,CASE NOM.CLASS_ID WHEN '25' 
		THEN IsNull(IsNull(OBR.T_PR * par_par.PARAMETER_VALUE,OBR.T_PR * Koef_per.COEFF),OBR.T_PR)
		ELSE OBR.T_PR
	END as Приход	
	
	,CASE NOM.CLASS_ID WHEN '25' 
		THEN IsNull(IsNull(OBR.T_RS * par_par.PARAMETER_VALUE,OBR.T_RS * Koef_per.COEFF),OBR.T_RS)
		ELSE OBR.T_RS
	END as Расход	
	
	,CASE NOM.CLASS_ID WHEN '25' 
		THEN IsNull(IsNull(OBR.T_OBR_OUT * par_par.PARAMETER_VALUE,OBR.T_OBR_OUT * Koef_per.COEFF),OBR.T_OBR_OUT)
		ELSE OBR.T_OBR_OUT
	END as ОстКнц	
	
	,CASE WHEN NOM.CLASS_ID = '25' 
		THEN CASE WHEN Par_par.PARAMETER_VALUE IS NULL 
				THEN CASE WHEN Koef_per.COEFF IS NULL 
						THEN Mes.note 
						ELSE 'кг' END 
				ELSE 'кг' END 
		ELSE Mes.NOTE
	END AS ЕдИзм
Into #OBR	

From BL_GET_NMKCARD_CEHA_OBR('2009-07-28T00:00:00', '2009-10-19T00:00:00') as OBR
	
Left join V_REGISTRATION_CARDS As UC
		On UC.ID = obr.T_BL_NMK_CARD
	Left Join V_NOMENCLATURE As Nom
		On Nom.ID = UC.NOMENCLATURE_ITEM_ID
	LEFT JOIN V_BATCH_PARAMETERS AS Par_Par  /*Параметры партии*/
		ON Par_Par.BATCH_ID = UC.BATCH_ID 
		AND Par_Par.PARAMETER_ID = 242 
	LEFT JOIN V_MESUR_TRANSLATE AS Koef_per   /*Коэф пересчета номенклатуры*/
		ON Koef_per.NMK_ID = Nom.ID 
		AND Koef_per.MESUR_IN = 4 
		AND Koef_per.MESUR_to = 1
	Left Join V_MEASURES As Mes
		On Mes.ID = Nom.BASE_MEASURE_ID
Where OBR.T_CEHA = 113

Запрос осуществляется из Table-valued Функции:
Код: plaintext
From BL_GET_NMKCARD_CEHA_OBR('2009-07-28T00:00:00', '2009-10-19T00:00:00') as OBR

Код скрипта вот такой:
Код: plaintext
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.
'Обращаемся к хранимой процедуре
Set Command = CreateObject("ADODB.Command")
Set Par1 = CreateObject("ADODB.Parameter")
Set Par2 = CreateObject("ADODB.Parameter")
Command.ActiveConnection = Connect
Command.CommandTimeout = 300
Command.CommandType = adCmdTable
Command.CommandText = "set nocount on Select OBR.T_CEHA, Nom.Note, Nom.name, " & _
"CASE NOM.CLASS_ID WHEN '25' THEN IsNull(IsNull(OBR.T_OBR_IN * par_par.PARAMETER_VALUE, OBR.T_OBR_IN * Koef_per.COEFF), OBR.T_OBR_IN) ELSE OBR.T_OBR_IN END as ОстНач," & _
"CASE NOM.CLASS_ID WHEN '25' THEN IsNull(IsNull(OBR.T_PR * par_par.PARAMETER_VALUE,OBR.T_PR * Koef_per.COEFF), OBR.T_PR) ELSE OBR.T_PR    END as Приход," & _
"CASE NOM.CLASS_ID WHEN '25' THEN IsNull(IsNull(OBR.T_RS * par_par.PARAMETER_VALUE,OBR.T_RS * Koef_per.COEFF), OBR.T_RS) ELSE OBR.T_RS END as Расход," & _
"CASE NOM.CLASS_ID WHEN '25' THEN IsNull(IsNull(OBR.T_OBR_OUT * par_par.PARAMETER_VALUE, OBR.T_OBR_OUT * Koef_per.COEFF), OBR.T_OBR_OUT) ELSE OBR.T_OBR_OUT END as ОстКнц," & _
"CASE WHEN NOM.CLASS_ID = '25'  THEN CASE WHEN Par_par.PARAMETER_VALUE IS NULL THEN CASE WHEN Koef_per.COEFF IS NULL THEN Mes.note ELSE 'кг' END ELSE 'кг' END ELSE Mes.NOTE END AS ЕдИзм Into #OBR " & _
"From BL_GET_NMKCARD_CEHA_OBR('2007-01-01','2010-08-28') as OBR   Left join V_REGISTRATION_CARDS As UC On UC.ID = obr.T_BL_NMK_CARD    Left Join V_NOMENCLATURE As Nom    On Nom.ID = UC.NOMENCLATURE_ITEM_ID LEFT JOIN V_BATCH_PARAMETERS AS Par_Par  /*Параметры партии*/   ON Par_Par.BATCH_ID = UC.BATCH_ID   AND Par_Par.PARAMETER_ID = 242  LEFT JOIN V_MESUR_TRANSLATE AS Koef_per   /*Коэф пересчета номенклатуры*/ ON Koef_per.NMK_ID = Nom.ID   AND Koef_per.MESUR_IN = 4   AND Koef_per.MESUR_to = 1   Left Join V_MEASURES As Mes On Mes.ID = Nom.BASE_MEASURE_ID " & _
"Where OBR.T_CEHA IN (" & Shop_ID & " ) and UC.NOMENCLATURE_ITEM_ID IN ( " & Nmk_ID & ")" & _
"Select Sum(obr.ОстНач) as ОстНач ,Sum(obr.Приход) as Приход  ,Sum(obr.Расход) as Расход  ,Sum(obr.ОстКнц) as ОстКнц  ,obr.Note As Номенклатура_Обозначение   ,obr.name As Номенклатура_Наименование  ,Obr.ЕдИзм  ,Sh.SHOP_NUMBER + '/' + Sh.SECTION_NUMBER as Участок " & _
"From #Obr as obr   Left Join V_SHOPS as SH ON Sh.ID = obr.T_CEHA " & _
"Group By   obr.Note ,obr.name ,Obr.ЕдИзм ,Sh.SHOP_NUMBER ,Sh.SECTION_NUMBER   Drop table #Obr"
Command.CommandType = adCmdUnknown
    'Описываем параметры
Par1.Type = adDBTimeStamp
Par1.Size = 20
Par1.Direction = adParamInput
Par1.Value = "2007-01-01"
Command.Parameters.Append Par1
Par2.Type = adChar
Par2.Type = adDBTimeStamp
Par2.Size = 20
Par2.Direction = adParamInput
Par2.Value = "2010-08-28"
Command.Parameters.Append Par2
Command.Prepared = True
Command.Execute

Вопросы вот какие
1. Каким образом, всетаки, предаются параметры в функцию - через Par1, Par2 или параметры получают значения того что в запросе в скобочках при функции указано?
2. Каким образом, теперь, получить RecordSet ?
...
Рейтинг: 0 / 0
ADO: Recordset из Command
    #36816726
Hexogon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2. Каким образом, теперь, получить RecordSet ?
Recordset я получил
Код: plaintext
1.
2.
3.
4.
5.
'Создаем набор данных
Set OstKon = New ADODB.Recordset
OstKon.LockType = adLockReadOnly
OstKon.CursorType = adOpenKeyset
OstKon.CursorLocation = adUseServer
OstKon.Open Command.Execute
Но! Из за того что
CursorType = adOpenForwardOnly
Я не могу пробежаться по RecordSet'у с помощью
OstKon.MoveFirst
OstKon.MoveNext
Для дальнейших целей мне нужен
OstKon.CursorType = adOpenKeyset
И возможность просматривать RecordSet
Как быть?
...
Рейтинг: 0 / 0
ADO: Recordset из Command
    #36818778
Hexogon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А нет, все нормально. Вопрос решен.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ADO: Recordset из Command
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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