FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Raro error en tDolphin
Posts: 104
Joined: Wed Mar 08, 2006 02:24 PM
Raro error en tDolphin
Posted: Fri Oct 27, 2017 02:44 AM
Hola Foro, tengo un error que me esta volviendo loco.
Cuando ejecuto el Sistema en una m谩quina que tiene Windows 10 con el MySql instalado con la aplicaci贸n XAMPP no me arroja error, pero cuando lo ejecuto en un Servidor que tiene Windows Server 2008 me arroja el error de clave duplicada.
A continuaci贸n pongo el c贸digo:

Code (fw): Select all Collapse
PROCEDURE EditDeu(lAppend)

聽 聽Local vCod:=0, lSave:=.F., oCDeu, oLoca, oProvi, oCodPos, oTele
聽 聽Public cNomDeu :=Space(30), nNumDoc :=0

聽 聽If lAppend
聽 聽 聽 oQryDeu:GetBlankRow(.F.)
聽 聽 Else
聽 聽 聽 oQryDeu:GetRow()
聽 聽EndIf

聽 聽DEFINE DIALOG UDlgE RESOURCE "DATOSDEUDOR" ;
聽 聽 聽 TITLE If( lAppend, "AGREGAR DEUDOR", "MODIFICAR DEUDOR" )

聽 聽REDEFINE SAY oCDeu VAR oQryDeu:Codigo 聽ID 21 OF UDlgE

聽 聽REDEFINE DBCOMBO oTipoDoc VAR oQryDeu:TipoDoc ID 22 OF UDlgE ;
聽 聽 聽 聽 聽 聽 聽 聽 ALIAS oQryDocu ITEMFIELD "coddocu" LISTFIELD "nomdocu" ;
聽 聽 聽 聽 聽 聽 聽 聽 UPDATE

聽 聽REDEFINE GET oQryDeu:NroDoc 聽 ID 23 OF UDlgE picture '999,999,999'

聽 聽REDEFINE DBCOMBO oTipoIva 聽VAR oQryDeu:t_cuit ID 4003 OF UDlgE ;
聽 聽 聽 聽 聽 聽 聽 聽 ALIAS oQryIva ITEMFIELD "codiva" LISTFIELD "nomiva" ;
聽 聽 聽 聽 聽 聽 聽 聽 UPDATE

聽 聽REDEFINE GET oQryDeu:n_cuit 聽 ID 4005 OF UDlgE picture '99-99999999-9'

聽 聽REDEFINE DBCOMBO oTipoCiv VAR oQryDeu:esta_civil ID 4006 OF UDlgE ;
聽 聽 聽 聽 聽 聽 聽 聽 ALIAS oQryCivil ITEMFIELD "codcivil" LISTFIELD "nomcivil" ;
聽 聽 聽 聽 聽 聽 聽 聽 UPDATE

聽 聽REDEFINE GET oQryDeu:Nombres 聽ID 32 OF UDlgE picture '@!' //;
// 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 VALID BusNom(lAppend,oQryDeu:Nombres,oQryDeu:NroDoc)
聽 聽REDEFINE GET oQryDeu:Direc 聽 聽ID 25 OF UDlgE picture '@!'

聽 聽REDEFINE DBCOMBO oBarru VAR oQryDeu:CodBarr ID 26 OF UDlgE ;
聽 聽 聽 聽 聽 聽 ALIAS oQryBarr ITEMFIELD "ccodigo" LISTFIELD "nombre" ;
聽 聽 聽 聽 聽 聽 ON CHANGE (ActuBarrio(3,oQryDeu:CodBarr), oLoca:Refresh(), oProvi:Refresh(), oCodPos:Refresh()) ;
聽 聽 聽 聽 聽 聽 UPDATE

聽 聽REDEFINE GET oLoca 聽 VAR 聽oQryDeu:Locali 聽 ID 27 OF UDlgE picture '@!'
聽 聽REDEFINE GET oProvi 聽VAR 聽oQryDeu:Provi 聽 聽ID 28 OF UDlgE picture '@!'
聽 聽REDEFINE GET oCodPos VAR 聽oQryDeu:CodPos 聽 ID 30 OF UDlgE
聽 聽REDEFINE GET oTele 聽 VAR 聽oQryDeu:Telefono ID 31 OF UDlgE

