Tdolphin

Tdolphin

Postby surGom » Sun May 22, 2016 3:39 pm

Hola compañeros, estoy modificando un programa que tengo hecho con tdolphin, en este prg tenía todos los campos referenciados con variables, y se comportaba correctamente.
Ahora al hacerlo directamente sobre el oQry, cuando doy de alta un nuevo registro me graba correctamente, pero al querer modificar un dato, si por ejemplo sobre ese campo lo deje en blanco cuando llamo el diálogo, esos campos vacios no me permite escribir sobre ellos y en el caso del campo INFORME que sí puedo no me graba las modificaciones

Gracias por su atención



Code: Select all  Expand view  RUN

#include "FIVEWIN.CH"
#include "tarray.ch"
#include "Tdolphin.ch"
#include "xbrowse.ch"

 

STATIC oQry, oLbx, oDlg
 


FUNCTION BrwClient(oMysql)
  LOCAL oRadioButton
  LOCAL nOrden:=1
  LOCAL nbut:= array(5)
  LOCAL cQuery := "SELECT * FROM maeclie ORDER by nape"
 
 
  oQry1:end()

  oQry := oMysql:Query( cQuery )




 DEFINE DIALOG oDlg RESOURCE "DIALOG_1"
  oDlg:cCaption := "Clientes"


  REDEFINE RADIO oRadioButton VAR nOrden id 105  OF oDlg

  oLbx := TxBrowse():New( oDlg )

  oLbx:SetDolphin( oQry )
  oLbx:CreateFromResource( 107 )
  oLbx:nColDividerStyle    := LINESTYLE_BLACK
  oLbx:nRowDividerStyle    := LINESTYLE_BLACK
  oLbx:lColDividerComplete := .T.
 

  olBX:bLDblClick := {|| Clientes(oQry,  .f.) }
  oLbx:aCols[1]:cHeader := "Código"
  oLbx:aCols[2]:cHeader := "Razón Social"
  oLbx:aCols[3]:cHeader := "Domicilio"
  oLbx:aCols[4]:cHeader := "Localidad"
  oLbx:aCols[5]:cHeader := "Nro Pcia"
  oLbx:aCols[6]:cHeader := "Cod Postal"
  oLbx:aCols[7]:cHeader := "Provincia"
  oLbx:aCols[8]:cHeader := "Teléfonos"
  oLbx:aCols[9]:cHeader := "Cuit"
  oLbx:aCols[10]:cHeader := "Iva"
  oLbx:aCols[11]:cHeader := "Tipo Iva"





  REDEFINE BUTTON nbut[1] id 101 of oDlg ACTION Clientes( oQry,.t.)
  REDEFINE BUTTON nbut[2] id 102 OF oDlg ACTION Clientes( oQry,  .f.)
  REDEFINE BUTTON nbut[3] id 103 OF oDlg ACTION ( Buscar(),Clientes(oQry,  .f.))
  REDEFINE BUTTON nbut[4] id 109 of oDlg ACTION borro()
  REDEFINE BUTTON nbut[5] id 108 OF oDlg ACTION oDlg:End()

  ACTIVATE DIALOG oDlg CENTER


RETURN( NIL )
//------------------------------------------------------------//

