Requiero explicacion error ACTIVATE DIALOG
-
russimicro
- Posts: 413
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Requiero explicacion error ACTIVATE DIALOG
Para recompilar y ver si alguien me puede colaborar--
1. Los errors son esporadicos
2. Se presentan del lado del cliente
3. En equipos de desarrollos no se presentan (no he podido reproducirlos o a mi no se me presentan)
4. Tengo mas de 400 clientes funcionando...
5. Al dia me llegan via correo un promedio de 10 errores de este tipo
6. No evidencio error de logica, creeria mas en un error del entorno... cierre de tablas, caidas del sistema, etc
7. Estoy dispuesto a contratar ayuda profesional, para revisar que genera estos errores.
8. Podria contratar a un experto y montarle mi plataforma de desarrollo completa ( fuentes, xhb comercial, fivewin 24.10 ) para que previa induccion de la organizacon del codigo y funcionamiento del sistema, el profesional contratado pueda hacer seguimiento a los errores que se reportan desde los clientes.
9. Si alguien me puede colaborar... me puede contactar y definimos la mecanica de prestacion de servicios.
10. Anexo errores del dia a dia...
1. Los errors son esporadicos
2. Se presentan del lado del cliente
3. En equipos de desarrollos no se presentan (no he podido reproducirlos o a mi no se me presentan)
4. Tengo mas de 400 clientes funcionando...
5. Al dia me llegan via correo un promedio de 10 errores de este tipo
6. No evidencio error de logica, creeria mas en un error del entorno... cierre de tablas, caidas del sistema, etc
7. Estoy dispuesto a contratar ayuda profesional, para revisar que genera estos errores.
8. Podria contratar a un experto y montarle mi plataforma de desarrollo completa ( fuentes, xhb comercial, fivewin 24.10 ) para que previa induccion de la organizacon del codigo y funcionamiento del sistema, el profesional contratado pueda hacer seguimiento a los errores que se reportan desde los clientes.
9. Si alguien me puede colaborar... me puede contactar y definimos la mecanica de prestacion de servicios.
10. Anexo errores del dia a dia...
-
russimicro
- Posts: 413
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Requiero explicacion error ACTIVATE DIALOG
Application
===========
Path and name: E:\RUSSOFT\ZERUS\zeruswin.exe (32 bits)
Size: ********* bytes
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20150726)
FiveWin Version : FWH 24.09
Windows version: 6.2, Build 9200
Time from start: 0 hours 57 mins 11 secs
Error occurred at: 09/02/2025, 11:32:01
Error description: Error BASE/1002 No existe el alias: FTM
Stack Calls
===========
Called from: FUENTES\COMUNES\FUNCSLIB.PRG => SELECTAREA_INV( 28650 )
Called from: FUENTES\GESTION\INVENTARIOS\FACTCAPT.PRG => GRARECXFAC( 3757 )
Called from: FUENTES\GESTION\CARTERA\FW_REGISTRO_CRE_CARTERA.PRG => GRABAREGISTRORECIBOSFW( 1502 )
Called from: FUENTES\GESTION\CARTERA\FW_REGISTRO_CRE_CARTERA.PRG => (b)CONTENIDODIALOGCARTERA1( 1111 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:CLICK( 816 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:LBUTTONUP( 1103 )
Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1867 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:HANDLEEVENT( 2145 )
Called from: C:\fwh24_10\source\classes\window.prg => _FWH( 3719 )
Called from: => DIALOGBOXINDIRECT( 0 )
Called from: .\source\classes\dialog.prg => TDIALOG:ACTIVATE( 325 )
Called from: FUENTES\GESTION\CARTERA\FW_REGISTRO_CRE_CARTERA.PRG => REGISTROCARTERA( 254 )
Called from: FUENTES\COMUNES\FW_FUNCSST1.PRG => (b)MENUX( 2180 )
Called from: .\source\classes\menu.prg => TMENU:COMMAND( 1582 )
Called from: C:\fwh24_10\source\classes\window.prg => TWINDOW:COMMAND( 1178 )
Called from: => TWINDOW:HANDLEEVENT( 0 )
Called from: C:\fwh24_10\source\classes\window.prg => _FWH( 3719 )
Called from: => WINRUN( 0 )
Called from: C:\fwh24_10\source\classes\window.prg => TWINDOW:ACTIVATE( 1137 )
Called from: FUENTES\COMUNES\FW_FUNCSST3.PRG => PRINCIPAL_METRO( 7811 )
Called from: FUENTES\COMUNES\FW_FUNCSST1.PRG => PRINCIPAL( 1474 )
Called from: FUENTES\MAIN\ZerusMain.prg => ZERUSMAIN( 4835 )
Called from: zeruswin.prg => MAIN( 17 )
===========
Path and name: E:\RUSSOFT\ZERUS\zeruswin.exe (32 bits)
Size: ********* bytes
Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20150726)
FiveWin Version : FWH 24.09
Windows version: 6.2, Build 9200
Time from start: 0 hours 57 mins 11 secs
Error occurred at: 09/02/2025, 11:32:01
Error description: Error BASE/1002 No existe el alias: FTM
Stack Calls
===========
Called from: FUENTES\COMUNES\FUNCSLIB.PRG => SELECTAREA_INV( 28650 )
Called from: FUENTES\GESTION\INVENTARIOS\FACTCAPT.PRG => GRARECXFAC( 3757 )
Called from: FUENTES\GESTION\CARTERA\FW_REGISTRO_CRE_CARTERA.PRG => GRABAREGISTRORECIBOSFW( 1502 )
Called from: FUENTES\GESTION\CARTERA\FW_REGISTRO_CRE_CARTERA.PRG => (b)CONTENIDODIALOGCARTERA1( 1111 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:CLICK( 816 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:LBUTTONUP( 1103 )
Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1867 )
Called from: .\source\classes\btnbmp.prg => TBTNBMP:HANDLEEVENT( 2145 )
Called from: C:\fwh24_10\source\classes\window.prg => _FWH( 3719 )
Called from: => DIALOGBOXINDIRECT( 0 )
Called from: .\source\classes\dialog.prg => TDIALOG:ACTIVATE( 325 )
Called from: FUENTES\GESTION\CARTERA\FW_REGISTRO_CRE_CARTERA.PRG => REGISTROCARTERA( 254 )
Called from: FUENTES\COMUNES\FW_FUNCSST1.PRG => (b)MENUX( 2180 )
Called from: .\source\classes\menu.prg => TMENU:COMMAND( 1582 )
Called from: C:\fwh24_10\source\classes\window.prg => TWINDOW:COMMAND( 1178 )
Called from: => TWINDOW:HANDLEEVENT( 0 )
Called from: C:\fwh24_10\source\classes\window.prg => _FWH( 3719 )
Called from: => WINRUN( 0 )
Called from: C:\fwh24_10\source\classes\window.prg => TWINDOW:ACTIVATE( 1137 )
Called from: FUENTES\COMUNES\FW_FUNCSST3.PRG => PRINCIPAL_METRO( 7811 )
Called from: FUENTES\COMUNES\FW_FUNCSST1.PRG => PRINCIPAL( 1474 )
Called from: FUENTES\MAIN\ZerusMain.prg => ZERUSMAIN( 4835 )
Called from: zeruswin.prg => MAIN( 17 )
-
russimicro
- Posts: 413
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Requiero explicacion error ACTIVATE DIALOG
Error occurred at: 08/30/2025, 18:34:59
Error description: Error BASE/1003 No existe la variable: NCANARTTAR
Stack Calls
===========
Called from: FUENTES\GESTION\INVENTARIOS\INTERFW2.PRG => (b)XLEEREGISTROS( 2445 )
Called from: \xharbour\source\rtl\tget.prg => TCLIPGET:VARGET( 1043 )
Called from: \xharbour\source\rtl\tget.prg => TCLIPGET:SETFOCUS( 913 )
Called from: .\source\classes\tget.prg => TGET:LOSTFOCUS( 2514 )
Called from: .\source\classes\control.prg => TGET:KILLFOCUS( 1196 )
Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1840 )
Called from: .\source\classes\tget.prg => TGET:HANDLEEVENT( 1329 )
Called from: C:\fwh24_10\source\classes\window.prg => _FWH( 3719 )
Called from: => DIALOGBOXINDIRECT( 0 )
Called from: .\source\classes\dialog.prg => TDIALOG:ACTIVATE( 325 )
Called from: FUENTES\COMUNES\errsysw_14_12.PRG => MYERRORZERUS( 484 )
Called from: FUENTES\COMUNES\errsysw_14_12.PRG => (b)ERRORSYS( 34 )
Called from: FUENTES\GESTION\INVENTARIOS\INTERFW2.PRG => (b)XLEEREGISTROS( 2445 )
Called from: \xharbour\source\rtl\tget.prg => TCLIPGET:VARGET( 1043 )
Called from: .\source\classes\tget.prg => TGET:GOTFOCUS( 3079 )
Called from: => TWINDOW:HANDLEEVENT( 0 )
Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1877 )
Called from: .\source\classes\tget.prg => TGET:HANDLEEVENT( 1329 )
Called from: C:\fwh24_10\source\classes\window.prg => _FWH( 3719 )
Called from: => DIALOGBOXINDIRECT( 0 )
Called from: .\source\classes\dialog.prg => TDIALOG:A
Error description: Error BASE/1003 No existe la variable: NCANARTTAR
Stack Calls
===========
Called from: FUENTES\GESTION\INVENTARIOS\INTERFW2.PRG => (b)XLEEREGISTROS( 2445 )
Called from: \xharbour\source\rtl\tget.prg => TCLIPGET:VARGET( 1043 )
Called from: \xharbour\source\rtl\tget.prg => TCLIPGET:SETFOCUS( 913 )
Called from: .\source\classes\tget.prg => TGET:LOSTFOCUS( 2514 )
Called from: .\source\classes\control.prg => TGET:KILLFOCUS( 1196 )
Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1840 )
Called from: .\source\classes\tget.prg => TGET:HANDLEEVENT( 1329 )
Called from: C:\fwh24_10\source\classes\window.prg => _FWH( 3719 )
Called from: => DIALOGBOXINDIRECT( 0 )
Called from: .\source\classes\dialog.prg => TDIALOG:ACTIVATE( 325 )
Called from: FUENTES\COMUNES\errsysw_14_12.PRG => MYERRORZERUS( 484 )
Called from: FUENTES\COMUNES\errsysw_14_12.PRG => (b)ERRORSYS( 34 )
Called from: FUENTES\GESTION\INVENTARIOS\INTERFW2.PRG => (b)XLEEREGISTROS( 2445 )
Called from: \xharbour\source\rtl\tget.prg => TCLIPGET:VARGET( 1043 )
Called from: .\source\classes\tget.prg => TGET:GOTFOCUS( 3079 )
Called from: => TWINDOW:HANDLEEVENT( 0 )
Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1877 )
Called from: .\source\classes\tget.prg => TGET:HANDLEEVENT( 1329 )
Called from: C:\fwh24_10\source\classes\window.prg => _FWH( 3719 )
Called from: => DIALOGBOXINDIRECT( 0 )
Called from: .\source\classes\dialog.prg => TDIALOG:A
-
russimicro
- Posts: 413
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Requiero explicacion error ACTIVATE DIALOG
Time from start: 6 hours 27 mins 32 secs
Error occurred at: 08/30/2025, 14:47:31
Error description: Error BASE/1002 No existe el alias: EMP
Stack Calls
===========
Called from: FUENTES\GESTION\INVENTARIOS\FACTCAPT.PRG => A_FACTCAPT_CAPTURA_( 708 )
Called from: FUENTES\GESTION\INVENTARIOS\FACTCAPT.PRG => A_FACTCAPT_CAPTURA( 70 )
Called from: FUENTES\COMUNES\FW_FUNCSST1.PRG => (b)MENUX( 2179 )
Called from: .\source\classes\menu.prg => TMENU:COMMAND( 1582 )
Called from: C:\fwh24_10\source\classes\window.prg => TWINDOW:COMMAND( 1178 )
Called from: => TWINDOW:HANDLEEVENT( 0 )
Called from: C:\fwh24_10\source\classes\window.prg => _FWH( 3719 )
Called from: => WINRUN( 0 )
Called from: C:\fwh24_10\source\classes\window.prg => TWINDOW:ACTIVATE( 1137 )
Called from: FUENTES\COMUNES\FW_FUNCSST3.PRG => PRINCIPAL_METRO( 7433 )
Called from: FUENTES\COMUNES\FW_FUNCSST1.PRG => PRINCIPAL( 1474 )
Called from: FUENTES\MAIN\ZerusMain.prg => ZERUSMAIN( 4605 )
Called from: zeruswin.prg => MAIN( 17 )
Error occurred at: 08/30/2025, 14:47:31
Error description: Error BASE/1002 No existe el alias: EMP
Stack Calls
===========
Called from: FUENTES\GESTION\INVENTARIOS\FACTCAPT.PRG => A_FACTCAPT_CAPTURA_( 708 )
Called from: FUENTES\GESTION\INVENTARIOS\FACTCAPT.PRG => A_FACTCAPT_CAPTURA( 70 )
Called from: FUENTES\COMUNES\FW_FUNCSST1.PRG => (b)MENUX( 2179 )
Called from: .\source\classes\menu.prg => TMENU:COMMAND( 1582 )
Called from: C:\fwh24_10\source\classes\window.prg => TWINDOW:COMMAND( 1178 )
Called from: => TWINDOW:HANDLEEVENT( 0 )
Called from: C:\fwh24_10\source\classes\window.prg => _FWH( 3719 )
Called from: => WINRUN( 0 )
Called from: C:\fwh24_10\source\classes\window.prg => TWINDOW:ACTIVATE( 1137 )
Called from: FUENTES\COMUNES\FW_FUNCSST3.PRG => PRINCIPAL_METRO( 7433 )
Called from: FUENTES\COMUNES\FW_FUNCSST1.PRG => PRINCIPAL( 1474 )
Called from: FUENTES\MAIN\ZerusMain.prg => ZERUSMAIN( 4605 )
Called from: zeruswin.prg => MAIN( 17 )
-
russimicro
- Posts: 413
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Requiero explicacion error ACTIVATE DIALOG
Para aclarar... no es que tenga un error que no deje funcionar la app... NO
este error se presenta muy esporadicamente... por decir algo asi : 1 de 10000 ejecuciones, pero no siempre en el mismo metodo--
a mi no se me presentan (desarrollo)
Publique el INTERFW2.PRG completo para que los miembros del foro lo lean.:
@ 508,10 GET oGetArt VAR M->cCodigoTar ;
OF oCapInv ;
PICTURE "XXXXXXXXXXXXXXXX";
PIXEL ;
SIZE 220*nAjuAnc,40;
FONT M->oFonAc12;
NOBORDER;
UPDATE ;
COLOR CLR_WHITE, IF(SW_FONDO,RGB(114,192,70),RGB(0,112,188) );
VALID( ValidaEnterArticulo(oGetArt,M->cCodigoTar,oPreVen,@cPreVen,oTipDes,@cTipDes,cCodTer,oTransp)
Error description: Error BASE/1002 No existe el alias: TRA ?? Como tu hace el apertura?
este error se da porque ejecuta un valid de un get del formulario ya cerrado (abre y cierra tablas en cada formulario), si ejecuto el valid (ValidaEnterArticulo), de un formulario ya cerrado es logico el error de tabla cerrada-
osea el error se tiene que dar porque no hay tabla abierta... la pregunta es porque se ejcuto esete valid.... desde aqui :
Called from: \xharbour\source\rtl\tget.prg => TCLIPGET:VARGET( 1043 )
Called from: \xharbour\source\rtl\tget.prg => TCLIPGET:SETFOCUS( 913 )
Called from: .\source\classes\tget.prg => TGET:LOSTFOCUS( 2514 )
Called from: .\source\classes\control.prg => TGET:KILLFOCUS( 1196 )
Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1840 )
Gracias, tks, Regards, saludos.
este error se presenta muy esporadicamente... por decir algo asi : 1 de 10000 ejecuciones, pero no siempre en el mismo metodo--
a mi no se me presentan (desarrollo)
Publique el INTERFW2.PRG completo para que los miembros del foro lo lean.:
@ 508,10 GET oGetArt VAR M->cCodigoTar ;
OF oCapInv ;
PICTURE "XXXXXXXXXXXXXXXX";
PIXEL ;
SIZE 220*nAjuAnc,40;
FONT M->oFonAc12;
NOBORDER;
UPDATE ;
COLOR CLR_WHITE, IF(SW_FONDO,RGB(114,192,70),RGB(0,112,188) );
VALID( ValidaEnterArticulo(oGetArt,M->cCodigoTar,oPreVen,@cPreVen,oTipDes,@cTipDes,cCodTer,oTransp)
Error description: Error BASE/1002 No existe el alias: TRA ?? Como tu hace el apertura?
este error se da porque ejecuta un valid de un get del formulario ya cerrado (abre y cierra tablas en cada formulario), si ejecuto el valid (ValidaEnterArticulo), de un formulario ya cerrado es logico el error de tabla cerrada-
osea el error se tiene que dar porque no hay tabla abierta... la pregunta es porque se ejcuto esete valid.... desde aqui :
Called from: \xharbour\source\rtl\tget.prg => TCLIPGET:VARGET( 1043 )
Called from: \xharbour\source\rtl\tget.prg => TCLIPGET:SETFOCUS( 913 )
Called from: .\source\classes\tget.prg => TGET:LOSTFOCUS( 2514 )
Called from: .\source\classes\control.prg => TGET:KILLFOCUS( 1196 )
Called from: .\source\classes\control.prg => TCONTROL:HANDLEEVENT( 1840 )
Gracias, tks, Regards, saludos.
Last edited by russimicro on Tue Sep 02, 2025 7:38 pm, edited 1 time in total.
Re: Requiero explicacion error ACTIVATE DIALOG
Por ahora, olvídate de las clases de FIVEWIN y concéntrate en tu código: LOS ERRORES ESTÁN EN TU CÓDIGO, algo que escribiste mal. Publicar: función, ValidaEnterArticulo() completa, por favor.
Gracias, tks.
Gracias, tks.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
-
russimicro
- Posts: 413
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Requiero explicacion error ACTIVATE DIALOG
Code: Select all | Expand
#command DBSELECTAREA <(AREA)> => SelectArea_Inv( <(AREA)> )
FUNCTION ValidaEnterArticulo(oGetArt,cCodArt,oPreVen,cPreVen,oTipDes,cTipDes,cCodTer,oTransp)
LOCAL SW := 1, cLisPre := ""
LOCAL cPatLoc := "C:\TEMP"
IF (oGetArt:nLastKey == 103 .or. oGetArt:nLastKey == 100 .or. oGetArt:nLastKey == 65 .or. oGetArt:nLastKey == 68 .or. oGetArt:nLastKey == 83) .AND. !EMPTY(ALLTRIM(cCodArt))
cCodigoTar := SPACE(16)
oGetArt:REFRESH()
oGetArt:SetFocus()
RETURN .T.
ENDIF
verificaAliasCerradas("VALIDA ENTERARTICULO") // HASTA AQUI LLEGA... PORQUE LA TABLA ESTA CERRADA JUNTO CON EL DIALOGO..
// PODRIA HACER APERTURA SI TABLA ESTA CERRADA...
// PERO LO QUIERO ENTENER PRIMERO ES POR SE INVOCO ESTE VALID... YA CERRADO
cambiaTemp(@cPatLoc)
IF SELECT("LEC") == 0
IF !lUsaTab(cPatLoc+'\',M->FileLTE,"LEC",{},.F.,NIL,"DBFCDX")
RETURN .F.
ENDIF
ENDIF
IF SELECT("CLI") == 0
IF !lUsaTab(M->cPatSis+'\',"CLIENTES.DAT","CLI",{"CLIENTES.CDX"},.T.)
RETURN .F.
ENDIF
DBSEEK_FW(NIL,"CLI",cCodCli)
/*
CLI->( DBGOTOP() )
CLI->( DBSEEK( cCodCli ) )
*/
ENDIF
IF SELECT("CON") == 0
IF !lUsaTab(M->cPatSis+'\','CONCEPTO.DAT','CON',{'CONCEPTO.CDX'},.T.)
RETURN .F.
ENDIF
// PARA USO DESDE OTRAS FUNCIONES.. DONDE NO ESTA DEFINIDO " M->cCodCon"
TRY
IF !( ALLTRIM(M->cNomUsr) == "SUPERVISOR" .OR. M->cUsrEsp == "S" )
IF !M->xAnexar
FiltraConceptosPorCaja(cOriReg)
ENDIF
ENDIF
CON->( DBGOTOP() )
IF !lLocCodigo('cCodigoCon','CON', M->cCodCon) // .AND. CON->( !EOF() )
CON->( DBGOTOP() )
M->cCodCon := CON->cCodigoCon
ENDIF
CATCH
END
END
SELECT LEC
IF LEC->( EOF() )
cTipDes := CLI->cTipDesCli
IF !(cTipDes $ '1234')
cTipDes := "1"
ENDIF
IF CON->cTipMovCon == '50' .OR. CON->cTipMovCon == '20' .OR. ( CON->cTipMovCon == '70' .AND. CON->cPreVenCon $ "0123456789" )
IF CON->cPreVenCon $ "0123456789"
cPreVen := CON->cPreVenCon
ELSE
cPreVen := CLI->cPreVenCli
ENDIF
cLisPre := ""
IF PARAMETRO(150,@cLisPre)
cPreVen := cLisPre
ENDIF
IF EMPTY(ALLTRIM(cPreVen))
cPreVen := "0"
ENDIF
ELSE
IF CON->cPreVenCon == 'C' .OR. CON->cPreVenCon == 'F' .OR. CON->cPreVenCon == 'U' .OR. EMPTY(CON->cPreVenCon)
cPreVen := "C"
ELSE
cPreVen := CON->cPreVenCon
IF cPreVen == "V"
cPreVen := CLI->cPreVenCli
ENDIF
IF EMPTY(ALLTRIM(cPreVen))
cPreVen := "C"
ENDIF
ENDIF
ENDIF
// MANEJO ESPECIAL PARAQUE SUGIERA EL COSTO FIJO O ALMACEN
IF CON->cTipMovCon == '70' .OR. CON->cTipMovCon == '50' .OR. CON->cTipMovCon == '10'
IF !EMPTY(ALLTRIM(CON->cPreVenCon))
IF UPPER(CON->cPreVenCon) == 'C' .OR. UPPER(CON->cPreVenCon) == 'F' .OR. UPPER(CON->cPreVenCon) == 'U'
cPreVen := "C"
lCosFij := 0
IF UPPER(CON->cPreVenCon) == "F"
lCosFij := 1
ELSEIF UPPER(CON->cPreVenCon) == "U"
lCosFij := 2
ENDIF
ENDIF
ENDIF
ENDIF
TRY
oPreVen:Refresh()
oTipDes:Refresh()
CATCH
END
ENDIF
IF PARAMETRO(103)
IF EMPTY(cCodigoTar)
RETURN .F.
ENDIF
ENDIF
TRY
IF ( oGetArt:nLastKey == 13 .OR. oGetArt:nLastKey == 9 .OR. oGetArt:nLastKey == 65 ) .AND. EMPTY(ALLTRIM(cCodArt))
IF !((oBotF02:lFocused) .OR. (oBotF03:lFocused) .OR.;
(oBotF04:lFocused) .OR. (oBotF05:lFocused) .OR.;
(oBotF06:lFocused) .OR. (oBotF07:lFocused) .OR.;
(oBotF08:lFocused) .OR. (oBotF09:lFocused) .OR.;
(oBotF10:lFocused) .OR. (oBotF11:lFocused) .OR.;
(oBotF12:lFocused) .OR. (oBotF01:lFocused) .OR.;
(oBotMan:lFocused) .OR. (oBotAnu:lFocused) .OR.;
(oBotCpt:lFocused) .OR. (oBotCli:lFocused) .OR.;
(oBotImp:lFocused) .OR. (oBotCaj:lFocused) .OR.;
(oBotIva:lFocused) .OR. (oBotRes:lFocused) .OR.;
(oBotDiv:lFocused) .OR. (oBotTer:lFocused) .OR.;
(oBotCal:lFocused) .OR. (oBotEsc:lFocused) .OR.;
(oBotBon:lFocused) .OR. (oBotPun:lFocused) .OR.;
(oComBox:lFocused) .OR. (oGetCli:lFocused) .OR.;
(oComVen:lFocused) .OR.;
(oBotBod:lFocused) .OR.;
(oTransp:lFocused) .OR. (oPlaFac:lFocused) .OR.;
(oBotManCli:lFocused) .OR. (oBotProPag:lFocused) .OR.;
(oFinFac:lFocused) .OR. (oGetTer:lFocused) .OR.;
(oDocRef:lFocused) .OR. (oDtoCom:lFocused) )
oGetArt:SetFocus()
oGetArt:REFRESH()
SW := 0
ENDIF
ENDIF
oDocRef:lFocused := .F.
oBotF10:lFocused := .F.
oBotF11:lFocused := .F.
oBotF02:lFocused := .F.
oBotF08:lFocused := .F.
CATCH
SW := 0
END
IF PARAMETRO(109)
reemplazacomilacodebar(@cCodArt)
cCodigoTar := cCodArt
oGetArt:REFRESH()
ENDIF
IF oGetArt:nLastKey <> 13 .AND. !EMPTY(cCodigoTar) .AND. LEN(cCodigoTar) <> 16
mymen("Aviso. Para ejecutar otro proceso, debe ingresar un c¢digo de referencia o dejarlo vacio")
cCodigoTar := SPACE(16)
oGetArt:REFRESH()
oGetArt:SetFocus()
ENDIF
IF EMPTY(cTipDes)
cTipDes := "1"
ENDIF
IF (oGetArt:nLastKey == 103 .or. oGetArt:nLastKey == 100 .or. oGetArt:nLastKey == 65 .or. oGetArt:nLastKey == 68 .or. oGetArt:nLastKey == 83) .AND. !EMPTY(ALLTRIM(cCodArt))
cCodigoTar := SPACE(16)
oGetArt:REFRESH()
oGetArt:SetFocus()
RETURN .T.
ENDIF
RETURN IF(SW==1,.T.,.F.)
//******************************************************************
FUNCTION verificaAliasCerradas(cNomPro)
LOCAL cAliAct := ALIAS()
SELECT("LEC")
SELECT("CON")
SELECT("TRA")
SELECT("MOV")
SELECT("PAG")
SELECT("CAR")
SELECT("EMP")
SELECT("CLA")
SELECT("ART")
IF SELECT(cAliAct) <> 0
SELECT(cAliAct)
ENDIF
RETURN
Re: Requiero explicacion error ACTIVATE DIALOG
Muchos años atrás, cuando trabaja con DBFs y con unos 40 usuarios, no tenía problemas.
Luego la empresa fue creciendo y los usuarios fueron aumentando, cuando llegué a los 100 usuarios en promedio, empezaron aparecer el problema de "Error BASE/1002 No existe el alias:", no entendía el problema, porque el Aplicativo siempre había funcionado bien. Por lo tanto, empece a investigar pero no daba con el problema, y los usuarios fueron aumentando así como el problema de "Error BASE/1002 No existe el alias:", además de errores con los índices. Entendí que la cantidad de transacciones sobre varias tablas principales terminaban bloqueadas de vez en cuando (creo que por la cantidad de concurrencia de los usuarios).
Así que decidí migrar a Sql-server (poco a poco) y asunto arreglado.
Esa fue es mi experiencia.
Luego la empresa fue creciendo y los usuarios fueron aumentando, cuando llegué a los 100 usuarios en promedio, empezaron aparecer el problema de "Error BASE/1002 No existe el alias:", no entendía el problema, porque el Aplicativo siempre había funcionado bien. Por lo tanto, empece a investigar pero no daba con el problema, y los usuarios fueron aumentando así como el problema de "Error BASE/1002 No existe el alias:", además de errores con los índices. Entendí que la cantidad de transacciones sobre varias tablas principales terminaban bloqueadas de vez en cuando (creo que por la cantidad de concurrencia de los usuarios).
Así que decidí migrar a Sql-server (poco a poco) y asunto arreglado.
Esa fue es mi experiencia.
-
russimicro
- Posts: 413
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Requiero explicacion error ACTIVATE DIALOG
Buen dia....
Gracias por responder...
Si efectivamente estoy en proceso de pasar a sql - fivewin,,,, y dejar dbfs y SQLRDD...
Pero hay otra realidad.. en los servidores con windows server + terminal server (RDP) , y con clientes de mayor numero de transacciones y usuarios... no es muy frecuente, pasan meses sin errores de este tipo..
podria ser algo en el entorno windows pc , que genera estos cierres esporadicos...
Tambien tenia muchos errores con xbrowse setrdd... pero antonio publico una version que redujo estos errores
Sigo tratando de identificar que factor externo afecta al sistema o ante que eventos del codigo usado o forma de programacion , es que se generarn estas anormalidades..
Observacion : No puede ser error de sintaxis, dado que este codigo lo usan mas de 400 clientes en los ultimos 20 años... y en mi entorno de desarrollo y con clientes con windows server , no se presenta... Al ser esporadicos los clientes paracticamente no lo notan y no lo reportan... (se sale del sistema a ingresan ).... pero como a mi llegan los correos con el log de errores, directamente generado por la aplicacion, de todos los clientes (10 aprox. al dia)... es donde se genera la inquietud de que esta pasando y que para mi no tiene errores de logica de programación...pero estoy buscando el concepto y ayuda de un experto que me ayude a identificar la causa del problema...
Gracias
Gracias por responder...
Si efectivamente estoy en proceso de pasar a sql - fivewin,,,, y dejar dbfs y SQLRDD...
Pero hay otra realidad.. en los servidores con windows server + terminal server (RDP) , y con clientes de mayor numero de transacciones y usuarios... no es muy frecuente, pasan meses sin errores de este tipo..
podria ser algo en el entorno windows pc , que genera estos cierres esporadicos...
Tambien tenia muchos errores con xbrowse setrdd... pero antonio publico una version que redujo estos errores
Sigo tratando de identificar que factor externo afecta al sistema o ante que eventos del codigo usado o forma de programacion , es que se generarn estas anormalidades..
Observacion : No puede ser error de sintaxis, dado que este codigo lo usan mas de 400 clientes en los ultimos 20 años... y en mi entorno de desarrollo y con clientes con windows server , no se presenta... Al ser esporadicos los clientes paracticamente no lo notan y no lo reportan... (se sale del sistema a ingresan ).... pero como a mi llegan los correos con el log de errores, directamente generado por la aplicacion, de todos los clientes (10 aprox. al dia)... es donde se genera la inquietud de que esta pasando y que para mi no tiene errores de logica de programación...pero estoy buscando el concepto y ayuda de un experto que me ayude a identificar la causa del problema...
Gracias
Re: Requiero explicacion error ACTIVATE DIALOG
Buenas tardes, fíjense bien donde escribí: "AQUÍ".
Regards, saludos.
Code: Select all | Expand
AQUI:
// PARA? CUAL FINALIDAD? NO CONOCO. SORRY.
#command DBSELECTAREA <(AREA)> => SelectArea_Inv( <(AREA)> )
FUNCTION ValidaEnterArticulo( oGetArt, cCodArt, oPreVen, cPreVen, oTipDes, ;
cTipDes, cCodTer, oTransp )
LOCAL SW := 1, cLisPre := ""
LOCAL cPatLoc := "C:\TEMP"
IF ( oGetArt:nLastKey == 103 .OR. oGetArt:nLastKey == 100 .OR. ;
oGetArt:nLastKey == 65 .OR. oGetArt:nLastKey == 68 .OR. ;
oGetArt:nLastKey == 83 ) .AND. !EMPTY( ALLTRIM( cCodArt ) )
cCodigoTar := SPACE( 16 )
oGetArt:VARPUT( cCodigoTar ) // AQUI
oGetArt:REFRESH()
oGetArt:SetFocus() // ???
RETURN( .T. )
ENDIF
// AQUI
// PARA? NO DEBES CERRAR LAS TABLAS EN TIEMPO REAL Y SI AL SALIR DEL SISTEMA
verificaAliasCerradas( "VALIDA ENTERARTICULO" ) // HASTA AQUI LLEGA... PORQUE LA TABLA ESTA CERRADA JUNTO CON EL DIALOGO..
// PODRIA HACER APERTURA SI TABLA ESTA CERRADA...
// PERO LO QUIERO ENTENER PRIMERO ES POR SE INVOCO ESTE VALID... YA CERRADO
// PONGA UN MSGRUN()
cambiaTemp( @cPatLoc ) // VERIFIQUE, FUNCIONA BIEN?
IF SELECT( "LEC" ) == 0
IF !lUsaTab( cPatLoc + '\', M->FileLTE, "LEC", {}, .F. , NIL, "DBFCDX" )
// MENSAGERIA DE AVISO?
RETURN( .F. )
ENDIF
ENDIF
IF SELECT( "CLI" ) == 0
IF !lUsaTab( M->cPatSis + '\', "CLIENTES.DAT", "CLI", { "CLIENTES.CDX" }, .T. )
// MENSAGERIA?
RETURN( .F. )
ENDIF
// DBSEEK_FW -> NO CONOCO.
DBSEEK_FW( NIL, "CLI", cCodCli ) // AQUI -> QUE TERRIBLE ??
IF( .NOT. FOUND() ) // AQUI
// MENSAGERIA
RETURN( .F. )
ENDIF
/*
CLI->( DBGOTOP() )
CLI->( DBSEEK( cCodCli ) )
*/
ENDIF
IF SELECT( "CON" ) == 0 // ???
// AQUI, FUNCIONA BIEN?
IF !lUsaTab( M->cPatSis + '\', 'CONCEPTO.DAT', 'CON', { 'CONCEPTO.CDX' }, .T. )
// MENSAGERIA?
RETURN( .F. )
ENDIF
// PARA USO DESDE OTRAS FUNCIONES.. DONDE NO ESTA DEFINIDO " M->cCodCon"
TRY
IF !( ALLTRIM(M->cNomUsr) == "SUPERVISOR" .OR. M->cUsrEsp == "S" )
IF !M->xAnexar
FiltraConceptosPorCaja(cOriReg)
ENDIF
ENDIF
CON->( DBGOTOP() )
IF !lLocCodigo( 'cCodigoCon', 'CON', M->cCodCon ) // .AND. CON->( !EOF() )
CON->( DBGOTOP() )
M->cCodCon := CON->cCodigoCon
ENDIF
CATCH
END // AQUI ??? DOS END? NO ME HACE SENTIDO! ???
END
SELECT LEC
IF LEC->( EOF() ) // AQUI ???
cTipDes := CLI->cTipDesCli
IF !( cTipDes $ '1234' )
cTipDes := "1"
ENDIF
IF CON->cTipMovCon == '50' .OR. CON->cTipMovCon == '20' .OR. ( CON->cTipMovCon == '70' .AND. CON->cPreVenCon $ "0123456789" )
IF CON->cPreVenCon $ "0123456789"
cPreVen := CON->cPreVenCon
ELSE
cPreVen := CLI->cPreVenCli
ENDIF
cLisPre := ""
IF PARAMETRO( 150, @cLisPre )
cPreVen := cLisPre
ENDIF
IF EMPTY( ALLTRIM( cPreVen ) )
cPreVen := "0"
ENDIF
ELSE
IF CON->cPreVenCon == 'C' .OR. CON->cPreVenCon == 'F' .OR. ;
CON->cPreVenCon == 'U' .OR. EMPTY( CON->cPreVenCon )
cPreVen := "C"
ELSE
cPreVen := CON->cPreVenCon
IF cPreVen == "V"
cPreVen := CLI->cPreVenCli
ENDIF
IF EMPTY( ALLTRIM( cPreVen ) )
cPreVen := "C"
ENDIF
ENDIF
ENDIF
// MANEJO ESPECIAL PARAQUE SUGIERA EL COSTO FIJO O ALMACEN
IF CON->cTipMovCon == '70' .OR. CON->cTipMovCon == '50' .OR. ;
CON->cTipMovCon == '10'
IF !EMPTY( ALLTRIM( CON->cPreVenCon ) )
IF UPPER( CON->cPreVenCon ) == 'C' .OR. ;
UPPER( CON->cPreVenCon ) == 'F' .OR. ;
UPPER( CON->cPreVenCon ) == 'U'
cPreVen := "C"
lCosFij := 0
IF UPPER( CON->cPreVenCon ) == "F"
lCosFij := 1
ELSEIF UPPER( CON->cPreVenCon ) == "U"
lCosFij := 2
ENDIF
ENDIF
ENDIF
ENDIF
TRY // PARA?
oPreVen:Refresh()
oTipDes:Refresh()
CATCH
// NADA? AQUI
END
ENDIF
IF PARAMETRO( 103 )
IF EMPTY( cCodigoTar )
// MENSAGERIA?
RETURN( .F. )
ENDIF
ENDIF
TRY
IF ( oGetArt:nLastKey == 13 .OR. oGetArt:nLastKey == 9 .OR. ;
oGetArt:nLastKey == 65 ) .AND. EMPTY( ALLTRIM( cCodArt ) ) )
// NO COMPRENDO, ESTO FUNCIONA BIEN? MUCHAS CONDICIONES.
IF !( ( oBotF02:lFocused ) .OR. ( oBotF03:lFocused ) .OR. ;
( oBotF04:lFocused ) .OR. ( oBotF05:lFocused ) .OR. ;
( oBotF06:lFocused ) .OR. ( oBotF07:lFocused ) .OR. ;
( oBotF08:lFocused ) .OR. ( oBotF09:lFocused ) .OR. ;
( oBotF10:lFocused ) .OR. ( oBotF11:lFocused ) .OR. ;
( oBotF12:lFocused ) .OR. ( oBotF01:lFocused ) .OR. ;
( oBotMan:lFocused ) .OR. ( oBotAnu:lFocused ) .OR. ;
( oBotCpt:lFocused ) .OR. ( oBotCli:lFocused ) .OR. ;
( oBotImp:lFocused ) .OR. ( oBotCaj:lFocused ) .OR. ;
( oBotIva:lFocused ) .OR. ( oBotRes:lFocused ) .OR. ;
( oBotDiv:lFocused ) .OR. ( oBotTer:lFocused ) .OR. ;
( oBotCal:lFocused ) .OR. ( oBotEsc:lFocused ) .OR. ;
( oBotBon:lFocused ) .OR. ( oBotPun:lFocused ) .OR. ;
( oComBox:lFocused ) .OR. ( oGetCli:lFocused ) .OR. ;
( oComVen:lFocused ) .OR. ;
( oBotBod:lFocused ) .OR. ;
( oTransp:lFocused ) .OR. ( oPlaFac:lFocused ) .OR. ;
( oBotManCli:lFocused ) .OR. ( oBotProPag:lFocused ) .OR. ;
( oFinFac:lFocused ) .OR. ( oGetTer:lFocused ) .OR. ;
( oDocRef:lFocused ) .OR. ( oDtoCom:lFocused ) )
oGetArt:SetFocus()
oGetArt:REFRESH()
SW := 0
ENDIF
ENDIF
// ES BOTON? MEJOR USAR ENABLE/DISABLE -> AQUI
oDocRef:lFocused := .F.
oBotF10:lFocused := .F.
oBotF11:lFocused := .F.
oBotF02:lFocused := .F.
oBotF08:lFocused := .F.
CATCH
SW := 0
END
IF PARAMETRO( 109 )
reemplazacomilacodebar( @cCodArt ) // VERIFIQUE RETORNO AQUI
cCodigoTar := cCodArt
oGetArt:VARPUT( cCodigoTar ) // AQUI
oGetArt:REFRESH()
ENDIF
// AQUI
IF oGetArt:nLastKey != 13 .AND. !EMPTY( cCodigoTar ) .AND. ;
LEN( cCodigoTar ) != 16 // AQUI
mymen( "Aviso. Para ejecutar otro proceso, debe ingresar un c¢digo de referencia o dejarlo vacio" )
cCodigoTar := SPACE( 16 )
oGetArt:VARPUT( cCodigoTar ) // AQUI
oGetArt:REFRESH()
oGetArt:SetFocus()
ENDIF
IF EMPTY( cTipDes )
cTipDes := "1"
ENDIF
IF ( oGetArt:nLastKey == 103 .OR. oGetArt:nLastKey == 100 .OR. ;
oGetArt:nLastKey == 65 .OR. oGetArt:nLastKey == 68 .OR. ;
oGetArt:nLastKey == 83 ) .AND. !EMPTY( ALLTRIM( cCodArt ) )
cCodigoTar := SPACE( 16 )
oGetArt:VARPUT( cCodigoTar ) // AQUI
oGetArt:REFRESH()
oGetArt:SetFocus()
RETURN .T.
ENDIF
RETURN IF( SW == 1, .T. , .F. ) // FUNCIONA BIEN? YO NO HARIA ASI.
FUNCTION verificaAliasCerradas(cNomPro) // NO ME HACE SENTIDO ESTO.
LOCAL cAliAct := ALIAS()
// NO CIERRE LAS TABLAS EN TIEMPO REAL, SOLO AL SALIR DEL SISTEMA.
SELECT("LEC")
SELECT("CON")
SELECT("TRA")
SELECT("MOV")
SELECT("PAG")
SELECT("CAR")
SELECT("EMP")
SELECT("CLA")
SELECT("ART")
IF SELECT(cAliAct) <> 0
SELECT(cAliAct) // PORQUE?
IF( !EOF() ) // AQUI
? MENSAGERIA, cAliAct
ENDIF
ENDIF
RETURN NIL
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
- wilsongamboa
- Posts: 672
- Joined: Wed Oct 19, 2005 6:41 pm
- Location: Quito - Ecuador
Re: Requiero explicacion error ACTIVATE DIALOG
buenas tardes
Porque no usas ads server con poco cambio en codigo ya lo solucionarias
a la orden cualquier inquietud, al menos solucionarias hasta que migres a sql
saludos
Wilson
Porque no usas ads server con poco cambio en codigo ya lo solucionarias
a la orden cualquier inquietud, al menos solucionarias hasta que migres a sql
saludos
Wilson
Wilson 'W' Gamboa A
[email protected]
[email protected]
-
russimicro
- Posts: 413
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Requiero explicacion error ACTIVATE DIALOG
Buena tarde...
Si tambien lo uso... y efectivamente ha funcionado... pero por el precio no todos los clientes lo pueden comprar.. (remote)
Gracias
Si tambien lo uso... y efectivamente ha funcionado... pero por el precio no todos los clientes lo pueden comprar.. (remote)
Gracias
Re: Requiero explicacion error ACTIVATE DIALOG
Buenas estimados
Lo aconsejable es abrir las DBF como objeto y evitar los ALIAS
DATABASE oDBF
oDBF:NOMBRE en vez de ALIAS->NOMBRE
Usando las bases como objeto es mas facil migrar a MariaDB/MySql
La programación es la misma con algunas exepciones
Lo aconsejable es abrir las DBF como objeto y evitar los ALIAS
DATABASE oDBF
oDBF:NOMBRE en vez de ALIAS->NOMBRE
Usando las bases como objeto es mas facil migrar a MariaDB/MySql
Code: Select all | Expand
USE CUENTAS NEW SHARED
DATABASE oCTAS
oCTAS:=oCn:RowSet( "SELECT * FROM CUENTAS ORDER BY CODIGO")
Saludos,
Adhemar Cuéllar
-
russimicro
- Posts: 413
- Joined: Sun Jan 31, 2010 3:30 pm
- Location: Bucaramanga - Colombia
Re: Requiero explicacion error ACTIVATE DIALOG
Buen dia...
Gracias por responder...
Ya estoy en proceso de migracion a mariaDb con fivewin... con tres opciones : usando cursores nativos (rowset) o TarrayData o con tablas dbf temporales y locales... para NO mantener la tabla abierta y asi trabajar "desconectado" de la base de datos y hacer los procesos controlados al actualizar la base de datos (tradicional, socket, websocket...)... y asi mismo esta tecnica la puedo aplicar a tablas DBF'S, y asi tener dos opciones DBF O SQL...estables . Para determinar la opcion mas confiable y recomendada (tener estabilidad tecnica), estoy en proceso de iniciar una asesoria directa a mi plataforma de desarrollo, con el el maestro Cristobal Navarro..
La clase DATABASE tiene similitud en el manejo de un cursor, pero por su filosifa requiere mantener la tabla abierta... y este es parte de mi problema actual...cierre esporadico de tablas.... Pregunto : es viable trabajar DATABASE con tabla cerrada... y cuando requiera la data, se conecte y desconecte automaticamente ?
Saludos...
Gracias por responder...
Ya estoy en proceso de migracion a mariaDb con fivewin... con tres opciones : usando cursores nativos (rowset) o TarrayData o con tablas dbf temporales y locales... para NO mantener la tabla abierta y asi trabajar "desconectado" de la base de datos y hacer los procesos controlados al actualizar la base de datos (tradicional, socket, websocket...)... y asi mismo esta tecnica la puedo aplicar a tablas DBF'S, y asi tener dos opciones DBF O SQL...estables . Para determinar la opcion mas confiable y recomendada (tener estabilidad tecnica), estoy en proceso de iniciar una asesoria directa a mi plataforma de desarrollo, con el el maestro Cristobal Navarro..
La clase DATABASE tiene similitud en el manejo de un cursor, pero por su filosifa requiere mantener la tabla abierta... y este es parte de mi problema actual...cierre esporadico de tablas.... Pregunto : es viable trabajar DATABASE con tabla cerrada... y cuando requiera la data, se conecte y desconecte automaticamente ?
Saludos...
Re: Requiero explicacion error ACTIVATE DIALOG
russimicro wrote: Mon Sep 08, 2025 1:03 pm Buen dia...
Gracias por responder...
Ya estoy en proceso de migracion a mariaDb con fivewin... con tres opciones : usando cursores nativos (rowset) o TarrayData o con tablas dbf temporales y locales... para NO mantener la tabla abierta y asi trabajar "desconectado" de la base de datos y hacer los procesos controlados al actualizar la base de datos (tradicional, socket, websocket...)... y asi mismo esta tecnica la puedo aplicar a tablas DBF'S, y asi tener dos opciones DBF O SQL...estables . Para determinar la opcion mas confiable y recomendada (tener estabilidad tecnica), estoy en proceso de iniciar una asesoria directa a mi plataforma de desarrollo, con el el maestro Cristobal Navarro..
La clase DATABASE tiene similitud en el manejo de un cursor, pero por su filosifa requiere mantener la tabla abierta... y este es parte de mi problema actual...cierre esporadico de tablas.... Pregunto : es viable trabajar DATABASE con tabla cerrada... y cuando requiera la data, se conecte y desconecte automaticamente ?
Saludos...
En mi experiencia:
ANTERIORMENTE (Con DBFs), trabaja así:
1- Abría la tabla
2- obtenía la información Deseada.
3- Cerraba la tabla.
4- Con la información obtenida (Punto 2) realizaba lo siguiente:
4.1- Visualizar, Agregar Modificar, Eliminar.
4.2- En caso que el usuario Agregaba Modificaba o Eliminaba, realizaba lo siguiente:
- Abría la tabla
- Insertaba, Actualizaba o Eliminaba.
- Cerraba la tabla
** Pero como mencioné en un mensaje anterior, al aumentar los usuarios empezaron los problemas del "ALIAS"
ACTUALMENTE Con Motor de BD (Mysql, MariaDb, Sql-server, Oracle..etc)
1.- Me conecto a la BD.
2.- Obtengo la información (En un Array).
3.- Cierro la conexión.
4.- Con la información obtenida (Punto 2, en un Array ) realizo lo siguiente:
4.1- Visualizar, Agregar Modificar, Eliminar.
4.2- En caso que el usuario Agregue, Modifique o Elimine realizo lo siguiente:
4.2.1.- Me conecto a la BD.
4.2.2.- Agrego, Actualizo o Elimino en la BD
4.2.3.- Cierro la conexión.
4.2.4.- Actualizo en la grilla (XBrowse) los cambios.
Personalmente creo que usar CURSORES es como seguir usando DBFs.
>> Para determinar la opcion mas confiable y recomendada (tener estabilidad tecnica),
>> estoy en proceso de iniciar una asesoria directa a mi plataforma de desarrollo,
>> con el el maestro Cristobal Navarro..
Estarás en Buenas Manos.