Tdolphin

Post Reply
surGom
Posts: 624
Joined: Wed Oct 19, 2005 12:03 pm
Contact:

Tdolphin

Post by surGom »

Hola compañeros, estoy modificando un programa que tengo hecho con tdolphin, en este prg tenía todos _ 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, _ 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

#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

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
User avatar
joseluisysturiz
Posts: 2024
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela
Contact:

Re: Tdolphin

Post by joseluisysturiz »

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 _ de tipo fecha y numericos

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

Gracias a mi Dios ante todo!
User avatar
leandro
Posts: 958
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Contact:

Re: Tdolphin

Post by leandro »

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

Code: Select all

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 ALFONSO
SISTEMAS LYMA - BASE
Bogotá (Colombia)
[ FWH 19.09 ] [ xHarbour 1.2.3 Intl. (SimpLex) (Build 20190613) ] [ Embarcadero C++ 7.30 for Win32 ]
User avatar
Hector Pedro Lerda
Posts: 46
Joined: Tue May 07, 2013 7:27 pm
Location: Buenos Aires - Argentina

Re: Tdolphin

Post by Hector Pedro Lerda »

Buen dia

El problema que tienes se produce porque estas ulizando campos varchar, _ 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
surGom
Posts: 624
Joined: Wed Oct 19, 2005 12:03 pm
Contact:

Re: Tdolphin

Post by surGom »

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

#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
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Tdolphin

Post by MarioG »

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

      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

                               "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

                               "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
surGom
Posts: 624
Joined: Wed Oct 19, 2005 12:03 pm
Contact:

Re: Tdolphin SOLUCIONADO

Post by surGom »

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

  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

   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
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Tdolphin

Post by MarioG »

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

Re: Tdolphin

Post by MarioG »

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

Code: Select all

   "piso          SMALLINT(3) UNSIGNED DEFAULT 0,"   + ;
   ...
   "DNI           BIGINT(10)  UNSIGNED DEFAULT 0,"   + ; 
En el fuente lo tengo así:

Code: Select all

   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 _ 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 _? (se que podría pasarlos a char), pero no creo que sea lo óptimo.

gracias
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: Tdolphin

Post by xmanuel »

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

// 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
User avatar
MarioG
Posts: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Tdolphin

Post by MarioG »

Manu; gracias por responder
Creo que no me explique bien o, no se me entendió
_ 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: 1356
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: Tdolphin

Post by MarioG »

Retomo y expongo según lo que investigué
Tengo definido los siguientes campos numericos

Code: Select all

CUIT          BIGINT(11)  UNSIGNED NOT NULL,
DNI           BIGINT(10)  UNSIGNED NOT NULL, 
En la definicion del recurso tengo

Code: Select all

   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 _ 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

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
CARLOS ATUNCAR
Posts: 41
Joined: Thu Sep 17, 2015 11:40 pm

Re: Tdolphin

Post by CARLOS ATUNCAR »

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
nnicanor
Posts: 296
Joined: Fri Apr 23, 2010 4:30 am
Location: Colombia

Re: Tdolphin

Post by nnicanor »

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

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

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