FUNCTION Clientes(  oQry, lNuevo)
  LOCAL oDlgCli
  LOCAL aivaa := {"Inscripto" , "No Inscripto", "Monotributo","Exento", "Cons. Final"}
  LOCAL lSalvar := .F.
  LOCAL nbut := array(3)
  LOCAL oCiva
  LOCAL oRadio, norden
  LOCAL oGet := array(8)
  LOCAL ivaa := ""
  LOCAL aMae := aCargar()
  LOCAL cDato := ""
  LOCAL aPcia := PROVIN()



   IF lNuevo
      oQry:GetBlankRow(.F.)
   endif

  DEFINE DIALOG oDlgCli resource "cliente_1"


  oDlgCli:cCaption:= "Edición de Clientes";

  redefine get  oGet[1]  VAR oQry:ncli id 101 of oDlgCli picture "9999"
  if lNuevo
      oGet[1]:disable()
  endif
  REDEFINE get  oGet[2]  VAR oQry:Nape id 102 of oDlgCli picture "@!"
  REDEFINE get  oGet[3]  VAR oQry:Domi id 103 of oDlgCli
  REDEFINE get  oGet[4]  VAR oQry:loca id 104 of oDlgCli
  REDEFINE get  oGet[5]  VAR oQry:Tele id 105 of oDlgCli
  REDEFINE combobox oGet[6]  VAR oQry:pcia items aPcia id 106 of oDlgCli
  REDEFINE get  oGet[7]  VAR oQry:cuit id 107 of oDlgCli picture "99-99999999-9"
  REDEFINE combobox  oGet[8]  VAR oQry:iva items aivaa id 108 of oDlgCli
  REDEFINE BUTTON nbut[1] id 109 of oDlgCli ACTION (lSalvar := .T.,oDlgCli:end())
  REDEFINE BUTTON nbut[2] id 110 OF oDlgCli ACTION oDlgCli:end()
  REDEFINE BUTTON nbut[3] id 111 OF oDlgCli ACTION  nmemo(lNuevo)            



  ACTIVATE DIALOG oDlgCli CENTER  // Todo definido?, Activamos la caja de di logo.

 IF lSalvar
    oQry:save()
    iif(!empty(oLbx),oLbx:refresh(),)       // Repintamos el objeto ListBox
  ENDIF

RETURN( NIL )
//------------------------------------------------------------//
static function borro()
 if msgyesno("Desea borrar este registro" + CRLF + oQry:nape)
   oQry:delete()
   olbx:refresh()
endif
return nil

//------------------------------------------------------------//
FUNCTION nmemo(lnuevo)
local lcancel := .f., oBut1, oBut2, oMem
local odMemo
local cDato := oQry:informe


DEFINE DIALOG odMemo RESOURCE "dialo_memo"

REDEFINE GET oMem VAR oQry:informe MEMO ID 101 of odMemo;
                   message "Datos varios del cliente" UPDATE;
                   MULTILINE

odMemo:bStart := { | | oMem:SetSel(0,0) }

REDEFINE BUTTON oBut1 ID 103 of odMemo ACTION (lcancel := .f.,odMemo:end());
                  message "Sale y Graba"
REDEFINE BUTTON oBut2 ID 102 of odMemo ACTION (lcancel := .t., odMemo:end());
                   message "Sale sin grabar"

ACTIVATE DIALOG odMemo

if !lcancel  
   oQry:informe := cdato
endif

return


//----------------------------------------------------------//
FUNCTION  Buscar( )
  busnap(olbx,oQry,,,,.t.)
return NIL
 


La tabla es la siguiente:

Code: Select all  Expand view  RUN
CREATE TABLE `maeclie` (
  `ncli` int(6) unsigned NOT NULL AUTO_INCREMENT,
  `nape` varchar(35) CHARACTER SET utf8 DEFAULT '""',
  `domi` varchar(30) CHARACTER SET utf8 DEFAULT '""',
  `loca` varchar(25) CHARACTER SET utf8 DEFAULT '""',
  `nropcia` int(1) DEFAULT '0',
  `cpos` int(6) DEFAULT '0',
  `pcia` varchar(30) CHARACTER SET utf8 DEFAULT '""',
  `tele` varchar(40) CHARACTER SET utf8 DEFAULT '""',
  `cuit` varchar(13) CHARACTER SET utf8 DEFAULT '""',
  `iva` varchar(12) CHARACTER SET utf8 DEFAULT '""',
  `informe` text CHARACTER SET utf8,
  UNIQUE KEY `codcli` (`ncli`)
) ENGINE=InnoDB AUTO_INCREMENT=1833 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: Tdolphin

Postby joseluisysturiz » Sun May 22, 2016 8:12 pm

Eso tambien me pasaba y es porque cuando se graban campos sin valor, estos se guardan NULL, cuando tratas de recuperarlos, entonces estan NULL y no hay edicion en el GET, mi solucion fue modificar las tablas y cuando defino mis campos, le asigno valores predeterminados de la siguiente manera:

tipo de campos valor default
char t var char---> Empty String
numericos ---> 0
date ---> '0000-00-00'

asi me evite esos problemas hasta, igual cuando grabo uso ClipValue2SQL() para los campos de tipo fecha y numericos

Espero te ayude mi solucion, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: Tdolphin

