CodeSQL trop long pour ma macro

Dut

XLDnaute Nouveau
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"".dbo_OITM 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"".dbo_OITM 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".dbo_OPCH OPCH ON PCH1.DocEntry = OPCH.DocEntry INNER JOIN
"LAROCHE Industries".dbo_OITM 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"
 
T

THE CAT 2007

Guest
Re : CodeSQL trop long pour ma macro

Bj,

Vu la complexité de la requête ....

1 ) la réaliser dans access pour la valider ( avec liaison ODBC à la base )

2 ) la convertir SQL dans access avec access.

3 ) la placer dans excel, en corrigant la syntaxe
 

Dut

XLDnaute Nouveau
Re : CodeSQL trop long pour ma macro

Salut,
merci de ta réponse mais le problème ne vient pas de la requête SQL. Voici un peu plus de détails sur ma façon de travailler.

Je construis les requêtes dont j'ai besoin dans l'analyseur de requêtes de SQL Server.
Puis j'ouvre Excel et je lance l'enregistrement d'une nouvelle macro.
Ensuite, j'utilise MS Query en cliquant sur Données\Données externes\Créer une requête.
Là, je colle ma requête dans le volet SQL de MS Query, tout fonctionne, j'obtiens bien le résultat recherché.
Je renvoie les données vers Excel, aucun problème, tout roule.
Et enfin je stoppe l'enregistrement de la macro.


Le problème dans ce cas, c'est que la macro obtenue ne fonctionne pas...
 

Dut

XLDnaute Nouveau
Re : CodeSQL trop long pour ma macro

Bonsoir Dut,

Pourrais-tu remplacer le type de la variable sql ?

Code:
Dim sql As Variant

Merci
@+

Bonsoir matthieu,
merci pour ta suggestion mais malheureusement ça ne change rien. Cependant tu dois être sur la bonne piste : je me suis rendu compte que ce n'est pas la syntaxe qui est en cause mais le fait que le code SQL dépasse 255 caractères...

Ca te donne une idée ?

Dut
 

matthieu33

XLDnaute Occasionnel
Re : CodeSQL trop long pour ma macro

Bonsoir Dut,

Peux-tu faire un autre essai en enlevant "Array" ?
Tu auras donc l'instruction suivante :
Code:
.CommandText = sql

Si cela ne fonctionne pas, peux-tu essayer de réduire la 2me requête SQL ?
Par exemple, ne prends que le premier "SELECT..." et tu regardes ce que cela donne.
Je pense que l'erreur vient de la longueur de la variable "sql".

Bonne nuit
 

Dut

XLDnaute Nouveau
Re : CodeSQL trop long pour ma macro

Bonsoir Dut,

Peux-tu faire un autre essai en enlevant "Array" ?
Tu auras donc l'instruction suivante :
Code:
.CommandText = sql

Si cela ne fonctionne pas, peux-tu essayer de réduire la 2me requête SQL ?
Par exemple, ne prends que le premier "SELECT..." et tu regardes ce que cela donne.
Je pense que l'erreur vient de la longueur de la variable "sql".

Bonne nuit

Effectivement c'était bien ce qui paraissait être le problème... et grâce à toi c'est maintenant résolu !!
Merci beaucoup de ton aide. :)
@+

Dut
 

Discussions similaires

Statistiques des forums

Discussions
312 386
Messages
2 087 854
Membres
103 669
dernier inscrit
Anne Sicard