2009-09-09 5 views
1

Je suis nouveau dans le monde d'UniObjects car j'ai été dans .NET depuis ses débuts. Après avoir construit une application simple pour retourner la liste de sélection d'une instruction UniCommand, j'ai remarqué qu'il y a des différences majeures dans la façon dont UniData et UniObjects analysent les déclarations UniCommand. D'après ce que j'ai trouvé, il semble que ce soit des différences dans les saveurs de PICK utilisées. Ce que je demande est pour les autres programmeurs UniObjects (UniVerse ou UniData) qui connaissent les différences ou connaissent les commandes qui peuvent être exécutées pour les lister ici. Je pose cette question parce que la documentation de ce qui peut et ne peut pas être une commande est très difficile à trouver.Différences UniCommand pour UniData

Voici un exemple: (à la fois les mêmes résultats de la même source)

Ce que nous entrerions dans UniData: (erreur d'analyse si on leur donne en UniCommand)

  • SELECT COULEURS = « BLU ] »

Que faut-il en UniCommand de indiquée UniObject:

  • SÉLECTIONNER LES COULEURS AVEC @ID COMME "BLU ..."

Notez que le caractère joker d'UniData est "]" (crochet) où UniCommand est le "..." (elipsis). Notez également comment UniData accepte l'opérateur d'égalité et comment UniCommand utilise l'opérateur LIKE et WITH.

De même, si quelqu'un a un lien vers un document sur toutes les commandes disponibles, il peut également le publier ici.

+0

Si quelqu'un cherche UniObjects aller http://stackoverflow.com/questions/1126574/where-to-get-uniobjects-for-net – thames

+0

Si quelqu'un est à la recherche d'autres UniData accéder aux produits pour .NET go http://stackoverflow.com/questions/831019/unidata-data-access-products-for-net – thames

+0

Re commentaires wiki; il n'y a pas de fonctionnalité "Annuler le wiki". C'est unidirectionnel seulement. –

Répondre

2

Le problème est que votre environnement Unidata est configuré pour analyser les commandes avec l'analyseur PICK, mais l'objet UniCommand exécute l'analyseur natif d'Unidata. (La syntaxe LIKE et ... provient du mode natif d'Unidata, modélisé à partir de Prime Information.)

J'ai recherché une propriété sur UniSession ou UniCommand qui changerait l'analyseur utilisé pour la méthode Execute, mais didn ' t en trouver un. Cependant, la documentation d'UniCommand indique qu'elle est équivalente à l'instruction de base EXECUTE. Cela, et quelques commandes UDT.OPTIONS, peuvent ouvrir la porte à une solution de contournement qui vous permettra d'utiliser la syntaxe de commande PICK même si UniObjects ne la supporte pas directement.

La commande EXECUTE d'Unidata peut prendre plusieurs commandes, séparées par des @AM, et les exécuter les unes après les autres, retournant seulement après avoir été toutes traitées. (C'est comme un mini-proc.) Donc, construisez votre commande avec au moins une commande "UDT.OPTIONS 2 ON" dans l'attribut 1, suivie de toutes les autres dont vous pourriez avoir besoin, et enfin votre commande PICK désirée dans la dernière attribut. Envoyez ensuite tout le paquet en même temps via la méthode Execute de votre objet UniCommand.


Les docs pour UDT.OPTIONS 2 est la suivante:

Determines the parser the system uses to interpret UniQuery commands. 
    ON System uses the Pick® parser. 
    OFF System uses the UniData parser. 

Il y a plusieurs autres UDT.OPTIONS liées à la compatibilité PICK. Regardez dans les documents, en particulier udto.pdf, dans la section "Compatibilité Pick®".


Cela dit, quand je l'ai UniObjects utiliser, je ne l'ai utilisé pour appeler les sous-routines de base, et gérer tout le reste dans les routines côté serveur.

EDIT: échantillon de code C#

UniSession s = UniObjects.OpenSession("machine", "user", "password", "/path/to/account", "udcs"); 
UniCommand c = s.CreateUniCommand(); 
c.Command = "UDT.OPTIONS 2 ON" + "\xfe" + "SELECT COLORS = \"BLU]\""; 
c.Execute(); 

Le "\ de XFE" est la marque d'attribut. (C'est CHAR (254) dans Pick-speak.) J'espère que cela aide.

+0

Je ne semble pas avoir le fichier udto.pdf. Est-ce dans les Outils Client UniData ou est-ce téléchargé sur le Web? Ce que vous dites ne fait que depuis et je ne pouvais pas non plus trouver un moyen d'utiliser UniObjects pour changer l'analyseur. Nous ne nous éloignons pas d'UniData mais de la vache sacrée qui parle de verrouillage car la documentation est difficile à trouver. – thames

+0

J'ai parcouru les Guides de Référence UniBasic de UniData à partir de 1993, mais leur syntaxe est celle que nous utilisons. (D'après mes connaissances et d'après ce que j'ai demandé autour) – thames

+0

BTW quand j'utilise @ AM UniObjects dit que ce n'est pas un verbe. Aussi, quand je vais dans le terminal à UniData, il dit aussi la même chose. Peut-être que ce n'est pas la syntaxe correcte? Je ne le vois pas non plus dans le livre de référence mentionné plus haut. – thames

2

Les différences que vous décrivez sont des différences dans ECLTYPE dans UniData qui est complètement indépendant de UniObjects. Si vous définissez votre ECLTYPE de compte UniData à « U », il acceptera la syntaxe:

SELECT COLORS WITH @ID LIKE "BLU..." 

Si vous définissez le ECLTYPE à « P », il acceptera la syntaxe:

SELECT COLORS = "BLU]" 

Les UniObjects pour. NET documentation précise:

"Sur les systèmes UniData, ECLTYPE U est mieux que vous pouvez rencontrer des variations avec d'autres ECLTYPE ou UDT.OPTIONS paramètres.".

On ne sait pas à moi de la documentation si UniCommands sont toujours exécutées à l'aide ECLTYPE "U" ou s'il y a un paramètre pour vous permettre de configurer le type d'analyseur. Vous pouvez essayer d'exécuter une commande ECLTYPE "P" à partir de votre session UniObjects, puis voir si les commandes UniCommands ultérieures avec la syntaxe "P" sont analysées en tant que telles.

+0

J'ai essayé d'exécuter ECLTYPE "P" en ligne avec SELECT COLORS = "BLU" "ainsi que de séparer les instructions sans trop de chance. UniObjects doit avoir son propre analyseur? – thames

1

La commande ECLTYPE "U" fonctionne avec une session interactive de TCL, mais je peux voir à quel point il serait difficile de la définir de façon définitive à partir d'UniObjects.

Un bouche-à-bouche astuce Unidata qui est utile de savoir est des verbes minuscules toujours execute comme ECLTYPE U. Vous obtiendrez le comportement que vous cherchez, quel que soit le goût du compte. Donc, cela fonctionne bien:

select COLORS WITH @ID LIKE "BLU..." 
+0

Je veux toujours exécuter comme ECLTYPE à "P", c'est-à-dire sélectionner des couleurs avec @id comme "BLU" " – thames

Questions connexes