PDA

Ver la Versión Completa : [Sintaxis] Instrucción INSPECT


Josber
6 de abril de 2016, 20:04
Tengo la siguiente la variable WS-SQL, que vale

SELECT * FROM CLIENTES WHERE CLICOD BETWEEN ...

Como lo único que sé seguro que hay en es variable es la palabra CLIENTES, quiero asegurarlo para que no me de error el programa y utilizo la siguiente instrucción:


INSPECT WS-SQL TALLYING CONTA FOR LEADING "CLIENTES" BEFORE INITIAL "S".


Pero la variable CONTA, siempre vale 0, como es una instrucción que hace mucho que no uso, no le pillo el punto :o :o , ¿alguien sabe qué estoy haciendo mal?, he probado poniendo y quitando la sentencia BEFORE INITIAL ... y cambiándola por AFTER INITIAL ..., pero hace lo mismo e internet, no me aclara mucho.

Muchas gracias.

Kuk
6 de abril de 2016, 20:39
BEFORE INITIAL "S"
¿Por qué le pones "S"? Es por eso que no lo encuentra ;)

Hrmcobol
6 de abril de 2016, 20:40
Hola Amigo, Esto uso Yo


01 HMS.
02 HM-TEXTO PIC X(300).
02 HM-CPO PIC 9(006).


MOVE SPACES TO HM-TEXTO
MOVE ZEROS TO HM-CPO
MOVE "Text" OF STX-MOBRA TO HM-TEXTO
INSPECT HM-TEXTO TALLYING HM-CPO FOR ALL ";".
INSPECT HM-TEXTO TALLYING HM-CPO FOR ALL '"'.
INSPECT HM-TEXTO TALLYING HM-CPO FOR ALL "'".
IF HM-CPO NOT = ZEROS
INVOKE POW-SELF "DisplayMessage"

Rapinto
7 de abril de 2016, 00:28
Josber,

Do manual "Programers Guide":

An initial value must be assigned to identifier-2 prior to execution of the INSPECT statement.

O identifier-2 é o teu CONTA.

Experimenta inicializar o campo conta com 0 ou com 1.


e também :

If identifier-1, identifier-3 occupies the same storage area as identifier-2, the validity of the result of execution of the INSPECT statement is undefined.

O identifier-3 é o teu "CLIENTES". O identifier-1 é o teu WS-SQL
Tens que verificar como estão definidos os campos.
Cria um campo
01 CLISTR PIC X(08) VALUE "CLIENTES" e faz o inspect assim:


INITIALIZE CONTA.
INSPECT WS_SQL TALLYING CONTA FOR LEADING CLISTR BEFORE INITIAL "S"

Espero que ajude.
Rui

Josber
7 de abril de 2016, 09:26
¿Por qué le pones "S"? Es por eso que no lo encuentra

Kuk, eso es para que empiece desde el principio, lo primero que hay siempre será una S, y que encuanto encuentre la cadena, deje de inspeccionar.

Rapinto, Tampoco funciona así como indicas tú, sigue devolviendo 0 en CONTA

Al final he cambiado LEADING por ALL como indica Hrmcobol, y ya funciona perfectamente.

Como curiosidad, el verbo INSPECT, no tiene un final de instrucción del tipo END-INSPECT, como pasa con la mayoría ...

Muchas gracias a todos.