Хочу DataSet, создаваемый SelectQuery, вывести в Excel через VBA. С этим проблем нет. SelectQuery является готовым сервисом, созданным администратором. К админке доступа нету. Всё прекрасно работает. Проблема в одном. Не могу Join по нормальному прикрепить.
Вот SQLText это SelectQuery:
SELECT
[Offering].[Name] AS [OfferingName],
[Offering].[Code] AS [OfferingCode],
[tbl_OfferingInMovement].[Quantity] AS [Quantity],
[OfferingMovementType].[Name] AS [OfferingMovementType],
[OfferingMovement].[StatusID] AS [OfferingMovementStatusID],
[tbl_OfferingInMovement].[InvoiceID] AS [InvoiceID],
[tbl_Invoice].[InvoiceNumber] AS [InvoiceNumber],
[tbl_OfferingInMovement].[Date] AS [Date]
FROM
[dbo].[tbl_OfferingInMovement] AS [tbl_OfferingInMovement]
LEFT OUTER JOIN
[dbo].[vw_Offering] AS [Offering] ON [Offering].[ID] = [tbl_OfferingInMovement].[OfferingID]
LEFT OUTER JOIN
[dbo].[vw_OfferingMovement] AS [OfferingMovement] ON [OfferingMovement].[ID] = [tbl_OfferingInMovement].[OfferingMovementID]
LEFT OUTER JOIN
[dbo].[tbl_OfferingMovementType] AS [OfferingMovementType] ON [OfferingMovementType].[ID] = [OfferingMovement].[TypeID]
LEFT OUTER JOIN
[dbo].[vw_Invoice] AS [tbl_Invoice] ON [tbl_Invoice].[ID] = [tbl_OfferingInMovement].[InvoiceID]
LEFT OUTER JOIN
[dbo].[tbl_AccountBillingInfo] AS [AccountBillingInfoItelon] ON [AccountBillingInfoItelon].[ID] = [OfferingMovement].[InfoItelonID]Последняя строка, добавленный мной JOIN. Он работает на отличненько.
Его код(кстати, скажите насколько он крив):
Set oTable = TSConnector.Services.GetNewItemByUSI(AccountBillingInfoItelonTableName)
Set oJoin = oSelectQuery.Items(0).Joins.Items(4).CreateCopy ' создание копии join'а LEFT OUTER JOIN [dbo].[tbl_OfferingMovementType] AS [OfferingMovementType] ON [OfferingMovementType].[ID] = [OfferingMovement].[TypeID]
oJoin.UID = TSConnector.GenGUID
oJoin.RightField = oJoin.RightField.ParentFields.Items(40) 'нужное поле из OfferingMovement
oJoin.LeftField = oTable.Fields.ItemsByName("ID")
oJoin.LeftTableAlias = "AccountBillingInfoItelon"
oJoin.JoinType = jtLeftOuter
oSelectQuery.Items(0).Joins.AddItem oJoin
oSelectQuery.Items(0).Joins.Items(oSelectQuery.Items(0).Joins.Count - 1).CanDisable = FalseА вот этот не хочет:
Set oTable = TSConnector.Services.GetNewItemByUSI(InvoiceTableName)
Set oJoin = oSelectQuery.Items(0).Joins.Items(10).CreateCopy
oJoin.UID = TSConnector.GenGUID
oJoin.RightField = oSelectQuery.Items(0).Joins.Items(9).LeftField.ParentFields.ItemsByName("PayerID") 'проблема именно здесь. Крепиться Field от tbl_Invoice. Но в SQL_Text ошибка. Крепит Field от не того Table.
oJoin.LeftField = oTable.Fields.ItemsByName("ID")
oJoin.LeftTableAlias = "AccountBillingPayerInfo"
oJoin.JoinType = jtLeftOuter
oSelectQuery.Items(0).Joins.AddItem oJoin
oSelectQuery.Items(0).Joins.Items(oSelectQuery.Items(0).Joins.Count - 1).CanDisable = FalseПосле него в SQLText в конце появляется:
LEFT OUTER JOIN
[dbo].[vw_Invoice] AS [AccountBillingPayerInfo] ON [AccountBillingPayerInfo].[ID] = [tbl_OfferingInMovement].[PayerID]В результате ошибка. В конце должно быть не [tbl_OfferingInMovement].[PayerID], а [tbl_Invoice].[PayerID]. Ведь креплю то я PayerID именно от tbl_Invoice. А в SQLText он зачем-то подставляет PayerID из tbl_OfferingInMovement, которого там нету. Именно в этом ошибка. Где вообще в SelectQuery эти прикрепленные таблицы?
Я может быть как-то не правильно Field добавляю в Join'ы. И до конца не понимаю суть этих Field'ов.
Может быть как-то с нуля можно создать этот join. Есть ли какие нибудь статьи?
Нравится