|
ADO: Recordset из Command
#36816723
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
|
Пишу VB скрипт в модуле MS Access. Необходимо получить результат вот такого запроса из БД MS SQL 2005:
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 Функции:
From BL_GET_NMKCARD_CEHA_OBR('2009-07-28T00:00:00', '2009-10-19T00:00:00') as OBR
Код скрипта вот такой:
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 ?
|
|
|