Postby leandro » Sun May 22, 2016 11:16 pm

Compañero buenas tardes
También me sucedió algo parecido, lo solucione creando la siguiente función:

Code: Select all  Expand view  RUN

METHOD cNoNulo(vPara,vEsPdo)

if valtype(vPara)="U"
  if vEsPdo="C"
    vValor:=space(0)
  elseif vEsPdo="N"
    vValor:=0
  elseif vEsPdo="T"
    vValor:=ctot(subs(time(),1,8))
  elseif vEsPdo="D"
    //vamos a probar con este
    //vValor:=ctod(" - - ")
    vValor:=date()
  endif
else
  vValor:=vPara
endif

RETURN vValor
 
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1688
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: Tdolphin

Postby Hector Pedro Lerda » Mon May 23, 2016 12:34 pm

Buen dia

El problema que tienes se produce porque estas ulizando campos varchar, estos campos a diferencia de los char guardan solo el contenido real del dato eliminando los espacios en blanco de la derecha. Por lo cual duando tu guardas sin valor y pornes por default "" el dato es sin espacio y eso te devuelve, prueba de cambiar el default por espacios y genera un registro nuevo y luego modificalo te tiene que andar bien.

`pcia` varchar(30) CHARACTER SET utf8 DEFAULT '""',
`tele` varchar(40) CHARACTER SET utf8 DEFAULT '""',
`cuit` varchar(13) CHARACTER SET utf8 DEFAULT '""',
`iva` varchar(12) CHARACTER SET utf8 DEFAULT '""',

Saludos Pedro Lerda
User avatar
Hector Pedro Lerda
 
Posts: 46
Joined: Tue May 07, 2013 7:27 pm
Location: Buenos Aires - Argentina

Re: Tdolphin

Postby surGom » Wed May 25, 2016 9:10 pm

Buenas noches gracias a por contestarme, no pude probar antes ya que estuve unos días con en cama. Probé las distintas opciones menos la de Leandro, por ahora.

Hice la opción de José luis y Héctor , modifique la tabla clientes con char(n) y default space string

Los resultados son los mismos es decir no me permite ingresar datos.

Además si quiero modificar un campo al aceptar no lo modifica.
Les muestro el código como quedo a ver si pueden darse cuenta del error de código que estoy comentinedo

Code: Select all  Expand view  RUN

#include "FIVEWIN.CH"
#include "tarray.ch"
#include "Tdolphin.ch"
#include "xbrowse.ch"


* * * *
* FUNCION    : BrwClient() -> NIL
* DESCRIPCION: Realiza un Browse de la base de datos Clientes.Dbf,
*              Permitiendo: Borrar o Modificar el registro actual,
*              Dar de alta Nuevo o Buscar registro.
* * * *

STATIC oLbx, oDlg



FUNCTION BrwClient(oMysql)

  LOCAL nbut:= array(5)

  LOCAL oQry

  LOCAL  cQuery := "SELECT * FROM maeclie ORDER by nape"

  oQry := oMysql:Query( cQuery )

  oQry:gotop()



 DEFINE DIALOG oDlg RESOURCE "DIALOG_1"
  oDlg:cCaption := "Clientes"


  REDEFINE RADIO oRadioButton VAR nOrden id 105  OF oDlg

  oLbx := TxBrowse():New( oDlg )

  oLbx:SetDolphin( oQry )
  oLbx:CreateFromResource( 107 )
  oLbx:nColDividerStyle    := LINESTYLE_BLACK
  oLbx:nRowDividerStyle    := LINESTYLE_BLACK
  oLbx:lColDividerComplete := .T.


  oLbx:bLDblClick := {|| Clientes(oQry,  .f.) }
  oLbx:aCols[1]:cHeader := "Código"
  oLbx:aCols[2]:cHeader := "Razón Social"
  oLbx:aCols[3]:cHeader := "Domicilio"
  oLbx:aCols[4]:cHeader := "Localidad"
  oLbx:aCols[5]:cHeader := "Nro Pcia"
  oLbx:aCols[6]:cHeader := "Cod Postal"
  oLbx:aCols[7]:cHeader := "Provincia"
  oLbx:aCols[8]:cHeader := "Teléfonos"
  oLbx:aCols[9]:cHeader := "Cuit"
  oLbx:aCols[10]:cHeader := "Iva"
  oLbx:aCols[11]:cHeader := "Tipo Iva"





  REDEFINE BUTTON nbut[1] id 101 of oDlg ACTION Clientes( oQry,.t.)
  REDEFINE BUTTON nbut[2] id 102 OF oDlg ACTION Clientes( oQry,  .f.)
  REDEFINE BUTTON nbut[3] id 103 OF oDlg ACTION ( Buscar( oQry ),Clientes(oQry,  .f.))
  REDEFINE BUTTON nbut[4] id 109 of oDlg ACTION borro( oQry )
  REDEFINE BUTTON nbut[5] id 108 OF oDlg ACTION oDlg:End()

  ACTIVATE DIALOG oDlg CENTER


