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.
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
Campo Virtual en MariaDB
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,
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
Auditoria y Sistemas Ltda.
Cartagena-Colombia
Re: Campo Virtual en MariaDB
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)
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
Héctor García
Re: Campo Virtual en MariaDB
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?
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...
Re: Campo Virtual en MariaDB
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,
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
Auditoria y Sistemas Ltda.
Cartagena-Colombia
Re: Campo Virtual en MariaDB
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.
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
Héctor García
Re: Campo Virtual en MariaDB
Hola Jose,
Una solución temporal:
he creado una prueba, con una columna virtual y funcionó.
la columna no se incluye en la instrucción
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
la columna no se incluye en la instrucción
gerencia escribió: El INSERT y el UPDATE no deberían ignorar los campos Virtuales ?
El error,
- ignacio
- Site Admin
- Mensajes: 9253
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Campo Virtual en MariaDB
Buenos días,
Intenta poner: oDataField:lEditable := .F.
Saludos
Intenta poner: oDataField:lEditable := .F.
Saludos
Re: Campo Virtual en MariaDB
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,
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
Auditoria y Sistemas Ltda.
Cartagena-Colombia