Por qué el error en este SELECT?

Por qué el error en este SELECT?

Postby Armando » Fri Mar 01, 2024 7:25 pm

Colegas FivwWinners:

Llevo varios días y no encuentro la razón, Por qué en el siguiente código me tira error cuando la tabla esta vacía?
solo cuando la tabla esta vacíia, si hay registros todo va bien.

Code: Select all  Expand view  RUN

   FW_ReOpenRecordSet(oRsHdr,oApp:oCon,"SELECT " +;
                                          "H.*," +;
                                          "P.PRO_NOM," +;
                                          "P.PRO_EMA " +;
                                       "FROM " +;
                                          "HdrOdc H " +;
                                       "LEFT JOIN " +;
                                          "Proveedores P " +;
                                       "ON " +;
                                          "H.HDR_PRV = P.PRO_NUM " +;
                                       "WHERE " +;
                                          "YEAR(H.HDR_FDE) = '" + STR(nAmo,4,0) + "' " +;
                                       "ORDER BY " +;
                                          "H.HDR_ODC",adLockOptimistic,adOpenDynamic,0)
 



Con navicat reviso la tabla cuando esta vacía y me muestra un registro con todo los campos a NULL.

Esta es la estructura de la tabla, por si sirve de apoyo a su respuesta

Code: Select all  Expand view  RUN

    cCmdSql := "CREATE TABLE IF NOT EXISTS HdrOdc (" +;
                  "HDR_ODC DECIMAL(07,0)       NOT NULL DEFAULT 0               COMMENT 'Número de orden de compra'," +;
                  "HDR_FDE DATE                    NULL                         COMMENT 'Fecha de emisión'," +;
                  "HDR_CAN BIT                 NOT NULL DEFAULT 0               COMMENT 'Cancelada ?'," +;
                  "HDR_DOL BIT                 NOT NULL DEFAULT 0               COMMENT 'Es en dólares ?'," +;
                  "HDR_TDC DECIMAL(09,5)       NOT NULL DEFAULT 0.00000         COMMENT 'Tipo de cambio'," +;
                  "HDR_SUR BIT                 NOT NULL DEFAULT 0               COMMENT 'Ya esta surtida al 100% ?'," +;
                  "HDR_IMS BIT                 NOT NULL DEFAULT 0               COMMENT 'Imss, Infonavir e Impuestos'," +;
                  "HDR_TRA BIT                 NOT NULL DEFAULT 0               COMMENT 'Transporte'," +;
                  "HDR_VIA BIT                 NOT NULL DEFAULT 0               COMMENT 'Viaticos'," +;
                  "HDR_EQU BIT                 NOT NULL DEFAULT 0               COMMENT 'Equipo de seguridad'," +;
                  "HDR_NMN BIT                 NOT NULL DEFAULT 0               COMMENT 'Nóminas'," +;
                  "HDR_PRV DECIMAL(05,0)       NOT NULL DEFAULT 0               COMMENT 'Número de proveedor'," +;
                  "HDR_PRO VARCHAR(11)          NOT NULL    DEFAULT ''              COMMENT 'Proyecto'," +;
                  "HDR_CON VARCHAR(10)          NOT NULL    DEFAULT ''              COMMENT 'Condiciones'," +;
                  "HDR_CDP VARCHAR(25)          NOT NULL    DEFAULT ''              COMMENT 'Condiciones de pago'," +;
                  "HDR_SOL VARCHAR(30)          NOT NULL    DEFAULT ''              COMMENT 'Solicitado por'," +;
                  "HDR_TOU DECIMAL(11,3)       NOT NULL DEFAULT 0.000           COMMENT 'Total de unidades'," +;
                  "HDR_IMP DECIMAL(13,2)       NOT NULL DEFAULT 0.00            COMMENT 'Importe'," +;
                  "HDR_PDD DECIMAL(05,2)       NOT NULL DEFAULT 0.00            COMMENT 'Porcentaje de descuento'," +;
                  "HDR_DSC DECIMAL(11,2)       NOT NULL DEFAULT 0.00            COMMENT 'Importe del descuento'," +;
                  "HDR_SUB DECIMAL(13,2)       NOT NULL DEFAULT 0.00            COMMENT 'Sub total'," +;
                  "HDR_PDI DECIMAL(05,2)       NOT NULL DEFAULT 0.00            COMMENT 'Porcentaje de I.V.A.'," +;
                  "HDR_IVA DECIMAL(11,2)       NOT NULL DEFAULT 0.00            COMMENT 'I.V.A.'," +;
                  "HDR_NET DECIMAL(13,2)       NOT NULL DEFAULT 0.00            COMMENT 'Importe neto'," +;
                  "HDR_RIS DECIMAL(05,2)       NOT NULL DEFAULT 0.00            COMMENT 'Porcentaje a retener por ISR'," +;
                  "HDR_IIS DECIMAL(10,2)       NOT NULL DEFAULT 0.00            COMMENT 'Importe de la retención por ISR'," +;
                  "HDR_RIV DECIMAL(05,2)       NOT NULL DEFAULT 0.00            COMMENT 'Porcentaje a retener por IVA'," +;
                  "HDR_IIV DECIMAL(10,2)       NOT NULL DEFAULT 0.00            COMMENT 'Importe de la retención por IVA'," +;
                  "HDR_FLE DECIMAL(10,2)       NOT NULL DEFAULT 0.00            COMMENT 'Importe de la retención por FLETE'," +;
                  "HDR_TOT DECIMAL(13,2)       NOT NULL DEFAULT 0.00            COMMENT 'Importe total'," +;
                  "HDR_PAG DECIMAL(13,2)       NOT NULL DEFAULT 0.00            COMMENT 'Importe pagado al proveedor'," +;
                  "HDR_CYV DECIMAL(10,2)       NOT NULL DEFAULT 0.00            COMMENT 'Consumo y viaticos'," +;
                  "HDR_MDO DECIMAL(10,2)       NOT NULL DEFAULT 0.00            COMMENT 'Mano de obra'," +;
                  "HDR_ISS DECIMAL(10,2)       NOT NULL DEFAULT 0.00            COMMENT 'Imss'," +;
                  "HDR_EYH DECIMAL(10,2)       NOT NULL DEFAULT 0.00            COMMENT 'Equipo y herramienta'," +;
                  "HDR_IND DECIMAL(10,2)       NOT NULL DEFAULT 0.00            COMMENT 'Indirectos y utilidad'," +;
                  "HDR_CAR DECIMAL(13,2)       NOT NULL DEFAULT 0.00            COMMENT 'Importe cargado'," +;
                  "HDR_EEN TINYTEXT                NULL                         COMMENT 'Entregar en..'," +;
                  "PRIMARY KEY(HDR_ODC))" +;
                  "ENGINE = InnoDB                                                 COMMENT 'Encabezado de ordenes de compra';"
 


