Page 1 of 1

Algo nuevo o es Error de TDolphin.?

PostPosted: Mon Oct 13, 2014 4:55 pm
by joseluisysturiz
Saludos, normalmente defino mis VAR con un switch de valor logico para controlar si es registro nuevo o es modificado, ejemplo:

aVar[1] := IIF( lNew, 0, oQry:campo1 ) // campo de tipo numero (int, double, decimal, etc)
aVAr[2] := IIF( lNew, space(10), oQry:campo2) // campo de tipo string
aVar[3] := IIF( lnew, date(), oQry:campo3 ) campo tipo fecha

hasta alli todo esta bien, el problema esta ocurriendo cuando grabo en los campos y el valor de la VAR sigue siendo cero(0) o esta vacio, ya que no se graba en el campo el valor cero de la VAR sino se graba como NULL al igual que si la VAR esta vacia, esto hace que cuando voy a modificar mi campo y la VAR toma el valor del campo de la tabla, se inicia en NULL y asi no me permite editarlo, esto esta sucediendo en la ultima actualizacion de la LIB de TDolphin ya que por casualidad tenia una LIB vieja y alli si trabaja bien, el problema es que tengo sistemas de clientes donde valido si el valor del campo es cero o mayor que cero al igual que los tipos fechas y ahora esas validaciones me arrojan error ya que el valor del campo numerico es NULL y no cero como lo mande guardar....para los nuevos sistemas estoy haciendo directamente en la tabla que el valor por default sera CERO, pero tengo sistemas que tiene full datos y que solo funciona con los registros nuevos. Tambien tuve que cambiar la forma de iniciar mis VAR de la siguiente manera

aVar[n] ;= iif( lNew .or. empty(oqry:campo), 0, oqry:campo)

nose si a alguno le sucede lo mismo o si es un problema mio en mis tablas o si es algun cambio que le hayan hecho a la TDolphin, agradezo sus comentarios, sugerencias y observaciones, gracias, saludos... :shock:

Re: Algo nuevo o es Error de TDolphin.?

PostPosted: Mon Oct 13, 2014 5:22 pm
by acuellar
Yo pensé que era así de normal que grababa NULL en los campos VARCHAR, por lo que tuve que ponerle el carácter ASCII 255 para grabe y luego poder editarlo
y los campos fecha le gurado '01-01-1001'
Code: Select all  Expand view

   If ClipValue2SQL(oQry:FECHANAC)="NULL"
     oQry:FECHANAC:=ctod('01-01-1001')
   Endif
     oQry:NOMBRE:=If(Empty(oQry:NOMBRE),Chr(255), )
 


Así funciona. Claro que no debiera ser así.

Saludos,

Adhemar

Re: Algo nuevo o es Error de TDolphin.?

PostPosted: Mon Oct 13, 2014 5:44 pm
by joseluisysturiz
Saludos, pues no acuellar, eso que haces tambien lo hice, pero es muy tedioso, se puede hacer al principio de inicializacion de las VAR o cuando se va a grabar como lo haces, pero originalmente lo hacia bien sin hacer tantas validaciones, habria que ver que nos comenta Daniel, si se debe trabajar asi de ahora en adelante, si es algun detalle que se paso en la ultima version o alguna otra sugerencia, es bueno saber que no es a mi el unico que lepasa, crei era algo en mis sistemas, saludos... :shock:

Re: Algo nuevo o es Error de TDolphin.?

PostPosted: Mon Oct 13, 2014 11:10 pm
by sysctrl2
En los campos CHAR y NUMERICOS
cuando se crea la tabla,
debes de poner valores deault,

CAMPO 1 DECIMAL( 10, 2 ) DEFAUL 0.00

saludos..

Re: Algo nuevo o es Error de TDolphin.?

PostPosted: Tue Oct 14, 2014 12:46 am
by joseluisysturiz
Si SYSCTRL, asi es que lo estoy haciendo ahora en los sistemas nuevos, pero antes no hacia falta iniciar en la tabla en cero los campos numericos, asi he resuelto ese tipo de campos, pero que me dices sobre los campor VARCHAR, aunque los ponga por default string vacio (Empty String) al guardarlos sin valor, es decir que la VAR queda vacia, igual los guarda NULL al igual que los campos FECHAS, por los momentos hay que hacer truquitos para evitar los errores de validaciones, gracias y saludos... :shock:

Re: Algo nuevo o es Error de TDolphin.?

PostPosted: Tue Oct 14, 2014 1:42 pm
by Willi Quintana
Hola amigos,,,
Llevo trabajando con MySQL desde el 2005, con diversas herramientas, pero lo mas importante esta en el diseño de las tablas, el uso correcto de los tipos de datos, la diferencia entre char() y varchar(), la longitud de los campor numéricos, los índices etc etc, talvez estamos acostumbrados a las facilidades que nos brinda las dbfs, pero en SQL las cosas con distintas, mi consejo es que todos los campor de una tabla en SQL deben ser indicadas con valores por defecto,,, de otro modo pede surgir un valor nulo que es distinto a vacio o cero.
Code: Select all  Expand view

CREATE TABLE `kardexcliente` (
`registro` int(10) unsigned NOT NULL auto_increment,
`cod_producto` varchar(20) NOT NULL default '',
`modo` char(1) default '',
`fecha_doc` date NOT NULL default '0000-00-00',
`tipo` varchar(2) default ' ',
`documento` varchar(22) NOT NULL default '',
`cantidad` decimal(15,3) default '0.000',
`saldo` decimal(15,3) default '0.000',
`costo` decimal(15,3) default '0.000',
`cod_prov_clie` varchar(15) default '' COMMENT 'ruc o dni del proveedor o del cliente destino',
`cod_operador` varchar(10) default '',
`fecha_operacion` date NOT NULL default '0000-00-00',
`hora_operacion` varchar(8) NOT NULL default '00:00:00',
`precio_venta` decimal(12,3) default '0.000',
`estado` char(1) default ' ',
`concre` int(10) unsigned NOT NULL default '1',
`glosa` varchar(45) default '',
`num_pedido` varchar(14) NOT NULL default '              ',
`fecha_pedido` date NOT NULL default '0000-00-00',
`cod_vendedor` varchar(5) NOT NULL default '',
`guiaremision` VARCHAR(22) DEFAULT '',
`cod_almacen` VARCHAR(2) DEFAULT '01',            
`fecha_doc_guia` date NOT NULL default '0000-00-00',
`fecha_ope_guia` date NOT NULL default '0000-00-00',
`hora_ope_guia` varchar(8) NOT NULL default '00:00:00',
PRIMARY KEY  (`registro`,`cod_producto`),
KEY `Producto` (`cod_producto`),
KEY `Documento` (`documento`),
KEY `Operador` (`cod_operador`),
KEY `Fecha_Documento` (`fecha_doc`),
KEY `Fecha_Operacion` (`fecha_operacion`),
KEY `Vendedor` (`cod_vendedor`),
KEY `Pedido` (`num_pedido`),
KEY `FechaPedido` (`fecha_pedido`),
KEY `Guia` (`guiaremision`),
KEY `Almacen` (`cod_almacen`)
ENGINE=InnoDB DEFAULT CHARSET=latin1;