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.-


La franja horaria es GMT +2. Ahora son las 16:19.

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