Вопрос

Не могу подставить Field для Join'а.

Хочу 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. Есть ли какие нибудь статьи?

 

У меня такой же вопрос

1 комментарий

Вопрос обсудили в соседней Вашей теме.

Войдите или зарегистрируйтесь, чтобы комментировать