Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt beschreven hoe u Passthrough SQL-instructies en Range Where-clausules schrijft, in Microsoft Dynamics GP Dexterity.
Van toepassing op: Microsoft Dynamics GP
Oorspronkelijk KB-nummer: 910129
Wanneer u Passthrough SQL-instructies en Range Where-componenten schrijft in Dexterity, moet u ervoor zorgen dat de Transact SQL-code compatibel is met alle landinstellingen en sorteervolgordes. Zorg er ook voor dat veldwaarden die worden doorgegeven aan Microsoft SQL Server correct worden verwerkt. U kunt de volgende methoden gebruiken:
Als u een datumwaarde wilt doorgeven aan Microsoft SQL Server, gebruikt u de
Dexterity sqlDate()
globale functie om ervoor te zorgen dat de datum de indeling JJJJMMDD heeft. Als u deDexterity str()
functie gebruikt, gebruikt het programma de notatie MM/DD/JJJJ of DD/MM/JJJJ, afhankelijk van de landinstellingen. SQL Server accepteert de DD/MM/JJJJ-indeling niet, omdat deze indeling kan leiden tot onregelmatige fouten die optreden na de 12e dag van elke maand.Notitie
De
sqlDate
functie voegt niet de enkele aanhalingstekens toe die nodig zijn wanneer u de datum doorgeeft aan SQL Server. Plaats daarom het resultaat van de functie tussen enkele aanhalingstekens.Als u een tekenreekswaarde wilt doorgeven aan SQL Server, gebruikt u de
Dexterity SQL_FormatStrings()
globale functie om ervoor te zorgen dat tekenreeksen tussen enkele aanhalingstekens zijn verpakt. Als er één aanhalingsteken in de tekenreeks bestaat, moet u een tweede aanhalingsteken toevoegen om de voortijdige beëindiging van de tekenreeks te stoppen.Wanneer een bereik wordt geselecteerd tussen de minimum- en maximumwaarden in een tekenreeksveld, is de maximumwaarde die wordt gebruikt door Dexterity mogelijk niet de juiste maximumwaarde voor SQL Server. De correcte maximumwaarde voor SQL Server is afhankelijk van de sorteervolgorde en de collation van de instance van SQL Server. Met de opdracht Dexterity fill vult het programma het veld met behulp van ASCII 255 voor de lengte van de tekenreeks. Afhankelijk van de sorteervolgorde is ASCII 255 mogelijk niet de hoogste waarde. De where-component retourneert dus geen resultaten. De maximumwaarde voor ASCII 255 is ̈ (kleine letter y met umlaut). Dit teken wordt behandeld als een Y door sommige SQL-sorteervolgordes. Dit betekent dat het einde van het bereik is ingesteld op Y in MSSQL en dat alles wat begint met het teken Z niet is opgenomen in het bereik. De volgende Dexterity-code is een voorbeeld waarin de
system 9600
opdracht wordt gebruikt om de maximale tekenwaarde voor de sorteervolgorde van een systeem op te halen. De code gebruikt deze waarde vervolgens om een where-component te bouwen.local string l_MaxChar; local integerl_Result,l_Length; system 9600, table SOP_HDR_WORK, l_MaxChar, l_Result; if empty('End Location Code') or filled('End Location Code') then fill 'End Location Code'; l_Length = length('End Location Code'); clear 'End Location Code'; 'End Location Code' = pad('End Location Code', TRAILING, l_MaxChar, l_Length); end if; range table SOP_HDR_WORK where physicalname('Location Code' of table SOP_HDR_WORK) + CH_SPACE + CH_GREATERTHAN + CH_EQUAL + CH_SPACE + SQL_FormatStrings('Start Location Code') + CH_SPACE + SQL_AND + CH_SPACE + physicalname('Location Code' of table SOP_HDR_WORK) + CH_SPACE + CH_LESSTHAN + CH_EQUAL + CH_SPACE + SQL_FormatStrings('End Location Code');