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
User avatar
gerencia
Posts: 229
Joined: Sat Jun 20, 2009 6:01 pm

Campo Virtual en MariaDB

Postby gerencia » Tue Nov 20, 2018 10:59 pm

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
Posts: 80
Joined: Thu Sep 23, 2010 12:44 am

Re: Campo Virtual en MariaDB

Postby hgarciaj » Wed Nov 21, 2018 1:06 am

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
User avatar
Hurricane
Posts: 106
Joined: Tue Mar 24, 2015 10:21 am
Location: Brasil
Contact:

Re: Campo Virtual en MariaDB

Postby Hurricane » Wed Nov 21, 2018 7:40 pm

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 wrote:...
El INSERT y el UPDATE no deberían ignorar los campos Virtuales ?
El error,
[color=#FF4040]MariaDB:INSERT INTO m_clientes( codcli, pjuridica, nomcli, apellcli, nomcompleto...
[x]Harbour Delphi | Xailer VxH Fivewin Hwgui Minigui | SQL FastReport
Contact me: Developments | Training | Facebook | Projects
User avatar
gerencia
Posts: 229
Joined: Sat Jun 20, 2009 6:01 pm

Re: Campo Virtual en MariaDB

Postby gerencia » Wed Nov 21, 2018 9:11 pm

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 wrote: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 wrote:...
El INSERT y el UPDATE no deberían ignorar los campos Virtuales ?
El error,
[color=#FF4040]MariaDB:INSERT INTO m_clientes( codcli, pjuridica, nomcli, apellcli, nomcompleto...
Jose David Angulo Urzola
Auditoria y Sistemas Ltda.
Cartagena-Colombia
hgarciaj
Posts: 80
Joined: Thu Sep 23, 2010 12:44 am

Re: Campo Virtual en MariaDB

Postby hgarciaj » Thu Nov 22, 2018 2:44 am

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
User avatar
Hurricane
Posts: 106
Joined: Tue Mar 24, 2015 10:21 am
Location: Brasil
Contact:

Re: Campo Virtual en MariaDB

Postby Hurricane » Thu Nov 22, 2018 7:04 am

Hola Jose,

Una solución temporal:

Code: Select all

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 wrote:El INSERT y el UPDATE no deberían ignorar los campos Virtuales ?
El error,
[x]Harbour Delphi | Xailer VxH Fivewin Hwgui Minigui | SQL FastReport
Contact me: Developments | Training | Facebook | Projects
User avatar
ignacio
Site Admin
Posts: 8558
Joined: Mon Apr 06, 2015 8:00 pm
Location: Madrid, Spain
Contact:

Re: Campo Virtual en MariaDB

Postby ignacio » Thu Nov 22, 2018 11:02 am

Buenos días,

Intenta poner: oDataField:lEditable := .F.

Saludos
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
User avatar
gerencia
Posts: 229
Joined: Sat Jun 20, 2009 6:01 pm

Re: Campo Virtual en MariaDB

Postby gerencia » Thu Nov 22, 2018 4:26 pm

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 wrote:Buenos días,

Intenta poner: oDataField:lEditable := .F.

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

Return to “Spanish”