Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Obtener una ruta en Red (https://www.cobolforo.es/showthread.php?t=92)

Roger 11 de abril de 2015 01:49

Obtener una ruta en Red
 
Amigos del foro
Cual es codigo para saber la ruta de red.
Deseo saber por programa que me indique cuando estoy ejecutando cual es mi ruta red
ejemplo \\Roger\d\VET-SIS\Debug\

Esto para que funcione en multiusario sin necesidad de poner la ruta en los archivo
o que sugerencia me dan.

Código COBOL:
  1. SELECT AGENDA ASSIGN TO " \\Roger\d\VET-SIS\Debug\ AGENDA.DAT" ORGANIZATION INDEXED
  2.            ACCESS MODE IS DYNAMIC
  3.            RECORD   KEY IS  AGENDA-KEY
  4.            LOCK MODE IS AUTOMATIC WITH LOCK ON RECORD
  5.              FILE STATUS IS FS-10.

esto es lo que hacia en los archivo.

Josber 11 de abril de 2015 13:19

No sé a que te refieres exactamente, yo tengo puesto en todos los ficheros, una rutina que coge de un fichero de principal de control, la ruta de datos, y hace el montaje de la variable con el nombre del fichero + número de empresa + más la ruta de datos, todo metido en un fichero .cpy, que incluyo en el evento opened del form con un #INCLUDE

Código COBOL:
  1. 000001*        
  2. 000002* MONTAR VARIABLE DE CODIGOS de BANCOS
  3. 000003*
  4. 000010       MOVE 0 TO TAMA.
  5. 000020       MOVE TAMANO TO TAMA.
  6. 000030       INITIALIZE FILE33.
  7. 000040       MOVE RUTA TO FILE33.
  8. 000050       STRING WEMP        DELIMITED BY SIZE INTO FILE33 WITH POINTER TAMA.
  9. 000060       STRING "_0033.JBL" DELIMITED BY SIZE INTO FILE33 WITH POINTER TAMA.
  10. 000999

En RUTA, tengo definido la carpeta donde se encuentran los archivos, me da lo mismo que sea de red que local, y en TAMANO, se guarda la longitud (FUNCTION STORED-CHAR-LENGTH (RUTA)) de la variable RUTA, luego todo es cuestión de hacer el montaje, y la ruta de datos, siempre la sé porque está guardada en RUTA.

No sé si es esto lo que quieres, si no es así, explicalo de otra forma a ver por donde van los tiros.

Un saludo.-

Roger 11 de abril de 2015 17:33

Gracias por responder JOSBER
Inicialmente tengo un archivo donde pongo las rutas, datos de empresa etc
pero estos datos se ingresan por teclado, necesita algo similar al "cmfolder" donde me dice la direccion en este caso la ruta de red.

Te comento comercializo un software que lo tengo en un instalador donde automaticamente hace la instalacion del power, ocx , fonts etc. todo esto en un disco CD-R que lo compran a un distribuidor, como te daras cuenta yo no se el usuario donde lo instalara en C:, D:
por el "cmfolder" detecto la direccion y lo envio al archivo hasta ahi todo bien en monousuario
cuando esta en red esta direccion tendria que cambiar por la ruta red solo necesito detectar la ruta para incrustar en el archivo en forma automatica.
Código COBOL:
  1.            SELECT AGENDA ASSIGN TO " \\Roger\d\VET-SIS\Debug\ AGENDA.DAT" ORGANIZATION INDEXED
  2.            ACCESS MODE IS DYNAMIC
  3.            RECORD   KEY IS  AGENDA-KEY
  4.            LOCK MODE IS AUTOMATIC WITH LOCK ON RECORD
  5.              FILE STATUS IS FS-10.


en sintesis como obtengo esta ruta "\\Roger\d\VET-SIS\Debug\" algun comando.
:busca:

Kuk 11 de abril de 2015 22:13

Esa ruta no la puedes obtener amigo Roger, porque depende de la configuracion de la red.

Lo que debes hacer es lo que tengo hecho yo en un programa, modos de ejecucion Servidor y cliente. Luego los que se ejecutan en modo cliente, son los que deben ser "conectados" al servidor. Ahi se necesita un dialogo de seleccion de carpeta, donde se navegara hasta la ruta del servidor en red y dicha ruta se guardara en un archivio local.

La separacion de archivos local y en red se haria en 2 variables correspondientes, en GLOBAL EXTERNAL que se cargarian en el evento Opened y se compartirian en toda la aplicacion.

Josber 11 de abril de 2015 22:37

Es más o menos lo que yo tengo KUK, un fichero donde se guarda la ruta, una variable para si es local y otra variable para si es en red. Roger, yo creo que no hay otra manera de hacerlo, a no ser que con el instalador, el usuario indique la ruta, la grabes en una clave en el registro, pero el usuario debe de indicar en el instalador la ruta tanto local como de red, y de ahí la leas con tu programa.


Un saludo.-

Roger 11 de abril de 2015 23:04

Amigos
Tengo una idea en el anterior foro vi que puedo usar las Apis de WINDOWS "GetComputerName"
y saber el nombre del equipo pero no se la sintaxis.
Ruta "\\Roger\d\VET-SIS\Debug\" donde "\\roger\" es el nombre del equipo se puede saber por cmd con el comando HOSTAME y la segunda parte "\d\VET-SIS\Debug\" lo puedo obtener por
el cmfolder que me envia "d:/VET-SIS/Debug/" reemplazo "\" por "/" y elimino ":"
luego usando String junto toda la cadena.

Si tienen los codigos de ese api me facilitan la cadena solo bastaria poner la instruccion en el opened de form y automaticamente estaria detectando la ruta red.
:yoquese:

Rapinto 12 de abril de 2015 00:33

Roger,

Não percebi bem. Mas se é a api ´GetComputerName,

Código COBOL:
  1.  @OPTIONS NOALPHA
  2. *****************************************************************
  3. *  Copyright (c) 2000 R.P.S.
  4. *
  5. *  Last Modified: 28 Jul 2000
  6. *****************************************************************
  7.  IDENTIFICATION DIVISION.
  8.  PROGRAM-ID.    MACHINE.  
  9.  AUTHOR.        Rui Pinto - Jul 2000.
  10. *-----------------------------------------------------------------
  11.  ENVIRONMENT DIVISION.
  12.  CONFIGURATION SECTION.
  13.  SPECIAL-NAMES.
  14.  INPUT-OUTPUT SECTION.
  15.  FILE-CONTROL.
  16. *-----------------------------------------------------------------
  17.  DATA DIVISION.
  18.  FILE SECTION.
  19.  WORKING-STORAGE SECTION.
  20.  01  COMPNAME                  PIC X(032)             VALUE SPACE.
  21.  01  LENCOMPNAME               PIC S9(009)    COMP-5  VALUE ZERO.
  22.  01  RESULT                    PIC S9(009)    COMP-5  VALUE ZERO.
  23.  
  24.  LINKAGE SECTION.
  25. *----------------- Parameters for CBL_ routines ------------------
  26.  01  COMPUTERNAME              PIC X(032).
  27. *--------------- End Parameters for CBL_ routines -----------------
  28.  PROCEDURE DIVISION USING COMPUTERNAME.
  29.  MAIN SECTION.
  30.  MAIN-00.
  31. *>> Initialize variables.
  32.      MOVE 32 TO LENCOMPNAME.
  33.      CALL "GetComputerNameA" WITH  STDCALL LINKAGE USING
  34.                         COMPNAME
  35.                         LENCOMPNAME
  36.                      RETURNING RESULT.
  37.      MOVE COMPNAME   TO COMPUTERNAME.
  38.  MAIN-99.
  39.  END PROGRAM MACHINE.

Saludos,
Rui Pinto

Rapinto 12 de abril de 2015 01:27

2 Archivos Adjunto(s)
Roger,

Fiz um pequeno OCX que podes incluir na tua aplicação.
Não testei muito bem (pode ter bugs)

Anexo um exemplo em PowerCobol9

A instrução é muito simples:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01    caminho           PIC X(256).
  5.  01    hwnd              PIC S9(9)  COMP-5.
  6.  PROCEDURE       DIVISION.
  7.     MOVE HWND OF POW-SELF TO HWND.
  8.     INVOKE apppath1 "AppPath" USING hwnd RETURNING caminho.
  9.  
  10.     MOVE caminho TO "CAPTION" OF CMSTATIC1.    

Experimenta e diz-me se funcionou para o que pretendias. Funciona para rede ou local.
Se tiveres dúvidas, diz-me. Dá para rede ou maquina local.

Saludos,
Rui Pintop

Roger 12 de abril de 2015 02:02

Amigo RUI
Tus codigos estan buenos pero me equivoque debi poner "Gethostname"
y es lo que necesito.

Los mismos datos lo obtengo de
Código COBOL:
  1.  MOVE "path" OF CmFolder1 TO CAPTION OF CMSTATIC2.

solo me falta el nombre de la maquina.

:malo:

Josber 12 de abril de 2015 11:24

Roger, en el mensaje que puse saber las carpetas de Windows, en el código tienes como sacar el nombre de la máquina.

Un saludo.-

Rapinto 12 de abril de 2015 15:19

Roger,

Desculpa-me mas então não entendo o que pretendes.

No post acima, enviei a rotina para obter o nome da máquina local.
(GetComputerName)
Em seguida, entendi que poderias querer o caminho a partir do qual executaste o EXE.
(ocx para obter Caminho completo do EXE em execução).

Não entendo o que pretendes fazer.

Cuidado com o "path" OF CmFolder1. Esta instrução dá-te "Default PATH" e não o caminho do Executável.
Isto é, se mudares o "path" of cmfolder1 em run-time para outro caminho, deixas de saber qual o caminho do executável.

Saludos,
Rui

Roger 12 de abril de 2015 15:42

Rui
Si en cmfolder tengo que tener cuidado con el path , esta ruta lo tomo al iniciar el proyecto en el opened y lo envio a un archivo .

Josber eso es lo que buscaba el nombre del equipo "GetComputerNameA" estoy simplificando tus codigos creo con eso ya tengo armado la ruta red.
:apl:

Roger 1 de mayo de 2015 03:33

Josber
Cuando pego tus codigos a un boton
Código COBOL:
  1. 01 PATH-ARCHIVO PIC X(400).
  2.  01 RUTA PIC X(400).
  3. * ---- VARIABLE PARA EL NOMBRE DEL ORDENADOR
  4. *
  5.  01  RESULT             PIC S9(009) COMP-5 IS GLOBAL EXTERNAL.
  6.  01  COMPUTERNAME       PIC X(032)         IS GLOBAL EXTERNAL.
  7.  01  COMPNAME           PIC X(032)     VALUE SPACE.
  8.  01  LENCOMPNAME            PIC S9(009) COMP-5.
  9. *
  10. *
  11.  01  POW-PCMLIST            OBJECT REFERENCE POW-CLISTITEM.
  12.  01  WK-IDX             PIC S9(9) COMP-5 VALUE 0.
  13. *
  14. *
  15.  01  HWINDOW            PIC S9(009)     COMP-5 VALUE ZERO.
  16.  01  FOLDER             PIC S9(009)     COMP-5 VALUE 38.
  17. *
  18.  01  WDSPTITLE          PIC X(040).
  19.  01  WNULL          PIC X(001)  VALUE LOW-VALUES.
  20. *
  21.  01  PIDL           PIC S9(009)     COMP-5 VALUE ZERO.
  22.  01  PSZPATH            PIC X(512)  VALUE SPACE.
  23.  01  SELFOLDER          PIC X(512)  VALUE SPACE.
  24.  PROCEDURE DIVISION.
  25. *
  26. * ----- * SACAMOS EL NOMBRE DEL ORDENADOR
  27. *
  28.        MOVE 32 TO LENCOMPNAME.
  29. *  
  30.        CALL "GetComputerNameA" WITH STDCALL LINKAGE
  31.             USING
  32.                BY REFERENCE COMPNAME
  33.            BY REFERENCE LENCOMPNAME
  34.             RETURNING RESULT
  35.        END-CALL.
  36.    
  37.      INSPECT COMPNAME REPLACING ALL LOW-VALUES BY SPACE.
  38.        CANCEL "GetComputerNameA".

me bota error LNK2001:unresolved external symbol _GETCOMPUTERNAMEA@8
Funciones exe:Fatal error LNK 1120: 1 unresolved externals

inserte en el proyecto advapi32.lib ¿Cual es el problema? :perdon:

Josber 1 de mayo de 2015 09:35

Creo que te falta poner la opción ALPHAL(WORD)

Un saludo

Roger 1 de mayo de 2015 16:38

Josber
He revisado tu form y no encuentro donde esta ALPHAL(WORD) serias tan amable de "desasnar" a este usuario.:)

Rapinto 1 de mayo de 2015 19:41

1 Archivos Adjunto(s)
Roger,

Ve a imagem anexa.

Saludos,
Rui

Roger 1 de mayo de 2015 22:40

Rui y Josber
Cada dia me ilustro mas estaba recontra escondido era lo que faltaba.

Añadido despues de 20 horas 36 minutos
Rui
Al final despues de tanto trastear en una red local logre que sea automatico el envio de la ruta y fue con el ocx de rui :hi:


La franja horaria es GMT +2. Ahora son las 17:04.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.