Por qué el error en este SELECT?

Post Reply
User avatar
Armando
Posts: 3251
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Por qué el error en este SELECT?

Post by Armando »

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

   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 _ a NULL.

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

Code: Select all | Expand

    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

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
karinha
Posts: 7885
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Contact:

Re: Por qué el error en este SELECT?

Post by karinha »

Armando, mira se ayuda:

https://forums.fivetechsupport.com/view ... fa3#p18272

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
Armando
Posts: 3251
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Por qué el error en este SELECT?

Post by Armando »

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
csincuir
Posts: 411
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Contact:

Re: Por qué el error en este SELECT?

Post by csincuir »

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

//--------------------------------------------------------------------
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.
User avatar
nageswaragunupudi
Posts: 10691
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Por qué el error en este SELECT?

Post by nageswaragunupudi »

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

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: 10691
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Por qué el error en este SELECT?

Post by nageswaragunupudi »

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

If oRs != nil
   XBROWSER oRs
endif
 
This works even if the recordset has 0 records
Regards

G. N. Rao.
Hyderabad, India
User avatar
Armando
Posts: 3251
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Por qué el error en este SELECT?

Post by Armando »

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: 3251
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Por qué el error en este SELECT?

Post by Armando »

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
nageswaragunupudi
Posts: 10691
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Por qué el error en este SELECT?

Post by nageswaragunupudi »

Code: Select all | Expand

SELECT col1,col2,...coln
INTO <newtable>
FROM <oldtable> [WHERE ...]
Regards

G. N. Rao.
Hyderabad, India
User avatar
Armando
Posts: 3251
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Por qué el error en este SELECT?

Post by Armando »

Mr. Rao:

Thanks for your advice but I haven't success

Here is my code

Code: Select all | Expand

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

[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

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
Post Reply