Comment écrire des instructions SQL « Passthrough » et des clauses « Range Where » dans Microsoft Great Plains Dexterity

Cet article explique comment écrire des instructions SQL passthrough et des clauses Range Where dans Microsoft Dynamics GP Dexterity.

S’applique à : Microsoft Dynamics GP
Numéro de la base de connaissances d’origine : 910129

Lorsque vous écrivez des instructions SQL passthrough et des clauses Range Where dans Dexterity, assurez-vous que le code Transact SQL est compatible avec tous les paramètres régionaux et les ordres de tri. Assurez-vous également que les valeurs de champ passées à Microsoft SQL Server sont gérées correctement. Vous pouvez utiliser les méthodes suivantes :

  • Si vous souhaitez passer une valeur de date à Microsoft SQL Server, utilisez la Dexterity sqlDate() fonction globale pour vous assurer que la date est au format AAAAMMJJ. Si vous utilisez la Dexterity str() fonction , le programme utilise le format MM/JJ/AAAA ou le format JJ/MM/AAAA, en fonction des paramètres régionaux. SQL Server n’accepte pas le format JJ/MM/AAAA, car ce format peut entraîner des erreurs intermittentes qui se produisent après le 12e jour de chaque mois.

    Remarque

    La sqlDate fonction n’ajoute pas les guillemets simples requis lorsque vous transmettez la date à SQL Server. Par conséquent, placez le résultat de la fonction entre guillemets simples.

  • Si vous souhaitez passer une valeur de chaîne à SQL Server, utilisez la Dexterity SQL_FormatStrings() fonction globale pour vous assurer que les chaînes sont encapsulées entre guillemets simples. S’il existe un seul guillemet dans la chaîne, vous devez ajouter un deuxième guillemet simple pour arrêter l’arrêt prématuré de la chaîne.

  • Lorsqu’une plage est sélectionnée entre les valeurs minimale et maximale d’un champ de chaîne, la valeur maximale utilisée par Dexterity peut ne pas être la valeur maximale correcte pour SQL Server. La valeur maximale correcte pour SQL Server dépend de l’ordre de tri et du classement des instance de SQL Server. À l’aide de la commande Dexterity fill, le programme remplit le champ en utilisant ASCII 255 pour la longueur de la chaîne. Toutefois, selon l’ordre de tri, ASCII 255 peut ne pas être la valeur la plus élevée. Par conséquent, la clause where ne retourne aucun résultat. La valeur maximale pour ASCII 255 est ]. (y en minuscules avec umlaut). Ce caractère est traité comme un Y par certains ordres de tri SQL. Cela signifie que la fin de la plage est définie sur Y dans MSSQL et que tout ce qui commence par le caractère Z n’est pas inclus dans la plage. Le code Dexterity suivant est un exemple qui utilise la system 9600 commande pour obtenir la valeur de caractère maximale pour l’ordre de tri d’un système. Le code utilise ensuite cette valeur pour générer une clause where.

    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');