聽 聽REDEFINE GET oQryDeu:Trabaja 聽ID 36 OF UDlgE
聽 聽REDEFINE GET oQryDeu:Ocupa 聽 聽ID 34 OF UDlgE
聽 聽REDEFINE GET oQryDeu:Ult_Act 聽ID 33 OF UDlgE
聽 聽REDEFINE GET oQryDeu:Obser 聽 聽ID 35 OF UDlgE
聽 聽REDEFINE GET oQryDeu:email 聽 聽ID 4002 OF UDlgE

聽 聽REDEFINE BTNBMP oBtnA ID 250 OF UDlgE MESSAGE "Graba el Deudor..." ;
聽 聽 聽 聽 FILE "./BmpN/Grabar_24.PNG" PROMPT "Grabar" LEFT ;
聽 聽 聽 聽 聽 聽 ACTION (MsgAlert(oQryDeu:Nombres),lSave:=.T., UDlgE:End());

聽 聽REDEFINE BTNBMP oBtnC ID 240 OF UDlgE MESSAGE "Cancela el Movimiento..." ;
聽 聽 聽 聽 FILE "./BmpN/Cancelar.bmp" PROMPT "Cancelar" LEFT ;
聽 聽 聽 聽 聽 聽 聽 聽ACTION UDlgE:End()

聽 聽ACTIVATE DIALOG UDlgE CENTERED

聽 聽MsgAlert(oQryDeu:Nombres)

聽 聽If lAppend
聽 聽 聽 If !lCargaDeu
聽 聽 聽 聽 聽MsgAlert("Usuario no Autorizado para cargar Deudores...!")
聽 聽 聽 聽 聽lSave:=.F.
聽 聽 聽 EndIf
聽 聽 聽Else
聽 聽 聽 If !lModiDeu
聽 聽 聽 聽 聽MsgAlert("Usuario no Autorizado para Modificar Deudores...!")
聽 聽 聽 聽 聽lSave:=.F.
聽 聽 聽 EndIf
聽 聽EndIf
聽 聽If lSave
聽 聽 聽If lAppend
聽 聽 聽 聽 聽oQryDeu:lAppend := .T.
聽 聽 聽 EndIf
聽 聽 聽 oQryDeu:Save()
聽 聽 聽 oQryDeu:Refresh()
聽 聽EndIf
Return Nil


Puse dos MsgAlert para ver la secuencia y en el primero me muestra El nombre de quien quiero dar de alta pero en el segundo me muestra el nombre del primer registro de la tabla, es como que cuando saliera del dialogo se ubicara al comienzo de la tabla.

Lo mas extra帽o es que con otras tablas funciona bien, por ejemplo el siguiente c贸digo
Code (fw): Select all Collapse
PROCEDURE EditEsta(lAppend)

   Local oEstaDi, oEstaPa, oEstaVi, lSave:=.F.

   oQryE2 := oServer:Query( "SELECT codigo, descrip FROM estados ORDER BY codigo ASC" )

   DEFINE FONT oFont30  NAME "Times New Roman" SIZE 0,-30 BOLD
   DEFINE FONT oFont20  NAME "Times New Roman" SIZE 0,-20 BOLD
   DEFINE FONT oFont14  NAME "Times New Roman" SIZE 0,-14 BOLD

   If lAppend
      oQryEsta:GetBlankRow(.F.)
    Else
      oQryEsta:GetRow()
   EndIf

   DEFINE DIALOG UDlgE RESOURCE "DATOSESTA" ;
      TITLE If( lAppend, "AGREGAR ESTADO", "MODIFICAR ESTADO" )

   REDEFINE GET oQryEsta:Codigo    ID 100 OF UDlgE picture '999' COLOR "N/W" FONT oFont20
   REDEFINE GET oQryEsta:Descrip   ID 101 OF UDlgE picture '@!'  COLOR "N/W" FONT oFont20
   REDEFINE RADIO oTipoEsta VAR oQryEsta:TEstado  ID 102, 103 OF UDlgE

   REDEFINE GET oQryEsta:Dia_Movi  ID 104 OF UDlgE picture '999'

   REDEFINE DBCOMBO oEstaDi  VAR oQryEsta:Codigo_D  ID 105 OF UDlgE ;
          ALIAS oQryE2 ITEMFIELD "codigo" LISTFIELD "descrip"

   REDEFINE DBCOMBO oEstaPa  VAR oQryEsta:Codigo_P ID 106 OF UDlgE ;
          ALIAS oQryE2 ITEMFIELD "codigo" LISTFIELD "descrip"

   REDEFINE DBCOMBO oEstaVi  VAR oQryEsta:Codigo_V ID 107 OF UDlgE ;
          ALIAS oQryE2 ITEMFIELD "codigo" LISTFIELD "descrip"

   REDEFINE BTNBMP oBtnA ID 250 OF UDlgE MESSAGE "Graba el Deudor..." ;
        FILE "./BmpN/Grabar_24.PNG" PROMPT "Grabar" LEFT ;
            ACTION (lSave:=.T., UDlgE:End());

   REDEFINE BTNBMP oBtnC ID 240 OF UDlgE MESSAGE "Cancela el Movimiento..." ;
        FILE "./BmpN/Cancelar.bmp" PROMPT "Cancelar" LEFT ;
               ACTION UDlgE:End()

   ACTIVATE DIALOG UDlgE CENTERED

   If lSave
     If lAppend
         oQryEsta:lAppend := .T.
      EndIf
      oQryEsta:Save()
      oQryEsta:Refresh()
   EndIf

   oQryE2:End()
   oFont30:End()
   oFont20:End()
   oFont14:End()