RETURN( NIL )
//------------------------------------------------------------//

FUNCTION Clientes(  oQry, lNuevo)
  LOCAL oDlgCli
  LOCAL aivaa := {"Inscripto" , "No Inscripto", "Monotributo","Exento", "Cons. Final"}
  LOCAL lSalvar := .F.
  LOCAL nbut := array(3)
  LOCAL oCiva
  LOCAL oRadio, norden
  LOCAL oGet := array(8)
  LOCAL ivaa := ""
//  LOCAL aMae := aCargar()
  LOCAL cDato := ""
  LOCAL aPcia := PROVIN()

   IF lNuevo
       oQry:GetBlankRow(.F.)
   endif

  DEFINE DIALOG oDlgCli resource "cliente_1"


  oDlgCli:cCaption:= "Edición de Clientes";

  redefine get  oGet[1]  VAR oQry:ncli id 101 of oDlgCli picture "9999"
  if lNuevo
      oGet[1]:disable()
  endif
  REDEFINE get  oGet[2]  VAR oQry:Nape id 102 of oDlgCli picture "@!"
  REDEFINE get  oGet[3]  VAR oQry:Domi id 103 of oDlgCli  
  REDEFINE get  oGet[4]  VAR oQry:loca id 104 of oDlgCli
  REDEFINE get  oGet[5]  VAR oQry:Tele id 105 of oDlgCli  
  REDEFINE combobox oGet[6]  VAR oQry:pcia items aPcia id 106 of oDlgCli
  REDEFINE get  oGet[7]  VAR oQry:cuit id 107 of oDlgCli picture "99-99999999-9"
  REDEFINE combobox  oGet[8]  VAR oQry:iva items aivaa id 108 of oDlgCli  
  REDEFINE BUTTON nbut[1] id 109 of oDlgCli ACTION (lSalvar := .T.,oDlgCli:end())
  REDEFINE BUTTON nbut[2] id 110 OF oDlgCli ACTION oDlgCli:end()
  REDEFINE BUTTON nbut[3] id 111 OF oDlgCli ACTION cDato := nmemo(lNuevo,oQry:informe)



  ACTIVATE DIALOG oDlgCli CENTER  // Todo definido?, Activamos la caja de di logo.

 IF lSalvar
    oQry:informe := cDato
    oQry:save()
    iif(!empty(oLbx),oLbx:refresh(),)       // Repintamos el objeto ListBox
  ENDIF

RETURN( NIL )
//------------------------------------------------------------//
static function borro(oQry)
 if msgyesno("Desea borrar este registro" + CRLF + oQry:nape)
   oQry:delete()
   oLbx:refresh()
endif
return nil

//------------------------------------------------------------//
FUNCTION nmemo(lnuevo,cDato)
local lcancel := .f., oBut1, oBut2, oMem
local odMemo
local cOldato := cDato



DEFINE DIALOG odMemo RESOURCE "dialo_memo"

REDEFINE GET oMem VAR cDato MEMO ID 101 of odMemo;
                   message "Datos varios del cliente" UPDATE;
                   MULTILINE

odMemo:bStart := { | | oMem:SetSel(0,0) }

REDEFINE BUTTON oBut1 ID 103 of odMemo ACTION (lcancel := .f.,odMemo:end());
                  message "Sale y Graba"
REDEFINE BUTTON oBut2 ID 102 of odMemo ACTION (lcancel := .t., odMemo:end());
                   message "Sale sin grabar"

ACTIVATE DIALOG odMemo

if !lcancel
  return cDato