Este es el error

Code: Select all  Expand view  RUN

Application
===========
   Path and name: D:\SapWin30\SapWin.Exe (32 bits)
   Size: 5,303,296 bytes
   Compiler version: Harbour 3.2.0dev (r1904111533)
   FiveWin  version: FWH 23.07
   C compiler version: Borland/Embarcadero C++ 7.0 (32-bit)
   Windows 11 64 Bits, version: 6.2, Build 9200

   Time from start: 0 hours 0 mins 13 secs
   Error occurred at: 01/03/2024, 13:15:50
   Error description: (DOS Error -2147352567) WINOLE/1007  El valor de BOF o EOF es True, o el actual registro se eliminó; la operación solicitada requiere un registro actual. (0x800A0BCD): ADODB.Recordset

Stack Calls
===========
   Called from:  => TOLEAUTO:MOVEFIRST( 0 )
   Called from: Source\SapWin3a.Prg => FILAMO( 440 )
   Called from: Source\SapWin3a.Prg => (b)SAPWIN3A( 292 )
   Called from: .\source\classes\TGET.PRG => TGET:__OPINC( 3313 )
   Called from: .\source\classes\TGET.PRG => (b)TGET_SPINNER( 3369 )
   Called from: .\source\classes\TGET.PRG => (b)TGET_SPINNER( 3379 )
   Called from: .\source\classes\SCRLLBAR.PRG => (b)TSCROLLBAR( 57 )
   Called from: .\source\classes\SCRLLBAR.PRG => TSCROLLBAR:GOUP( 0 )
   Called from: .\source\classes\WINDOW.PRG => TGET:VSCROLL( 2473 )
   Called from:  => TWINDOW:HANDLEEVENT( 0 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1857 )
   Called from: .\source\classes\TGET.PRG => TGET:HANDLEEVENT( 1306 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
   Called from:  => DIALOGBOXINDIRECT( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 307 )
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG( 449 )
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS( 24 )
   Called from:  => TOLEAUTO:MOVEFIRST( 0 )
   Called from: Source\SapWin3a.Prg => FILAMO( 440 )
   Called from: Source\SapWin3a.Prg => (b)SAPWIN3A( 292 )
   Called from: .\source\classes\TGET.PRG => TGET:__OPINC( 3313 )
   Called from: .\source\classes\TGET.PRG => (b)TGET_SPINNER( 3369 )
   Called from: .\source\classes\TGET.PRG => (b)TGET_SPINNER( 3379 )
   Called from: .\source\classes\SCRLLBAR.PRG => (b)TSCROLLBAR( 57 )
   Called from: .\source\classes\SCRLLBAR.PRG => TSCROLLBAR:GOUP( 0 )
   Called from: .\source\classes\WINDOW.PRG => TGET:VSCROLL( 2473 )
   Called from:  => TWINDOW:HANDLEEVENT( 0 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1857 )
   Called from: .\source\classes\TGET.PRG => TGET:HANDLEEVENT( 1306 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
   Called from:  => DIALOGBOXINDIRECT( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 307 )
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG( 449 )
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS( 24 )
   Called from:  => TOLEAUTO:MOVEFIRST( 0 )
   Called from: Source\SapWin3a.Prg => FILAMO( 440 )
   Called from: Source\SapWin3a.Prg => (b)SAPWIN3A( 292 )
   Called from: .\source\classes\TGET.PRG => TGET:__OPINC( 3313 )
   Called from: .\source\classes\TGET.PRG => (b)TGET_SPINNER( 3369 )
   Called from: .\source\classes\TGET.PRG => (b)TGET_SPINNER( 3379 )
   Called from: .\source\classes\SCRLLBAR.PRG => (b)TSCROLLBAR( 57 )
   Called from: .\source\classes\SCRLLBAR.PRG => TSCROLLBAR:GOUP( 0 )
   Called from: .\source\classes\WINDOW.PRG => TGET:VSCROLL( 2473 )
   Called from:  => TWINDOW:HANDLEEVENT( 0 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1857 )
   Called from: .\source\classes\TGET.PRG => TGET:HANDLEEVENT( 1306 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
   Called from:  => DIALOGBOXINDIRECT( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 307 )
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG( 449 )
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS( 24 )
   Called from:  => TOLEAUTO:MOVEFIRST( 0 )
   Called from: Source\SapWin3a.Prg => FILAMO( 440 )
   Called from: Source\SapWin3a.Prg => (b)SAPWIN3A( 292 )
   Called from: .\source\classes\TGET.PRG => TGET:__OPINC( 3313 )
   Called from: .\source\classes\TGET.PRG => (b)TGET_SPINNER( 3369 )
   Called from: .\source\classes\TGET.PRG => (b)TGET_SPINNER( 3379 )
   Called from: .\source\classes\SCRLLBAR.PRG => (b)TSCROLLBAR( 57 )
   Called from: .\source\classes\SCRLLBAR.PRG => TSCROLLBAR:GOUP( 0 )
   Called from: .\source\classes\WINDOW.PRG => TGET:VSCROLL( 2473 )
   Called from:  => TWINDOW:HANDLEEVENT( 0 )
   Called from: .\source\classes\CONTROL.PRG => TCONTROL:HANDLEEVENT( 1857 )
   Called from: .\source\classes\TGET.PRG => TGET:HANDLEEVENT( 1306 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3693 )
   Called from:  => DIALOGBOXINDIRECT( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 307 )
   Called from: .\source\function\ERRSYSW.PRG => ERRORDIALOG( 449 )
   Called from: .\source\function\ERRSYSW.PRG => (b)ERRORSYS( 24 )
   Called from:  => TOLEAUTO:MOVEFIRST( 0 )
   Called from: Source\SapWin3a.Prg => FILAMO( 440 )
   Called from: Source\SapWin3a.Prg => (b)SAPWIN3A( 292 )
   Called from: .\source\classes\TGET.PRG => TGET:__OPINC( 3313 )

System
======
   CPU type: AMD Ryzen 5 5500U with Radeon Graphics          2096 Mhz
   Hardware memory: 15755 megs

   Free System resources: 90 %
        GDI    resources: 90 %
        User   resources: 90 %
 
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3229
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Por qué el error en este SELECT?

Postby karinha » Fri Mar 01, 2024 7:41 pm

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Por qué el error en este SELECT?

Postby Armando » Fri Mar 01, 2024 7:45 pm

Joao:

Gracias por la respuesta pero no, no es el mismo caso, yo apenas abro la tabla y la quiero mostrar en un xBrowse vacio,
el ejemplo de tu respuesta es cuando intentan grabar.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3229
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Por qué el error en este SELECT?

Postby csincuir » Sat Mar 02, 2024 12:34 pm

Hola Armando,
Solo para que tengas el dato, yo utilizo Eagle1 para trabajar MySQL, e hice la prueba de crear tu tabla y luego ejecuté la consulta y no tuve ningún error al hacerlo.
Este es el código que utilicé:
Code: Select all  Expand view  RUN
//--------------------------------------------------------------------
function PruebaArmando()
Local oSql, cSql

TEXT INTO cSql
SELECT  
    H.*,
    P.cliente,
    P.direccion
 FROM  
    HdrOdc H  
 LEFT JOIN  
    proveedores P  
 ON  
    H.HDR_PRV = P.id_codigo
 WHERE  
    YEAR(H.HDR_FDE) = '2024'  
 ORDER BY  
    H.HDR_ODC
ENDTEXT

oSql := TsTable("HdrOdc")
oSql:Open(cSql)
? oSql:LastRec()  //Resultado 0

Return .t.
 


Lo que indica que tu consulta esta correcta, ya que pensé que por el JOIN a tu tabla proveedores estaba el error, pero no es el caso.
Lastimosamente no utilizo FW_ReOpenRecordSet() y no te puedo ayudar mas.

Saludos cordiales.

Carlos.
csincuir
 
Posts: 408
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Re: Por qué el error en este SELECT?

Postby nageswaragunupudi » Sat Mar 02, 2024 2:27 pm

With ADO we can use MoveFirst(), Move(), etc. when the recordset is empty.
It is the normal practice to check (whether fivewin, vb, c#, etc)

Code: Select all  Expand view  RUN

oRs := FW_OpenRecordSet( ... )
if oRs == nil
   ? "failed to open"
else
   if oRs:RecordCount() = 0
      ? "recorset is empty. No records"
  else
      oRs:MoveFirst()
      // or whatever
  endif
endif
 


You can xbrowse empty recordsets, because xBrowse knows when to use MoveFirst() and when not to use.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Por qué el error en este SELECT?

Postby nageswaragunupudi » Sat Mar 02, 2024 2:30 pm

Thanks for the answer but no, it is not the same case, I just open the table and I want to show it in an empty xBrowse,
the example of your answer is when they try to record.

We can safely show a recordset with 0 records in an xbrowse.
Code: Select all  Expand view  RUN

If oRs != nil
   XBROWSER oRs
endif
 

This works even if the recordset has 0 records
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Por qué el error en este SELECT?

Postby Armando » Sat Mar 02, 2024 3:14 pm

Mr. Rao y Carlos:

Muchas gracias por su tiempo y respuestas

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3229
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Por qué el error en este SELECT?

Postby Armando » Mon Mar 04, 2024 3:50 am

Amigos:

Les comparto mi experiencia en este tema:

1.- Creo una tabla con la estructura descrita en este hilo
2.- Con NaviCat hago un INSERT con SELECT desde una tabla de una versión anterior de mi aplicación.
3.- Al crear el xBrowse lo crea bien pero al pedir mostrar registros de un año en los que no hay registros, truena, ejemplo 2025

Pero:
Si omito el paso 2, es decir una tabla vacía, recién creada, no hay problema al pedir registro del 2025

Es muy probable que el INSERT con SELECT desde NaviCat crea el problema, alguien ha hecho algo parecido?
qué uso para copiar los registros desde una tabla anterior? y que no les haya creado problemas.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3229
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

Re: Por qué el error en este SELECT?

Postby nageswaragunupudi » Mon Mar 04, 2024 8:37 am

Code: Select all  Expand view  RUN
SELECT col1,col2,...coln
INTO <newtable>
FROM <oldtable> [WHERE ...]
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10646
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Por qué el error en este SELECT?

Postby Armando » Mon Mar 04, 2024 3:31 pm

Mr. Rao:

Thanks for your advice but I haven't success

Here is my code

Code: Select all  Expand view  RUN

SELECT HDR_ODC,HDR_FDE,HDR_CAN,HDR_DOL,HDR_TDC,HDR_SUR,HDR_IMS,HDR_TRA,HDR_VIA,HDR_EQU,HDR_NMN,HDR_PRV,HDR_PRO,HDR_CON,HDR_CDP,HDR_SOL,HDR_TOU,HDR_IMP,HDR_PDD,HDR_DSC,HDR_SUB,HDR_PDI,HDR_IVA,HDR_NET,HDR_RIS,HDR_IIS,HDR_RIV,HDR_IIV,HDR_FLE,HDR_TOT,HDR_PAG,HDR_CYV,HDR_MDO,HDR_ISS,HDR_EYH,HDR_IND,HDR_CAR,HDR_EEN
INTO sapwin.HdrOdc FROM appsap.HdrOdc ORDER BY HDR_ODC;
 


And this the error
Code: Select all  Expand view  RUN

[SQL] SELECT HDR_ODC,HDR_FDE,HDR_CAN,HDR_DOL,HDR_TDC,HDR_SUR,HDR_IMS,HDR_TRA,HDR_VIA,HDR_EQU,HDR_NMN,HDR_PRV,HDR_PRO,HDR_CON,HDR_CDP,HDR_SOL,HDR_TOU,HDR_IMP,HDR_PDD,HDR_DSC,HDR_SUB,HDR_PDI,HDR_IVA,HDR_NET,HDR_RIS,HDR_IIS,HDR_RIV,HDR_IIV,HDR_FLE,HDR_TOT,HDR_PAG,HDR_CYV,HDR_MDO,HDR_ISS,HDR_EYH,HDR_IND,HDR_CAR,HDR_EEN
INTO sapwin.HdrOdc FROM appsap.HdrOdc ORDER BY HDR_ODC;
[Err] 1327 - Undeclared variable: sapwin
 


SapWin.HdrOdc is the new database.table and appsap.hdrodc is th old database.table

I do it this way and the records are copied but I get the error described above when I filter the table and there are no records to show

Code: Select all  Expand view  RUN

INSERT INTO HdrOdc (HDR_ODC,HDR_FDE,HDR_CAN,HDR_DOL,HDR_TDC,HDR_SUR,HDR_IMS,HDR_TRA,HDR_VIA,HDR_EQU,HDR_NMN,HDR_PRV,HDR_PRO,HDR_CON,HDR_CDP,HDR_SOL,HDR_TOU,HDR_IMP,HDR_PDD,HDR_DSC,HDR_SUB,HDR_PDI,HDR_IVA,HDR_NET,HDR_RIS,HDR_IIS,HDR_RIV,HDR_IIV,HDR_FLE,HDR_TOT,HDR_PAG,HDR_CYV,HDR_MDO,HDR_ISS,HDR_EYH,HDR_IND,HDR_CAR,HDR_EEN)
SELECT HDR_ODC,HDR_FDE,HDR_CAN,HDR_DOL,HDR_TDC,HDR_SUR,HDR_IMS,HDR_TRA,HDR_VIA,HDR_EQU,HDR_NMN,HDR_PRV,HDR_PRO,HDR_CON,HDR_CDP,HDR_SOL,HDR_TOU,HDR_IMP,HDR_PDD,HDR_DSC,HDR_SUB,HDR_PDI,HDR_IVA,HDR_NET,HDR_RIS,HDR_IIS,HDR_RIV,HDR_IIV,HDR_FLE,HDR_TOT,HDR_PAG,HDR_CYV,HDR_MDO,HDR_ISS,HDR_EYH,HDR_IND,HDR_CAR,HDR_EEN FROM appsap.HdrOdc ORDER BY HDR_ODC;
 



Best regards
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
 
Posts: 3229
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 55 guests