Cet article explique comment mettre à jour les requêtes de vue ou de script (Access) pour les rendre compatibles avec SQL dans Batigest Connect.
Description
Lors du passage de Batigest i7 à Batigest Connect, il est possible de rencontrer des erreurs du type :
- "ExecuteNonQuery : la propriété CommandText n'a pas été initilisée"
- "La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites."

Resolution
Les éléments suivants sont à vérifier dans vos requêtes :
Optimisation de l'interprétation Chaque requête saisie dans le moteur d'édition passe dans un premier temps par le moteur Access ensuite par SQL.
Pour l’exécuter directement dans SQL et éviter toute traduction éventuelle. Il vous est possible de rajouter une info /*SQL*/ en tout début ou à la toute fin de votre requête.
Les dates Access et SQL gèrent les dates de manière différente.
Dans une requête Access, les dates sont appelées et testées en les entourant de #.
EXEMPLE :
Requete = "SELECT sum(PrMO) As PRMODev, sum(PrMat) As PRMatDev, sum(DebMat) As DebMatDev FROM Devis WHERE CodeChantier='" & Chantier.Code & "' AND Devis.date BETWEEN #" & [Début de Période] & "# AND #" & [Fin de Période] & "# GROUP BY CodeChantier"
Deviendra
Requete = "SELECT sum(PrMO) As PRMODev, sum(PrMat) As PRMatDev, sum(DebMat) As DebMatDev FROM Devis WHERE CodeChantier='" & Chantier.Code & "' AND Devis.date BETWEEN '" & [Début de Période] & "' AND '" & [Fin de Période] & "' GROUP BY CodeChantier /*SQL*/"
Les jointures Access et SQL interprètent les jointures différemment. Il sera donc nécessaire, le cas échéant, de revoir les jointures des requêtes pour qu’elles respectent la charte SQL.
EXEMPLE :
Select Facture.Date, Factureligne.CodeElem, ElementDef.CompteVenteTva0, Factureligne.Compte
from Facture
inner join (FactureLigne INNER JOIN ElementDef ON FactureLigne.CodeElem = ElementDef.Code)
ON Facture.Code = FactureLigne.Code
WHERE FactureLigne.PvNet<>0 AND FactureLigne.Tva=0
AND Facture.Date BETWEEN #01/01/2010# And #31/12/2022#
Deviendra
Select Facture.Date, Factureligne.CodeElem, ElementDef.CompteVenteTva0, Factureligne.Compte
from Facture
inner join FactureLigne on Facture.Code = FactureLigne.Code
INNER JOIN ElementDef ON FactureLigne.CodeElem = ElementDef.Code
WHERE FactureLigne.PvNet<>0 AND FactureLigne.Tva=0
AND Facture.Date BETWEEN '01/01/2010' And '31/12/2022'
Le dictionnaire Le moteur SQL interprète directement certains mots.
Ainsi, faire appel au champ Devis.OR dans la liste des devis provoquera une erreur d'interprétation (SQL réserve le mot “OR” comme mot-clé.)
Il vous sera nécessaire d'indiquer au moteur que ce mot désigne une colonne de la table devis en l'encadrant de crochets.
EXEMPLE :
Devis.OR deviendra donc Devis.[OR]
Il est aussi possible d'encadrer le nom d'une table.