endif

return cOldato

//----------------------------------------------------------//
FUNCTION  Buscar(oQry )
  busnap(oLbx,oQry,,,,.t.)
return NIL

/**************************************************************************************************/
 



Muchas gracias

Luis
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: Tdolphin

Postby MarioG » Mon May 30, 2016 2:03 pm

Gente;
Uso TDolphin y tambien he experimentado esta situación.
Al principió deduje que era lógico porque al guardar VARCHAR vacio... recupera vacio :wink:
Pero despues comprobé, que lo mismo ocurria con los CHAR
Asi es que, lo que hago en el código es:
Code: Select all  Expand view  RUN
     aO[_oData]:= ::oQryT:GetRowObj()

      if Len( aO[_oData]:RazSocial ) == 0
          aO[_oData]:RazSocial:=  Space( 50 )
      end
      if Len( aO[_oData]:CodPos ) == 0
         aO[_oData]:CodPos:= Space( 8 )
      end
      ...
 

Leyendo este post. Probé como sugiere Pedro:
Code: Select all  Expand view  RUN
                              "RazSocial    VARCHAR(50) DEFAULT ''," + ;
                                 "CodPos       CHAR(8) DEFAULT '',"     + ;
 
Sin resultado positivo
Y tambien probé asi (a sabiendas de que estaría guardando campos solo con espacios... bue en dbfs siempre lo hacemos y nos no preguntamos sobre ese deperdicio :) ):
Code: Select all  Expand view  RUN
                              "RazSocial    VARCHAR(50) DEFAULT '"+Space(50)+"'," + ;
                                 "CodPos       CHAR(8) DEFAULT '"+Space(8)+"',"     + ;
 
Tampoco dá resultado
Asi es que por ahora lo dejo como indico al inicio.
Lo anecdótico: tengo una tabla de 40 campos!... y fue un poco tedioso construir cada if - end :?

Lo que me resulta raro es que nadie reporto esto antes.. o si? (yo uso TDolphin desde no hace mucho)
Daniel!; algun comentario?
gracias

Uso MariaDB 10.1.10 Enterprise
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Tdolphin SOLUCIONADO

Postby surGom » Mon May 30, 2016 2:47 pm

Mario estaba justo replicando que la solución que encontré fue hacer lo que vos muy bien explicas, y cuando levanto la vista veo tu post. Así lo hice:

Code: Select all  Expand view  RUN

  if lNuevo
      odata := oQry:GetBlankRow( )
  else
      odata :=  oQry:GetRowObj( )
       if Empty(oData:cuit)
         oData:cuit := Space(13)
      endif
      if Empty(oData:tele)
         oData:tele := Space(45)
      endif
      if Empty(oData:domi)
         oData:domi:= Space(45)
      endif
      if Empty(oData:loca)
         odata:loca:= Space(45)
      endif
  endif
 


Ahora funciona bien, igual me parece que tendría que haber una forma que al llamarlo aunque sea null lo inicializara, estas tablas estaban como varchar, y en el programa que compilaba con tymsql de wormar, no me hacía problemas, por eso la confusión.
El sábado también descubrí oQry:GetRowObj( ), que cuando utilizaba variables no lo usaba

Ej:

Code: Select all  Expand view  RUN

   IF lNuevo
            oQry:GetBlankRow( )
   else
           aMae:ncli := oQry:ncli
       aMae:Nape := oQry:Nape
           aMae:Domi := oQry:Domi
       aMae:loca := oQry:loca
       aMae:Tele := oQry:Tele
       aMae:pcia := oQry:pcia
       aMae:cuit := oQry:cuit
       aMae:ivaa := oQry:iva
       aMae:nropcia := oQry:nropcia
       aMae:cpos := oQry:cpos
       aMae:informe := oQry:informe
   endif
 


Gracias a todos por ayudarme

Luis
surGom
 
Posts: 640
Joined: Wed Oct 19, 2005 12:03 pm

Re: Tdolphin

Postby MarioG » Mon May 30, 2016 2:54 pm

buenisimo!
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Tdolphin

Postby MarioG » Mon Aug 01, 2016 3:02 pm

Hola Gente;
retomo este post porque me ocurre que teniendo definidos, entre otros, campos como los siguientes:

