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