In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Campo Virtual en MariaDB

Foro público de Xailer en español
Responder
Avatar de Usuario
gerencia
Mensajes: 282
Registrado: Sab Jun 20, 2009 6:01 pm

Campo Virtual en MariaDB

Mensaje por gerencia »

Hola Ignacio,

He añadido unos campos virtuales a una tabla de Mariadb, pero al intentar Insertar un nuevo registro desde
un Dataset con Update() intenta Insertar también los campos virtuales.

La columna nomcompleto es un campo VIRTUAL(`nomcompleto` char(130) AS (IF(pjuridica=1,nomcli,CONCAT(TRIM(nomcli),' ',TRIM(apellcli) ) )) VIRTUAL COMMENT 'Nombre Completo')

El INSERT y el UPDATE no deberían ignorar los campos Virtuales ?


El error,

MariaDB:INSERT INTO m_clientes( codcli, pjuridica, nomcli, apellcli, nomcompleto, nomcomer, nombre, tipcli, ti_ident, no_ident, digver, cupo_cre, barrio, dircli, dircli2, direccion, telcli, telcli2, telcli3, Telefonos, codmun, ciudcli, coddep, contacto, referen, clasifica, email, apdo, zona, vdor, Observacion, estado, desc_pro, desc_fin, dia_vcto, tipovta, rec_fact, cop_fact, ult_com, ult_pag, ult_liq, porc_int, ret_fte, ret_iva, ret_ica, ret_cre, exento, exenimpoc, bloqueado, blocupcre, cliweb, codpre, sdoant, fltinici, fltfin, fltonoff, baserete, porcrete, servrete, porcsret, baserica, porcrica, servrica, porcsica, baseriva, porcriva, basecree, porccree, servcree, porcscree, NombreFe, EmailFe, TeleFe, CeluFe, fapertura, uapertura, linhabilitado, ldelete ) VALUES( '92502305', 0, '', 'Angulo U', '', '', '', '', 2, '92452305', '', 0, '', 'Av. Venezulea', '', '', '', '', '', '', '01', '', '01', '', '', '', '', '', '', '', '', '', 0, 0, 0, 0, 0, 0, '0000-00-00', '0000-00-00', '0000-00-00', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, '0000-00-00', '0000-00-00', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Jose', 'gerencia@mi.com', '', '', '0000-00-00', '', 0, 0 )
The value specified for computed column 'nomcompleto' in table 'm_clientes' ignored [# 1906]


Gracias por tu colaboración,
Jose David Angulo Urzola
Auditoria y Sistemas Ltda.
Cartagena-Colombia
hgarciaj
Mensajes: 107
Registrado: Jue Sep 23, 2010 12:44 am

Re: Campo Virtual en MariaDB

Mensaje por hgarciaj »

Tomado de la base de conocimientos de MariaDB:

If you try to insert non-default values into a virtual column, you will receive a warning and what you tried to insert will be ignored and the derived value inserted instead:

WARNINGS;
Show warnings enabled.

INSERT INTO table1 VALUES (1, 'some text',default,default);
Query OK, 1 row affected (0.00 sec)

INSERT INTO table1 VALUES (2, 'more text',5,default);
Query OK, 1 row affected, 1 warning (0.00 sec)

Warning (Code 1645): The value specified for computed column 'c' in table 'table1' ignored.

INSERT INTO table1 VALUES (123, 'even more text',default,'something');
Query OK, 1 row affected, 2 warnings (0.00 sec)

Warning (Code 1645): The value specified for computed column 'd' in table 'table1' ignored.
Warning (Code 1265): Data truncated for column 'd' at row 1

SELECT * FROM table1;
+-----+----------------+------+-------+
| a | b | c | d |
+-----+----------------+------+-------+
| 1 | some text | 1 | some |
| 2 | more text | 2 | more |
| 123 | even more text | 3 | even |
+-----+----------------+------+-------+
3 rows in set (0.00 sec)
Saludos
Héctor García
Avatar de Usuario
Hurricane
Mensajes: 262
Registrado: Mar Mar 24, 2015 10:21 am
Ubicación: Brasil
Contactar:

Re: Campo Virtual en MariaDB

Mensaje por Hurricane »

Hi,

Las columnas de tipo VIRTUAL sólo se generan (calculadas) en las consultas.
Usted (o el Xailer) que informó la columna de nomcompleto en el INSERT?
Creo que deberías omitir este tipo de columna. Si esta declaración fue generada por Xailer, creo que es un error. Cree un pequeño ejemplo para demostrar.

¿Qué versión de MariaDB?
gerencia escribió: ...
El INSERT y el UPDATE no deberían ignorar los campos Virtuales ?
El error,
MariaDB:INSERT INTO m_clientes( codcli, pjuridica, nomcli, apellcli, nomcompleto...
Developments | Trainings | Projects
Site | E-mail | Messenger | YouTube
Avatar de Usuario
gerencia
Mensajes: 282
Registrado: Sab Jun 20, 2009 6:01 pm

Re: Campo Virtual en MariaDB

Mensaje por gerencia »

Efectivamente,
Xailer genero el INSERT, estoy de acuerdo contigo las columnas virtuales deberían excluirse cuando prepare el INSERT o el UPDATE.

Ignacio, por favor revisar el tema.

Gracias,

Hurricane escribió:Hi,

Las columnas de tipo VIRTUAL sólo se generan (calculadas) en las consultas.
Usted (o el Xailer) que informó la columna de nomcompleto en el INSERT?
Creo que deberías omitir este tipo de columna. Si esta declaración fue generada por Xailer, creo que es un error. Cree un pequeño ejemplo para demostrar.

¿Qué versión de MariaDB?
gerencia escribió: ...
El INSERT y el UPDATE no deberían ignorar los campos Virtuales ?
El error,
MariaDB:INSERT INTO m_clientes( codcli, pjuridica, nomcli, apellcli, nomcompleto...
Jose David Angulo Urzola
Auditoria y Sistemas Ltda.
Cartagena-Colombia
hgarciaj
Mensajes: 107
Registrado: Jue Sep 23, 2010 12:44 am

Re: Campo Virtual en MariaDB

Mensaje por hgarciaj »

El objeto dataset usado para el update o insert está basado en la instrucción dbstruct tomando como punto de partida el query de la tabla, así que es por demás imposible que se pueda determinar si el campo incluido es uno virtual o persitent cuya información solo se puede obtener mediante el comando describe.
El mensaje de advertencia lo emite MariaDB como se puede leer en su documentación por lo que no se puede considerar un defecto de Xailer.
Atrape el error con Try catch y quite la opción de desplegar errores de su objetoi dataset.
Complementando la información si en el query que genera el dataset se incluyen campos de más de una base de datos Xailer no enviará ningún tipo de error pero no se realizará el insert o update porque es una limitante de Maria DB, por lo que sugiero leer la documentación de ambas herramientas.
Particularmente prefiero hacer los inserts o update usando las instrucciones sql usando los métodos BuildsqlSt y Execute del datasource de MariaDB, para evitar este tipo de inconvenientes.
Saludos
Héctor García
Avatar de Usuario
Hurricane
Mensajes: 262
Registrado: Mar Mar 24, 2015 10:21 am
Ubicación: Brasil
Contactar:

Re: Campo Virtual en MariaDB

Mensaje por Hurricane »

Hola Jose,

Una solución temporal:

Código: Seleccionar todo

METHOD Button1Click( oSender ) CLASS TFrmProduto
   ::oDBMaskEdit1:oDataField:lEditable:=.f.   // <-- my virtual field
   ::oTbProduto:Update()
   ::oTbProduto:Refresh()    // <- también se requirió
RETURN Nil
he creado una prueba, con una columna virtual y funcionó.
la columna no se incluye en la instrucción :D
gerencia escribió: El INSERT y el UPDATE no deberían ignorar los campos Virtuales ?
El error,
Developments | Trainings | Projects
Site | E-mail | Messenger | YouTube
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

Re: Campo Virtual en MariaDB

Mensaje por ignacio »

Buenos días,

Intenta poner: oDataField:lEditable := .F.

Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Avatar de Usuario
gerencia
Mensajes: 282
Registrado: Sab Jun 20, 2009 6:01 pm

Re: Campo Virtual en MariaDB

Mensaje por gerencia »

Hola Ignacio y Hurricane,

Si funciona, por lo pronto una solución rápida.
Considero que deberían tenerlo en cuenta para futuras versiones.

Mil gracias por su colaboración,

Saludos,
ignacio escribió:Buenos días,

Intenta poner: oDataField:lEditable := .F.

Saludos
Jose David Angulo Urzola
Auditoria y Sistemas Ltda.
Cartagena-Colombia
Responder