Code: Select all  Expand view  RUN
   "piso          SMALLINT(3) UNSIGNED DEFAULT 0,"   + ;
   ...
   "DNI           BIGINT(10)  UNSIGNED DEFAULT 0,"   + ; 

En el fuente lo tengo así:
Code: Select all  Expand view  RUN
  REDEFINE GET oData:piso ID 108 OF aO[_FldEx]:aDialogs[1] ;
            PICTURE "@999" COLOR CLR_BLACK, CLR_BACKAMAR
   REDEFINE GET oData:DNI ID 106 OF aO[_FldEx]:aDialogs[1] UPDATE ;
            PICTURE "@9999999999" COLOR CLR_BLACK, CLR_BACKAMAR
 

Pasa que si agrego un registro y a estos campos no los valorizo, o sea por defecto se guarda 0 (cero) tal como esta definido; luego, al editarlos
no me deja agregar mas que un digito!
Como se trata estos campos? (se que podría pasarlos a char), pero no creo que sea lo óptimo.

gracias
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Tdolphin

Postby xmanuel » Mon Aug 01, 2016 7:56 pm

El problema es de la clase TGet de FWH heredado de TGet de (x)Hb que guarda el ancho del valor que se va a editar.
Code: Select all  Expand view  RUN

// Tal vez si hicieras esto podrías solucionarlo:
     if empty(  oData:piso )
           oData:piso := "000"
     endif
     if empty( oData:DNI )
          oData:DNI := "0000000000"
     endif
       REDEFINE GET oData:piso ID 108 OF aO[_FldEx]:aDialogs[1] ;
                PICTURE "@K 999" COLOR CLR_BLACK, CLR_BACKAMAR
       REDEFINE GET oData:DNI ID 106 OF aO[_FldEx]:aDialogs[1] UPDATE ;
                PICTURE "@K 9999999999" COLOR CLR_BLACK, CLR_BACKAMAR
     
 
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 763
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: Tdolphin

Postby MarioG » Mon Aug 01, 2016 8:24 pm

Manu; gracias por responder
Creo que no me explique bien o, no se me entendió
Los campos son numericos!
En post previos, discutimos sobre lo que pasa con campos VARCHAR que se guardan si valor (""), y la opción es proceder como sugerís
Si el problema fuera de TGET, entonces debería pasar lo mismo si lo hago con un DBF... pero nunca me sucedió
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Tdolphin

Postby MarioG » Tue Aug 02, 2016 1:56 pm

Retomo y expongo según lo que investigué
Tengo definido los siguientes campos numericos
Code: Select all  Expand view  RUN
CUIT          BIGINT(11)  UNSIGNED NOT NULL,
DNI           BIGINT(10)  UNSIGNED NOT NULL

En la definicion del recurso tengo
Code: Select all  Expand view  RUN
  REDEFINE GET oData:CUIT ID 104 OF aO[_FldEx]:aDialogs[1] UPDATE ;
            PICTURE "@ZR 99-99999999-9" COLOR CLR_BLACK, CLR_BACKAMAR
  REDEFINE GET  oData:DNI ID 106 OF aO[_FldEx]:aDialogs[1] UPDATE ;
            PICTURE "@ 99999999" COLOR CLR_BLACK, CLR_BACKAMAR

Luego, si procedo a un proceso de Insertar, en ambos campos se guarda, por defecto, el valor 0
Posteriormente al editar (update) pasa lo siguiente:
el Get con valor oData:CUIT permite agregar un valor previsto
el Get con valor oData:DNI NO permite agregar un valor mayor a un dígito

Por ahora para solucionarlo hago lo siguiente:
Code: Select all  Expand view  RUN
if oData:DNI == 0
   nDNI:= 0
end
...
  REDEFINE GET  nDNI ID 106 OF aO[_FldEx]:aDialogs[1] UPDATE ;
            PICTURE "@ 99999999" COLOR CLR_BLACK, CLR_BACKAMAR


Cuál es el porque?
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Tdolphin

Postby CARLOS ATUNCAR » Mon May 14, 2018 2:08 am

Buenas lo solucione creando esa funcion

Function LenVar( cVar,ctype,nLen )

If cType="C"
cVar:=cVar+Space(nlen-Len(cVar))
ElseIf cType="D"
If Valtype( cVar)="C"
cVar:=ctod("")
Endif
Endif