Return Nil


funciona bien, muy raro el error....
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Raro error en tDolphin
Posted: Fri Oct 27, 2017 03:05 AM

En el primer ejemplo oQryDeu no existe en el modulo, imagino que debe ser una Qurery global, porque tampoco la pasas por parametro.
Deberias revisar que hace el codigo que llama a la funcion EditDeu. Tal vez ahi es donde hace mover la Query.

Posts: 104
Joined: Wed Mar 08, 2006 02:24 PM
Re: Raro error en tDolphin
Posted: Fri Oct 27, 2017 03:35 AM

Hola CmSoft, lo solucione haciendo que grabe en una funci贸n sin salir del dialogo, pero lo que me llama la atenci贸n es que con un sistema operativo daba error y con otro no, cosa de mandinga, jajaja
Ahora que recuerdo me paso tambi茅n cuando trabajaba en DBFs y usaba la clase TDatabase, nada m谩s que no me tiraba error sino que me modificaba el primer registro de la DBF, aqu铆 al definir como autoincremental el c贸digo del Deudor arrojaba el error.
Gracias

Posts: 989
Joined: Thu Nov 24, 2005 03:01 PM
Re: Raro error en tDolphin
Posted: Sun Oct 29, 2017 10:45 AM

Caducca,

eso de que la query que esta en un registro y se mueve se debe a que cuando se cierra el di谩logo, windows repinta la(s) ventanas que estan abajo inmediatamente. Si la ventana de abajo es un browse, al repintarse empieza a moverse por la query o dbf para ir pintando los registros visibles, dejando el cursor en cualquier lado. Windows NO ESPERA QUE TERMINES DE ACTUALIZAR EL REGISTRO que estas modificando en el di谩logo que cerraste, repinta en cuanto dijiste oDlg:close. Para cuando llegaste a la actualizacion del registro ya esta la base cambiada.
Se soluciona como hiciste, actualizando antes de cerrar, o bien editando el registro sobre algo que no sea la propia query. Yo prefiero evitar la edicion sobre la propia query, por que es muy 'a la dbf'', y aunque haya que hace run poco mas de esfuerzo, mejor trabajar sobre variables independientes en cada dialogo que el repintado de otra ventana me pueda cambiar. Hay que tener en cuenta que estas en WINDOWS.

Un saludo

Saludos
Carlos Mora
http://harbouradvisor.blogspot.com/
StackOverflow http://stackoverflow.com/users/549761/carlos-mora
鈥淚f you think education is expensive, try ignorance"
Posts: 104
Joined: Wed Mar 08, 2006 02:24 PM
Re: Raro error en tDolphin
Posted: Sun Oct 29, 2017 12:36 PM

Gracias Carlos Mora, lo tendr茅 en cuenta para evitar este error que me volvi贸 loco.

Continue the discussion