Bonjour,
j'ai une macro qui est scencée exéctuer une requête SQL. Le problème est que dans le cas de la requête 1, ça fonctionne nickel. Par contre dans le cas 2, ça ne marche pas. Le message d'erreur retourné est : '13' - Incompatibilité de type.
Avez-vous une suggection pour résoudre ce problème ?
Voici la Macro :
Sub Requete()
Dim sql, dest As String
Dim d1 As String
dest = "B2"
sql = "select T0.ItemCode from ""BDD"".dbITM T0" c'est là que j'écris la requête SQL qui est exécutée
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DRIVER=SQL Server;SERVER=(local);UID=admin;APP=Microsoft Office 2003;WSID=PC23;Trusted_Connection=Yes" _
, Destination:=Range(dest))
.CommandText = Array(sql) on retrouve ici la variable sql qui contient le code de la requête
.Name = "RequêteTest"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub
Voici les 2 requêtes :
cas1
sql = "select T0.ItemCode from ""BDD"".dbITM T0"
cas2
sql = "SELECT 'F' AS Type, 0 AS myOrder, PCH1.ItemCode, PCH1.Dscription AS Désignation, PCH1.Quantity AS QuantitéPassée, SUM(PCH1.LineTotal)
AS MontantPassé, NULL AS QuantitéPrévue, NULL AS MontantPrévu, NULL AS Budget
FROM "LAROCHE Industries".dbo.PCH1 PCH1 INNER JOIN
"LAROCHE Industries".dbPCH OPCH ON PCH1.DocEntry = OPCH.DocEntry INNER JOIN
"LAROCHE Industries".dbITM OITM ON PCH1.ItemCode = OITM.ItemCode
WHERE (OPCH.Project = '15630')
GROUP BY PCH1.ItemCode, PCH1.Dscription, OITM.InvntItem, PCH1.Quantity
HAVING (OITM.InvntItem = 'N')
UNION
[...] je vous épargne l'ensemble du code [...]
UNION
SELECT 'MO' AS Type, 9 AS myOrder, NULL AS ItemCode, 'Total MAIN D OEUVRE' AS Désignation, SUM([@MRO_SEO3].U_DurTime) / 60 AS DuréePassée,
SUM([@MRO_SEO3].U_DurTime) * 40 / 60 AS MontantPassé, SUM([@MRO_SEO2].U_DurTime) / 60 AS DuréePrévue, SUM([@MRO_SEO2].U_DurTime)
* 40 / 60 AS MontantPrévu, SUM(CAST([@MRO_OSEO].U_MRO_P_1 AS float)) AS Budget
FROM "LAROCHE Industries".dbo.[@MRO_SEO3] [@MRO_SEO3] INNER JOIN
"LAROCHE Industries".dbo.[@MRO_SEO2] [@MRO_SEO2] ON [@MRO_SEO3].U_C_SEO2 = [@MRO_SEO2].Code INNER JOIN
"LAROCHE Industries".dbo.[@MRO_OSEO] [@MRO_OSEO] ON [@MRO_SEO2].U_C_OSEO = [@MRO_OSEO].Code
WHERE ([@MRO_OSEO].U_C_OSCL = 7)
GROUP BY [@MRO_OSEO].U_C_OSCL
order by Type, myOrder"
j'ai une macro qui est scencée exéctuer une requête SQL. Le problème est que dans le cas de la requête 1, ça fonctionne nickel. Par contre dans le cas 2, ça ne marche pas. Le message d'erreur retourné est : '13' - Incompatibilité de type.
Avez-vous une suggection pour résoudre ce problème ?
Voici la Macro :
Sub Requete()
Dim sql, dest As String
Dim d1 As String
dest = "B2"
sql = "select T0.ItemCode from ""BDD"".dbITM T0" c'est là que j'écris la requête SQL qui est exécutée
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DRIVER=SQL Server;SERVER=(local);UID=admin;APP=Microsoft Office 2003;WSID=PC23;Trusted_Connection=Yes" _
, Destination:=Range(dest))
.CommandText = Array(sql) on retrouve ici la variable sql qui contient le code de la requête
.Name = "RequêteTest"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub
Voici les 2 requêtes :
cas1
sql = "select T0.ItemCode from ""BDD"".dbITM T0"
cas2
sql = "SELECT 'F' AS Type, 0 AS myOrder, PCH1.ItemCode, PCH1.Dscription AS Désignation, PCH1.Quantity AS QuantitéPassée, SUM(PCH1.LineTotal)
AS MontantPassé, NULL AS QuantitéPrévue, NULL AS MontantPrévu, NULL AS Budget
FROM "LAROCHE Industries".dbo.PCH1 PCH1 INNER JOIN
"LAROCHE Industries".dbPCH OPCH ON PCH1.DocEntry = OPCH.DocEntry INNER JOIN
"LAROCHE Industries".dbITM OITM ON PCH1.ItemCode = OITM.ItemCode
WHERE (OPCH.Project = '15630')
GROUP BY PCH1.ItemCode, PCH1.Dscription, OITM.InvntItem, PCH1.Quantity
HAVING (OITM.InvntItem = 'N')
UNION
[...] je vous épargne l'ensemble du code [...]
UNION
SELECT 'MO' AS Type, 9 AS myOrder, NULL AS ItemCode, 'Total MAIN D OEUVRE' AS Désignation, SUM([@MRO_SEO3].U_DurTime) / 60 AS DuréePassée,
SUM([@MRO_SEO3].U_DurTime) * 40 / 60 AS MontantPassé, SUM([@MRO_SEO2].U_DurTime) / 60 AS DuréePrévue, SUM([@MRO_SEO2].U_DurTime)
* 40 / 60 AS MontantPrévu, SUM(CAST([@MRO_OSEO].U_MRO_P_1 AS float)) AS Budget
FROM "LAROCHE Industries".dbo.[@MRO_SEO3] [@MRO_SEO3] INNER JOIN
"LAROCHE Industries".dbo.[@MRO_SEO2] [@MRO_SEO2] ON [@MRO_SEO3].U_C_SEO2 = [@MRO_SEO2].Code INNER JOIN
"LAROCHE Industries".dbo.[@MRO_OSEO] [@MRO_OSEO] ON [@MRO_SEO2].U_C_OSEO = [@MRO_OSEO].Code
WHERE ([@MRO_OSEO].U_C_OSCL = 7)
GROUP BY [@MRO_OSEO].U_C_OSCL
order by Type, myOrder"