Return cVar

cVar es el campo de la consulta
ctype el tipo de dato del campo
nLen es el tamaño del campo

con esto puedo obtener el tamaño original del campo creado
Carlos Atuncar - CaSoftSystem
Chincha - Perú
carlosalbatun@gmail.com
CARLOS ATUNCAR
 
Posts: 176
Joined: Thu Sep 17, 2015 11:40 pm
Location: Chincha - Peru

Re: Tdolphin

Postby nnicanor » Thu May 17, 2018 4:25 am

Buenos dias,

Hace tiempo se me presento el mismo problema por lo que hice cambios en este método que devuelve los valores de las columnas.

Code: Select all  Expand view  RUN

//-------------------------------------------------//

METHOD VerifyValue( nIdx, cField ) CLASS TDolphinQry

   LOCAL cType, uValue
   LOCAL nPad

   cType := ::aStructure[ nIdx ][ MYSQL_FS_CLIP_TYPE ] //, ::aStructure[ nIdx ][ MYSQL_FS_TYPE ]

   SWITCH cType
      CASE "L"
         IF cField == NIL .OR. Empty(cField)
             uValue := If( IS_NOT_NULL( ::aStructure[ nIdx ][ MYSQL_FS_DEF ] ), ::aStructure[ nIdx ][ MYSQL_FS_DEF ],.F.)
         ELSE
            uValue := If( ValType( cField ) == "L", cField, !( Val( cField ) == 0 ) )
         ENDIF
         EXIT

      CASE "N"

         IF cField == NIL .OR. Empty(cField)
            uValue := If( IS_NOT_NULL( ::aStructure[ nIdx ][ MYSQL_FS_DEF ] ),::aStructure[ nIdx ][ MYSQL_FS_DEF ], 0 )
         ELSE
            uValue := If( ValType( cField ) == "N", cField, Val( cField ) )
         ENDIF
         EXIT

      CASE "D"
         IF Empty( cField ) .OR. Empty(cField)
            uValue := If( IS_NOT_NULL( ::aStructure[ nIdx ][ MYSQL_FS_DEF ] ), ::aStructure[ nIdx ][ MYSQL_FS_DEF ] ,CToD( "" ) )
         ELSE
            uValue := If( ValType( cField ) == "D", cField, SqlDate2Clip( cField ) )
         ENDIF
         EXIT
      CASE "M"
         // we can not use PadR in  memo field
         IF ( cField == NIL .OR. Empty(cField) )
            uValue := ""
         ELSE
            uValue := cField
         ENDIF
         EXIT
      CASE "T"
      CASE "C"
         IF D_SetPadRight()
            nPad := Min( If( ::aStructure[ nIdx ][ MYSQL_FS_MAXLEN ] > ::aStructure[ nIdx ][ MYSQL_FS_LENGTH ],;
                      ::aStructure[ nIdx ][ MYSQL_FS_MAXLEN ], ::aStructure[ nIdx ][ MYSQL_FS_LENGTH] ), MAX_BLOCKSIZE )
         ELSE
            nPad := 0
         ENDIF
         IF ( cField == NIL .OR. Empty(cField) )
            uValue := PadR(If( IS_NOT_NULL( ::aStructure[ nIdx ][ MYSQL_FS_DEF ] ), ::aStructure[ nIdx ][ MYSQL_FS_DEF ], "" ),nPad)
         ELSE
            uValue := PadR( cField, Max( Len( cField ), nPad ) )
         ENDIF

         EXIT
#ifdef __XHARBOUR__
      DEFAULT
#else
      OTHERWISE
#endif
  //       uValue = cField
      ENDSWITCH

RETURN uValue
 


Saludos,
Nicanor Martinez M.
Auditoria y Sistemas Ltda.
MicroExpress Ltda.
FW + FWH + XHARBOUR + HARBOUR + PELLES C + XDEVSTUDIO + XEDIT + BCC + VC_X86 + VCC_X64 + MINGW + R&R Reports + FastReport + Tdolphin + ADO + MYSQL + MARIADB + ORACLE
nnicanor@yahoo.com
nnicanor
 
Posts: 302
Joined: Fri Apr 23, 2010 4:30 am
Location: Colombia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 29 guests