Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL v3 (V3L10, Win32) (https://www.cobolforo.es/forumdisplay.php?f=5)
-   -   [Sintaxis] Leer archivos Cobol desde VB6 (https://www.cobolforo.es/showthread.php?t=797)

drvedia1981 24 de enero de 2018 00:51

Leer archivos Cobol desde VB6
 
Hola a todos, sera posible leer un archivo cobol desde una aplicación vb6 el archivo cobol es asi
esta en power v3 en una aplicacion que hice hace un tiempo.

Código COBOL:
  1. 000001 FD ARTICULO GLOBAL EXTERNAL.
  2. 000002 01 REG-ARTICULO.
  3. 000003    02 ART-CLAVE-PRIN.
  4. 000004       05 ARTCODIGO         PIC 9(5).
  5. 000005    02 ART-CLAVE-BARRA.
  6. 000006       05 ARTBARRA          PIC 9(13).
  7. 000007    02 ART-CLAVE-NOMBRE.    
  8. 000008       05 ARTNOMBRE         PIC X(35).
  9. 000009    02 ARTTPV               PIC X(20).
  10. 000010    02 ARTIVA               PIC 9(4).
  11. 000011    02 ART-CLAVE-PROVEEDOR.
  12. 000012       05 ARTPROVEEDOR      PIC 9(5).
  13. 000013    02 ART-CLAVE-RUBRO.
  14. 000014       05 ARTRUBRO          PIC 9(3).
  15. 000015    02 ARTENVASE            PIC 9(5).
  16. 000016    02 ARTCOSTO             PIC 9(7)V99.
  17. 000017    02 ARTMINORISTA         PIC 9(7)V99.
  18. 000018    02 ARTMAYORISTA         PIC 9(7)V99.
  19. 000019    02 ARTDESCUENTO         PIC 9(2).
  20. 000020    02 ARTCANTIDAD          PIC 9(2).
  21. 000021    02 ARTMINIMO            PIC 9(4).
  22. 000022    02 ARTGANANCIA1         PIC 9(2).
  23. 000023    02 ARTGANANCIA2         PIC 9(2).
  24. 000024    02 ARTSTOCK OCCURS 4    PIC S9(6)V99.
  25. 000025    02 ARTVENDIDO OCCURS 31 PIC S9(7)V99.
  26. 000026    02 ARTCANTIDADVEND      PIC 9(6)V99.
  27. 000027    02 ARTCOMPRA            PIC 9(6).
  28. 000028    02 ARTFOTOGRAFIA        PIC X(128).

Solo quiero buscar por ARTBARRA y que me devuelva el ARTMINORISTA no lo puedo hacer en cobol porque usa el puerto serie y en power nunca pude usar un ocx que funcione como quiero, alguna pista de como lo puedo hacer .
Muchas gracias Saludos

---------- Post añadido : 00:51 ---------- Post anterior : 00:49 ----------

Código COBOL:
  1. 000001     SELECT ARTICULO   ASSIGN TO "E:\FSC\ARCHIVOS\ARARTIC.DAT"
  2. 000002           ORGANIZATION INDEXED
  3. 000003           ACCESS DYNAMIC
  4. 000004           RECORD KEY IS ART-CLAVE-PRIN
  5. 000005           ALTERNATE RECORD IS ART-CLAVE-BARRA
  6. 000006           ALTERNATE RECORD IS ART-CLAVE-NOMBRE    WITH DUPLICATES
  7. 000007           ALTERNATE RECORD IS ART-CLAVE-PROVEEDOR WITH DUPLICATES
  8. 000008           ALTERNATE RECORD IS ART-CLAVE-RUBRO     WITH DUPLICATES
  9. 000009           FILE STATUS ART-STATUS.

Joseg 24 de enero de 2018 17:36

Cita:

Citación del post de drvedia1981 (Mensaje 3895)
Hola a todos, sera posible leer un archivo cobol desde una aplicación vb6 el archivo cobol es asi
esta en power v3 en una aplicacion que hice hace un tiempo.

Código COBOL:
  1. 000001 FD ARTICULO GLOBAL EXTERNAL.
  2. 000002 01 REG-ARTICULO.
  3. 000003    02 ART-CLAVE-PRIN.
  4. 000004       05 ARTCODIGO         PIC 9(5).
  5. 000005    02 ART-CLAVE-BARRA.
  6. 000006       05 ARTBARRA          PIC 9(13).
  7. 000007    02 ART-CLAVE-NOMBRE.    
  8. 000008       05 ARTNOMBRE         PIC X(35).
  9. 000009    02 ARTTPV               PIC X(20).
  10. 000010    02 ARTIVA               PIC 9(4).
  11. 000011    02 ART-CLAVE-PROVEEDOR.
  12. 000012       05 ARTPROVEEDOR      PIC 9(5).
  13. 000013    02 ART-CLAVE-RUBRO.
  14. 000014       05 ARTRUBRO          PIC 9(3).
  15. 000015    02 ARTENVASE            PIC 9(5).
  16. 000016    02 ARTCOSTO             PIC 9(7)V99.
  17. 000017    02 ARTMINORISTA         PIC 9(7)V99.
  18. 000018    02 ARTMAYORISTA         PIC 9(7)V99.
  19. 000019    02 ARTDESCUENTO         PIC 9(2).
  20. 000020    02 ARTCANTIDAD          PIC 9(2).
  21. 000021    02 ARTMINIMO            PIC 9(4).
  22. 000022    02 ARTGANANCIA1         PIC 9(2).
  23. 000023    02 ARTGANANCIA2         PIC 9(2).
  24. 000024    02 ARTSTOCK OCCURS 4    PIC S9(6)V99.
  25. 000025    02 ARTVENDIDO OCCURS 31 PIC S9(7)V99.
  26. 000026    02 ARTCANTIDADVEND      PIC 9(6)V99.
  27. 000027    02 ARTCOMPRA            PIC 9(6).
  28. 000028    02 ARTFOTOGRAFIA        PIC X(128).

Solo quiero buscar por ARTBARRA y que me devuelva el ARTMINORISTA no lo puedo hacer en cobol porque usa el puerto serie y en power nunca pude usar un ocx que funcione como quiero, alguna pista de como lo puedo hacer .
Muchas gracias Saludos

---------- Post añadido : 00:51 ---------- Post anterior : 00:49 ----------

Código COBOL:
  1. 000001     SELECT ARTICULO   ASSIGN TO "E:\FSC\ARCHIVOS\ARARTIC.DAT"
  2. 000002           ORGANIZATION INDEXED
  3. 000003           ACCESS DYNAMIC
  4. 000004           RECORD KEY IS ART-CLAVE-PRIN
  5. 000005           ALTERNATE RECORD IS ART-CLAVE-BARRA
  6. 000006           ALTERNATE RECORD IS ART-CLAVE-NOMBRE    WITH DUPLICATES
  7. 000007           ALTERNATE RECORD IS ART-CLAVE-PROVEEDOR WITH DUPLICATES
  8. 000008           ALTERNATE RECORD IS ART-CLAVE-RUBRO     WITH DUPLICATES
  9. 000009           FILE STATUS ART-STATUS.


Não dá para criar um ficheiro LINE-SEQUENTIAL temporário só com a informação a processar?

Rapinto 29 de enero de 2018 18:48

Para testar, precisava dum exemplo do ficheiro com alguns dados.
Posso tentar fazer em PowerCobol 9 uma DLL para utilizar em VB6.
Sem o ficheiro, não consigo fazer nada.
Un saludo,
Rui Pinto

Kuk 29 de enero de 2018 20:55

drvedia1981, puedes crear un programa "normal", es decir en modo Batch sin GUI, y compilarlo vía línea de comandos con el compilador que viene con el PowerCOBOL V3L10 y linkearlo a una DLL.

Tendrás que mirar las opciones, pero no es nada complicado.

Mira crea un programa cualquiera con un DISPLAY y complílalo con este script CMD/BAT:

Código:

C:\ruta_powercobol_3\cobol32.exe -WC"MAIN,MESSAGE,FLAG(I),SOURCE" C:\ruta_de_tu_programa\PROGRAMA.COB > SYSOUT.txt
C:\ruta_powercobol_3\link.exe C:\ruta_de_tu_programa\PROGRAMA.OBJ C:\ruta_powercobol_3\*.lib >> SYSOUT.txt
pause


drvedia1981 30 de enero de 2018 20:25

Hola Kuk gracias por la ayuda , no entiendo como seria, yo creo un programa sin GUI y lo compilo con el script y eso que me genera una .dll ? después esa dll la uso en vb ? como le pasaría parámetros ?
Saludos

---------- Post añadido : 20:18 ---------- Post anterior : 20:11 ----------

Hola Rapinto te dejo el link del archivo cobol
Saludos gracias
MEGA

---------- Post añadido : 20:25 ---------- Post anterior : 20:18 ----------

Link definicion del archivo
MEGA

Kuk 30 de enero de 2018 21:06

drvedia1981, eso es. Los parámetros los defines en LINKAGE de tu programa COBOL. Para importar una DLL en VB hay un montón de ejemplos en Google, sería como una DLL cualquiera.

Para la opción de hacer LINK en una DLL es la opción /DLL

Para la lista completa del LINK mira aquí: Linker Options

drvedia1981 30 de enero de 2018 21:36

Hola Kuk

Arme esto y con el script que me dijiste me genero un .exe para generar la dll como seria, esta bien el codigo como lo ves Gracias Saludos

Código COBOL:
  1. 000010 IDENTIFICATION DIVISION.
  2. 000020 PROGRAM-ID.   DLL.
  3. 000030 ENVIRONMENT DIVISION.
  4. 000031 CONFIGURATION SECTION.
  5. 000042
  6. 000043 INPUT-OUTPUT  SECTION.
  7. 000044 FILE-CONTROL.
  8. 000055     SELECT ARTICULO   ASSIGN TO "C:\FSC\ARCHIVOS\ARARTIC.DAT"
  9. 000056           ORGANIZATION INDEXED
  10. 000057           ACCESS DYNAMIC
  11. 000058           RECORD KEY IS ART-CLAVE-PRIN
  12. 000059           ALTERNATE RECORD IS ART-CLAVE-BARRA
  13. 000060           ALTERNATE RECORD IS ART-CLAVE-NOMBRE    WITH DUPLICATES
  14. 000061           ALTERNATE RECORD IS ART-CLAVE-PROVEEDOR WITH DUPLICATES
  15. 000062           ALTERNATE RECORD IS ART-CLAVE-RUBRO     WITH DUPLICATES
  16. 000063           FILE STATUS ART-STATUS.
  17. 000064
  18. 000065 DATA DIVISION.
  19. 000066 FILE SECTION.
  20. 000067 FD ARTICULO GLOBAL EXTERNAL.
  21. 000068 01 REG-ARTICULO.
  22. 000069    02 ART-CLAVE-PRIN.
  23. 000070       05 ARTCODIGO         PIC 9(5).
  24. 000071    02 ART-CLAVE-BARRA.
  25. 000072       05 ARTBARRA          PIC 9(13).
  26. 000073    02 ART-CLAVE-NOMBRE.    
  27. 000074       05 ARTNOMBRE         PIC X(35).
  28. 000075    02 ARTTPV               PIC X(20).
  29. 000076    02 ARTIVA               PIC 9(4).
  30. 000077    02 ART-CLAVE-PROVEEDOR.
  31. 000078       05 ARTPROVEEDOR      PIC 9(5).
  32. 000079    02 ART-CLAVE-RUBRO.
  33. 000080       05 ARTRUBRO          PIC 9(3).
  34. 000081    02 ARTENVASE            PIC 9(5).
  35. 000082    02 ARTCOSTO             PIC 9(7)V99.
  36. 000083    02 ARTMINORISTA         PIC 9(7)V99.
  37. 000084    02 ARTMAYORISTA         PIC 9(7)V99.
  38. 000085    02 ARTDESCUENTO         PIC 9(2).
  39. 000086    02 ARTCANTIDAD          PIC 9(2).
  40. 000087    02 ARTMINIMO            PIC 9(4).
  41. 000088    02 ARTGANANCIA1         PIC 9(2).
  42. 000089    02 ARTGANANCIA2         PIC 9(2).
  43. 000090    02 ARTSTOCK OCCURS 4    PIC S9(6)V99.
  44. 000091    02 ARTVENDIDO OCCURS 31 PIC S9(7)V99.
  45. 000092    02 ARTCANTIDADVEND      PIC 9(6)V99.
  46. 000093    02 ARTCOMPRA            PIC 9(6).
  47. 000094    02 ARTFOTOGRAFIA        PIC X(128).
  48. 000098 WORKING-STORAGE SECTION.
  49. 000100 01 ART-STATUS             PIC  9(2).
  50. 000104 LINKAGE SECTION.
  51. 000105 01 DATA1        PIC X(13).
  52. 000106 01 DATA2        PIC S9(14)V9(4) COMP-5.
  53. 000117
  54. 000118 PROCEDURE DIVISION WITH STDCALL LINKAGE USING DATA1 DATA2 .
  55. 000121      OPEN INPUT ARTICULO
  56. 000128      MOVE DATA1     TO ARTBARRA.
  57. 000130      READ ARTICULO  KEY IS ART-CLAVE-BARRA.      
  58. 000147      MOVE ARTMINORISTA       TO DATA2
  59. 000153      CLOSE ARTICULO      
  60. 000154
  61. 000157     EXIT PROGRAM.

Kuk 30 de enero de 2018 22:24

drvedia1981, para la DLL tiene que ser:

Código:

C:\ruta_powercobol_3\cobol32.exe -WC"MESSAGE,FLAG(I),SOURCE" C:\ruta_de_tu_programa\PROGRAMA.COB > SYSOUT.txt
C:\ruta_powercobol_3\link.exe /DLL C:\ruta_de_tu_programa\PROGRAMA.OBJ C:\ruta_powercobol_3\*.lib >> SYSOUT.txt

Para llamar el programa desde el VB, es el nombre de la PROGRAM-ID con el prefijo de guion bajo. Es decir, si tu PROGRAM-ID es PROGRAMA, desde VB debes llamar a _PROGRAMA

Desde VB debes declarar la función de la siguiente manera:

Código VB:
  1. Declare Function PROGRAMA Lib "PROGRAMA.DLL" Alias "_PROGRAMA@8"  (ByRef DATA1 As String, ByRef DATA2 As Long) As Integer

drvedia1981 31 de enero de 2018 00:53

Muchas gracias Kuk voy a probar Saludos !!!!


La franja horaria es GMT +2. Ahora son las 13:53.

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