COBOL Foro

COBOL Foro (https://www.cobolforo.es/index.php)
-   MySQL (https://www.cobolforo.es/forumdisplay.php?f=30)
-   -   [Información] Error SQL "02000 - Data not found" (https://www.cobolforo.es/showthread.php?t=138)

Josber 19 de mayo de 2015 17:45

Error SQL "02000 - Data not found"
 
Tengo un problema bastante raro, a mi entender, con una tabla SQL, la primera vez que entro en el programa y cargo un registro que existe, lo regraba perfectamente, si vuelvo a acceder a ese registro, (seguidamente o en otro momento, pero sin salir del programa), me da el error de SQL "02000" "data not found", pero si al entrar en el registro y antes de regrabar, modifico cualquier dato, da lo mismo el que sea, me lo vuelve a regrabar perfectamente. Éste error me lo ha dado otras veces porque le he puesto al regrabar, en la sentencia SQL el campo principal (UNIQUE KEY), pero eliminandolo de la sentencia, se ha arreglado.

He probado a crear de nuevo la tabla, a ponerle a todos los campos que acepten NULL, a dejar una sola clave única de acceso, (he eliminado las otras "KEY" que tenía, que, de momento no se usaban), y alguna que otra cosa más, pero no hay manera de descubrir el por qué del error.

Ando ya desesperado, alguna sugerencia, porque lo único que me queda es borrar tabla y programa y empezar desde cero y no quisiera.

Gracias y un saludo.-

Kuk 19 de mayo de 2015 17:54

Josber, parece tema de COMMIT. Echale un ojo a ver si lo haces bien, y que la configuracion del ODBC este bien. ;)

Josber 19 de mayo de 2015 18:26

Gracias, Kuk, acabo de hacer una prueba, que era la que me faltaba, poniéndole al principio de la subrutina de regrabar, nada más entrar, un COMMIT, para "liberar" la BD, y nada, exactamente igual y la configuración del ODBC, debe estar bien porque con otras tablas, funciona sin problemas.

Un saludo.-

Kuk 19 de mayo de 2015 20:48

Josber, tienes que hacer COMMIT despues de la modificacion. Si no lo haces, la modificacion queda en Pending, pero no se le aplica a la BBDD. Todo lo que es INSERT, DELETE y UPDATE hay que hacer COMMIT despues siempre.

Hrmcobol 19 de mayo de 2015 22:55

Hola Amigos, a mi me paso algo parecido con una tabla de access, el tema era que se perdían registros sin saber porque, luego de unas 5000 ideas distintas, elimine la tabla, la cree nuevamente, elimine el control del programa, lo asigne nuevamente, recompile y anduvo, nunca supe cual fue la razón.

Saludos :banned: :banned:

Josber 20 de mayo de 2015 06:58

Cita:

Cita del post de Kuk (Mensaje 595)
Josber, tienes que hacer COMMIT despues de la modificacion. Si no lo haces, la modificacion queda en Pending, pero no se le aplica a la BBDD. Todo lo que es INSERT, DELETE y UPDATE hay que hacer COMMIT despues siempre.

Lo hago también en ese momento Kuk, incluso he puesto un ROLLBACK para probar a deshacer a ver que pasaba y nada sigue igual, el poner el COMMIT al principio era por probar.
Hrm la tabla la he borrado y creado varias veces, incluso con otro nombre pero nada y el control no puedo puedo borrarlo, no existe porque es SQL embebido.

Gracias y un saludo.-

Kuk 20 de mayo de 2015 10:53

Hrmcobol, en tu caso, me parece que era entonces culpa de la configuraicon del control.

Josber, pega aqui el codigo de INSERT en la tabla, y el codigo de SELECT, los 2 completos.

Josber 20 de mayo de 2015 11:47

Aquí tienes, (lo hago en dos post, porque en uno ólo no me deja):

Select

Código COBOL:
  1.  LEER.
  2.      MOVE POW-NUMERIC OF CAMPO1 TO PROCOD.
  3.      
  4.      EXEC SQL
  5.           SELECT * FROM PROVEEDOR
  6.                  WHERE PROCOD = :PROCOD
  7.                        INTO :PROCOD ,
  8.                           :PRONOM       ,
  9.                           :PRORAZ       ,
  10.                             :PRODIR       ,
  11.                               :PROCP        ,
  12.                           :PROPOB       ,
  13.                               :PROPRO       ,
  14.                               :PROPAI       ,
  15.                               :PROCIF       ,
  16.                               :PROTEL1      ,
  17.                               :PROTEL2      ,
  18.                               :PROFAX       ,
  19.                               :PROMAIL      ,
  20.                               :PROWEB       ,
  21.                               :PROPER       ,
  22.                           :PROGRU       ,
  23.                               :PROIBAN1     ,
  24.                               :PROIBAN2     ,
  25.                           :PROCTA       ,
  26.                           :PROENT       ,
  27.                           :PRODC        ,
  28.                           :PRONUM_CTA   ,
  29.                               :PROCOD_BAN   ,
  30.                               :PRONUM_BAN   ,
  31.                           :PROBAN       ,
  32.                           :PRODIR_BAN   ,
  33.                           :PROCP_BAN    ,
  34.                           :PROPOB_BAN   ,
  35.                           :PROPRO_BAN   ,
  36.                           :PROPAIS_BAN  ,
  37.                               :PROFOR       ,
  38.                               :PRO_ENE      ,
  39.                               :PRO_FEB      ,
  40.                               :PRO_MAR      ,
  41.                               :PRO_ABR      ,
  42.                               :PRO_MAY      ,
  43.                               :PRO_JUN      ,
  44.                               :PRO_JUL      ,
  45.                               :PRO_AGO      ,
  46.                               :PRO_SEP      ,
  47.                               :PRO_OCT      ,
  48.                               :PRO_NOV      ,
  49.                               :PRO_DIC      ,
  50.                           :PROREP       ,
  51.                               :PRODTO       ,
  52.                               :PROTAR       ,
  53.                               :PROMAY       ,
  54.                               :PRORIE_AUT   ,
  55.                               :PRORIE_ALC   ,
  56.                               :PROTOT       ,
  57.                               :PROREC       ,
  58.                               :PROIVA       ,
  59.                               :PRODTO_PP    ,
  60.                               :PROVAC       ,
  61.                               :PRODIA1      ,
  62.                               :PRODIA2      ,
  63.                               :PRODIA3      ,
  64.                               :PROACT       ,
  65.                               :PROFEC       ,
  66.                               :PROFEC_MOD   ,
  67.                               :PROFEC_COM   ,
  68.                             :PROPROV      ,
  69.                             :PROFAC_REP   ,
  70.                               :PROPLA       ,
  71.                               :PROMESF      ,
  72.                             :PROREP_LEG   ,
  73.                             :PROREP_NIF   ,
  74.                             :PROELI       ,
  75.                           :PROOBS   ,
  76.                           :PROTEX   ,
  77.                           :PROTEX_TEX   ,
  78.                           :PROLIS   ,
  79.                           :PRONOCOM
  80.      END-EXEC.

Josber 20 de mayo de 2015 11:48

Insert

Código COBOL:
  1.  GRABAR.
  2.  
  3.      MOVE "Proveedores - SQL" TO "Caption" OF POW-SELF.
  4.      
  5.      EXEC SQL
  6.           INSERT INTO PROVEEDOR
  7.                  VALUES (   :PROCOD ,
  8.                           :PRONOM       ,
  9.                           :PRORAZ       ,
  10.                             :PRODIR       ,
  11.                               :PROCP        ,
  12.                           :PROPOB       ,
  13.                               :PROPRO       ,
  14.                               :PROPAI       ,
  15.                               :PROCIF       ,
  16.                               :PROTEL1      ,
  17.                               :PROTEL2      ,
  18.                               :PROFAX       ,
  19.                               :PROMAIL      ,
  20.                               :PROWEB       ,
  21.                               :PROPER       ,
  22.                           :PROGRU       ,
  23.                               :PROIBAN1     ,
  24.                               :PROIBAN2     ,
  25.                           :PROCTA       ,
  26.                           :PROENT       ,
  27.                           :PRODC        ,
  28.                           :PRONUM_CTA   ,
  29.                               :PROCOD_BAN   ,
  30.                               :PRONUM_BAN   ,
  31.                           :PROBAN       ,
  32.                           :PRODIR_BAN   ,
  33.                           :PROCP_BAN    ,
  34.                           :PROPOB_BAN   ,
  35.                           :PROPRO_BAN   ,
  36.                           :PROPAIS_BAN  ,
  37.                               :PROFOR       ,
  38.                               :PRO_ENE      ,
  39.                               :PRO_FEB      ,
  40.                               :PRO_MAR      ,
  41.                               :PRO_ABR      ,
  42.                               :PRO_MAY      ,
  43.                               :PRO_JUN      ,
  44.                               :PRO_JUL      ,
  45.                               :PRO_AGO      ,
  46.                               :PRO_SEP      ,
  47.                               :PRO_OCT      ,
  48.                               :PRO_NOV      ,
  49.                               :PRO_DIC      ,
  50.                           :PROREP       ,
  51.                               :PRODTO       ,
  52.                               :PROTAR       ,
  53.                               :PROMAY       ,
  54.                               :PRORIE_AUT   ,
  55.                               :PRORIE_ALC   ,
  56.                               :PROTOT       ,
  57.                               :PROREC       ,
  58.                               :PROIVA       ,
  59.                               :PRODTO_PP    ,
  60.                               :PROVAC       ,
  61.                               :PRODIA1      ,
  62.                               :PRODIA2      ,
  63.                               :PRODIA3      ,
  64.                               :PROACT       ,
  65.                               :PROFEC       ,
  66.                               :PROFEC_MOD   ,
  67.                               :PROFEC_COM   ,
  68.                             :PROPROV      ,
  69.                             :PROFAC_REP   ,
  70.                               :PROPLA       ,
  71.                               :PROMESF      ,
  72.                             :PROREP_LEG   ,
  73.                             :PROREP_NIF   ,
  74.                             :PROELI       ,
  75.                           :PROOBS   ,
  76.                           :PROTEX   ,
  77.                           :PROTEX_TEX   ,
  78.                           :PROLIS   ,
  79.                           :PRONOCOM     )
  80.      END-EXEC.
  81.                            
  82.      IF SQLSTATE = "23000"  *> La CLAVE YA EXISTE (CLAVE DUPLICADA)
  83.         PERFORM REGRABAR
  84.      END-IF.    
  85.      
  86.      EXEC SQL
  87.           COMMIT
  88.      END-EXEC.
  89. *      
  90.      MOVE 0 TO WSVIEW2.
  91.      CALL "VACIAR".
  92.      CALL "INHABILITAR".
  93.      CALL "CARGAR-TABLA".
  94.      MOVE 1 TO "Enabled" OF CAMPO1.
  95.      MOVE 1 TO "CurrentPage" OF TAB1.
  96.      MOVE POW-TRUE TO "Enabled" OF TAB1.
  97.      INVOKE TAB1 "SetFocus".
  98.      INVOKE CAMPO1 "SetFocus".
  99.      EXIT PROGRAM.
  100. *
  101.  REGRABAR.
  102.      MOVE POW-NUMERIC OF CAMPO1 TO PROCOD.
  103.      EXEC SQL
  104.           UPDATE PROVEEDOR
  105.                  SET        PRONOM  =   :PRONOM       ,
  106.                           PRORAZ    =   :PRORAZ       ,
  107.                             PRODIR  =   :PRODIR       ,
  108.                               PROCP     =   :PROCP        ,
  109.                           PROPOB    =   :PROPOB       ,
  110.                               PROPRO    =   :PROPRO       ,
  111.                               PROPAI    =   :PROPAI       ,
  112.                               PROCIF    =   :PROCIF       ,
  113.                               PROTEL1   =   :PROTEL1      ,
  114.                               PROTEL2   =   :PROTEL2      ,
  115.                               PROFAX    =   :PROFAX       ,
  116.                               PROMAIL   =   :PROMAIL      ,
  117.                               PROWEB    =   :PROWEB       ,
  118.                               PROPER    =   :PROPER       ,
  119.                           PROGRU    =   :PROGRU       ,
  120.                               PROIBAN1  =   :PROIBAN1     ,
  121.                               PROIBAN2  =   :PROIBAN2     ,
  122.                           PROCTA    =   :PROCTA       ,
  123.                           PROENT    =   :PROENT       ,
  124.                           PRODC     =   :PRODC        ,
  125.                           PRONUM_CTA    =   :PRONUM_CTA   ,
  126.                               PROCOD_BAN    =   :PROCOD_BAN   ,
  127.                               PRONUM_BAN    =   :PRONUM_BAN   ,
  128.                           PROBAN    =   :PROBAN       ,
  129.                           PRODIR_BAN    =   :PRODIR_BAN   ,
  130.                           PROCP_BAN =   :PROCP_BAN    ,
  131.                           PROPOB_BAN    =   :PROPOB_BAN   ,
  132.                           PROPRO_BAN    =   :PROPRO_BAN   ,
  133.                           PROPAIS_BAN   =   :PROPAIS_BAN  ,
  134.                               PROFOR    =   :PROFOR       ,
  135.                               PRO_ENE   =   :PRO_ENE      ,
  136.                               PRO_FEB   =   :PRO_FEB      ,
  137.                               PRO_MAR   =   :PRO_MAR      ,
  138.                               PRO_ABR   =   :PRO_ABR      ,
  139.                               PRO_MAY   =   :PRO_MAY      ,
  140.                               PRO_JUN   =   :PRO_JUN      ,
  141.                               PRO_JUL   =   :PRO_JUL      ,
  142.                               PRO_AGO   =   :PRO_AGO      ,
  143.                               PRO_SEP   =   :PRO_SEP      ,
  144.                               PRO_OCT   =   :PRO_OCT      ,
  145.                               PRO_NOV   =   :PRO_NOV      ,
  146.                               PRO_DIC   =   :PRO_DIC      ,
  147.                           PROREP    =   :PROREP       ,
  148.                               PRODTO    =   :PRODTO       ,
  149.                               PROTAR    =   :PROTAR       ,
  150.                               PROMAY    =   :PROMAY       ,
  151.                               PRORIE_AUT    =   :PRORIE_AUT   ,
  152.                               PRORIE_ALC    =   :PRORIE_ALC   ,
  153.                               PROTOT    =   :PROTOT       ,
  154.                               PROREC    =   :PROREC       ,
  155.                               PROIVA    =   :PROIVA       ,
  156.                               PRODTO_PP =   :PRODTO_PP    ,
  157.                               PROVAC    =   :PROVAC       ,
  158.                               PRODIA1   =   :PRODIA1      ,
  159.                               PRODIA2   =   :PRODIA2      ,
  160.                               PRODIA3   =   :PRODIA3      ,
  161.                               PROACT    =   :PROACT       ,
  162.                               PROFEC    =   :PROFEC       ,
  163.                               PROFEC_MOD    =   :PROFEC_MOD   ,
  164.                               PROFEC_COM    =   :PROFEC_COM   ,
  165.                             PROPROV =   :PROPROV      ,
  166.                             PROFAC_REP  =   :PROFAC_REP   ,
  167.                               PROPLA    =   :PROPLA       ,
  168.                               PROMESF   =   :PROMESF      ,
  169.                             PROREP_LEG  =   :PROREP_LEG   ,
  170.                             PROREP_NIF  =   :PROREP_NIF   ,
  171.                             PROELI  =   :PROELI       ,
  172.                           PROOBS    =   :PROOBS       ,
  173.                           PROTEX    =   :PROTEX       ,
  174.                           PROTEX_TEX    =   :PROTEX_TEX   ,
  175.                           PROLIS    =   :PROLIS       ,
  176.                           PRONOCOM  =   :PRONOCOM
  177.                WHERE PROCOD = :PROCOD
  178.      END-EXEC.

Gracias a tod@s.-

Kuk 20 de mayo de 2015 12:15

Josber, varias cosas. Yo lo que mas he usado ha sido DB2, asi que te voy a decir desde ese prisma cosas a mejorar: el INTO va antes que el FROM. El * (asterisco) no se aconseja usarlo jamas en programas. Tampoco se aconseja llamar de misma forma las variables y los cmapos de la tabla.

En cuanto a tu problema, como tienes definido el campo PRONOM en la tabla, y como la variable PRONOM en la WORKING?


La franja horaria es GMT +1. Ahora son las 23:27.

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