Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL (ActiveX, v4 - v11) (https://www.cobolforo.es/forumdisplay.php?f=9)
-   -   [Sintaxis] Campos numericos en SQL Server (https://www.cobolforo.es/showthread.php?t=1218)

Fito 15 de septiembre de 2020 20:26

Campos numericos en SQL Server
 
Hola Amigos:

Estoy con un problema. Me tengo que comunicar con una BBDD MS Sql Server y tengo problemas para pasar los campos numericos.

Me conecto vía ADO.

Los campos alfabéticos los carga perfectos.

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  
  5.  01  warticulo   pic x(20).
  6.  01  redefines warticulo.
  7.      02 xart     pic 9(6).
  8.      02          pic x(14).
  9.      
  10.  01  wartdenom   pic x(150).
  11.  01  wartunimed  pic x(20).
  12.  01  wtexto      pic x(250)      value spaces.
  13.  01  wenviado    pic 9(4) comp-5 value zeros.
  14.  01  wzeros      pic 9           value zeros.
  15.  
  16.  01  wbaja       pic s9(10)      value zeros.
  17.  01  wstock      pic s9(14)v99.
  18.  01  wimp        pic 9(14),99.
  19.  
  20.  01  wunimed     pic x(10).
  21.  01  wiva        pic 99,99.
  22.  
  23.  
  24.  01  xprecio         pic 9(7)v9(8).
  25.  01  wprecio         pic 9(7)v9999.
  26.  01  xvprcla.
  27.      02 wven         pic 9(6).
  28.      02 wart         pic 9(6).
  29.      02 wfec         pic 9(8).
  30.  
  31.  PROCEDURE       DIVISION.
  32.  
  33.  comienzo.
  34.      open extend salida.
  35.      accept wsalhora             from time.
  36.      move "   Artículos"         to zlite.
  37.      move wsalhora               to zhora.
  38.      write reg-salida from zregsal.
  39.      close salida.
  40.  
  41.      move "Artículos"         to "Caption" of lblMSG.
  42.      perform refresca.
  43.  
  44.      move 'dbo."DKARTICULOS"'        to ADO-ARCHIVO.
  45.      perform inicializacion.
  46.  
  47.      perform fecha-sistema.
  48.      move fecha-amd           to wfec.
  49.      
  50.      open input arti venpre.
  51.  
  52. *    go sale.
  53.      
  54.  sigue.
  55.      initialize artcla.
  56.      start arti key is not < artcla invalid go sale.
  57.      
  58.  leo.
  59.      read arti next at end go sale.
  60.  
  61.      perform busca-precio.
  62.      if xprecio = zeros go leo.
  63.      
  64.      invoke OBJ-RECORDSET "ADDNEW".
  65.  
  66. *...............................................................    
  67.   *> codigo
  68.      move spaces           to warticulo.
  69.      move articulo         to xart.
  70.      invoke OBJ-FIELD(1)  "SET-VALUE" using warticulo.
  71.  
  72.    *> nombre
  73.      move artdenom         to wartdenom.
  74.      invoke OBJ-FIELD(2)  "SET-VALUE" using wartdenom.
  75.    
  76.    *> baja
  77.      move zeros            to wbaja.
  78.      invoke OBJ-FIELD(3)  "SET-VALUE" using wbaja.
  79.    
  80.    *> stock
  81.      move zeros            to wstock.
  82.      invoke OBJ-FIELD(4)  "SET-VALUE" using wstock.
  83.    
  84.    *> unidad de medida
  85.      move artunimed        to wartunimed.
  86.      invoke OBJ-FIELD(5)  "SET-VALUE" using wartunimed.
  87.    
  88.    *> precio
  89.      move xprecio          to wimp.
  90.      invoke OBJ-FIELD(6)  "SET-VALUE" using wimp.
  91.  
  92.      move zeros            to wimp.
  93.      invoke OBJ-FIELD(7)  "SET-VALUE" using wimp.
  94.      invoke OBJ-FIELD(8)  "SET-VALUE" using wimp.
  95.      invoke OBJ-FIELD(9)  "SET-VALUE" using wimp.
  96.      invoke OBJ-FIELD(10) "SET-VALUE" using wimp.
  97.      invoke OBJ-FIELD(11) "SET-VALUE" using wimp.
  98.  
  99.      invoke OBJ-FIELD(12) "SET-VALUE" using wzeros.
  100.      invoke OBJ-FIELD(13) "SET-VALUE" using wtexto.
  101.      invoke OBJ-FIELD(14) "SET-VALUE" using wtexto.
  102.    
  103.    *> enviado
  104.      move zeros            to wenviado.
  105.      invoke OBJ-FIELD(6)  "SET-VALUE" using wenviado.
  106. *...............................................................    
  107.      invoke OBJ-RECORDSET "UPDATE".
  108.      
  109.      go leo.
  110.      
  111.  sale.
  112.      close arti venpre.
  113.  
  114.      perform cierra.
  115.  
  116.      exit program.
  117.      
  118.  #include "copys\comunpro.cpy".
  119.  #include "copys\adoCnnAvaro.cpy".
  120.  
  121.  
  122.   busca-precio.
  123.      move articulo                  to wart.
  124.      move 99                        to wven.
  125.      perform busca-vpr thru f-busca-vpr.
  126.      move pre-precio     to xprecio.
  127.  
  128.  busca-vpr.
  129.      initialize vprcla pre-precio.
  130.      move wven       to vprven.
  131.      move wart       to vprart.
  132.      start venpre key is not < vprcla invalid go f-busca-vpr.
  133.  
  134.  leo-venpre.
  135.      read venpre next at end go f-busca-vpr.
  136.  
  137.      if vprven  not = wven or
  138.         vprart  not = wart or
  139.         vprfec      > wfec
  140.         go f-busca-vpr.
  141.  
  142.      move vprpre(1)     to pre-precio.
  143.  
  144.      go leo-venpre.
  145.  
  146.  f-busca-vpr.
  147.      exit.

Estoy tratando de cargar el precio y no lleva nada. Ya controlé que el precio venga bien de mis archivos.

El campo PRECIO está definido en la BBDD como "decimal (13,2)"

Para Postgres wimp pic +9(11),99.

Acá ya probé de todo.:agres:

Saludos.

Fito...

---------- Post añadido : 15:26 ---------- Post anterior : 13:57 ----------

Hola:

Me respondo solo.

Me parece que estoy para internación,

Si se fijan bien, antes de update, estoy pisando el dato 6. Eso es por copiar y pegar. :tontol::tontol::tontol:

Ya mi mente mejorará... o no...

Saludos

Fito...

Kuk 15 de septiembre de 2020 21:57

@Fito, mira a ver poniéndoles COMP o COMP-4 o COMP-5.

JCantero 15 de septiembre de 2020 23:30

@Fito, has probado a poner el punto decimal en vez de la coma en la definición de wimp.

01 wimp pic 9(14).99.

Yo en programas de migración a postgresql lo hago así. (quitando "decimal-point is comma.")

Fito 15 de septiembre de 2020 23:30

Holaaaa:

Ya está solucionado, no me traía nada, porque pisaba el dato con otra cosa. Al final lo dejé igual como lo tengo para Postgres

Código COBOL:
  1. 01  wimp         pic +9(14),99.

Así anda perfecto.

Saludos.

Fito...

Nitzer 17 de septiembre de 2020 09:02

Cuando se trabaja con Ado utilizando UPDATE se pueden pasar los númericos con la representación de Cobol, pero si accedes nativamente a la bbdd hay que hacer lo que dice jcantero.

Esto es lo que hago en esos casos:

Código COBOL:
  1. 01  VALORORIGINAL PIC S9(10)V99.
  2. 01  VALORNUEVO      PIC ----------,--.
  3. 01  VALORAPASAR    PIC X(13).
  4.  
  5. MOVE VALORORIGINAL TO VALORNUEVO
  6. MOVE VALORNUEVO TO VALORAPASAR
  7. INSPECT VALORAPASAR REPLACING ALL ',' BY '.'

Y después hago el insert con ese valor o el update.
Luego hago un INSPECT REPLACING y sustituyo la coma por el punto, siempre que estemos en un sistema decimal como el que se utiliza en España.
Y una vez cambiada paso el valor


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

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