Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   update o delete en external table (https://www.clubdelphi.com/foros/showthread.php?t=81266)

hecospina 28-10-2012 05:56:50

update o delete en external table
 
Buenas noches

Uso la version 2.5 de firebird

Tengo una duda sobre tablas externas

Al querer borrar un registro o todos los registros de una tabla externa aparede el mensaje "Cannot delete rows from external files."

De igual forma si deseo modificar algun registro aparece el mensaje "Cannot update rows in external files."

Existe alguna forma de actualizar los datos de este tipo de tablas ?
o solo se puede insertar informacion en ellas

Gracias por sus respuesta

Casimiro Notevi 28-10-2012 10:21:37

Creo que es así:
Código SQL [-]
DELETE FROM EXTERNAL_TABLE /* should delete all records */
DROP TABLE EXTERNAL_TABLE /* should close the external file so it can be deleted or renamed */

Actualizar creo que no puedes, una tabla externa es un "enlace" a un fichero externo, y que yo sepa no puedes modificar desde firebird (no sé si en las últimas versiones se puede)

hecospina 02-11-2012 00:01:43

Update o delete en external table
 
Casimiro

Gracias por la respuesta, busque sobre el tema y al parecer no se pueden realizar "delete" ni "update" en estas tablas de tipo externas

:(

Casimiro Notevi 02-11-2012 11:34:10

¿Tampoco se puede así?:
Código SQL [-]
DELETE FROM EXTERNAL_TABLE /* should delete all records */ 
DROP TABLE EXTERNAL_TABLE /* should close the external file so it can be deleted or renamed */
¿Lo has probado?

hecospina 02-11-2012 16:14:46

update o delete en external table
 
Gracias Casimiro

Con esta instruccion
delete from ET_Inventario -sale el mensaje "Cannot delete rows from external files."

Si quiero borrar la tabla



DROP TABLE ET_Inventario - No me lo permite hacer pues tengo unos triggers activos


Necesito tener un inventario consolidado de dos bases de datos diferentes y que este inventario se pueda consultar en cualquiera de las dos bases de datos


Los datos del inventario estan en cada base de datos en una tabla que "no" es externa INVENTARIO y en esta se realiza la edicion, insercion y borrado de los registros.





Ya solucione el problema utilizando triggers en la tabla INVENTARIO


1. Cuando eliminan un registro inserto en la tabla externa ET_inventario, un registro con la transaccion old.entrada o old.salida pero signo contrario.
2. Cuando modifican inserto dos registros en la tabla externa ET_inventario, los datos antiguos old.entrada u old.salida con signo contrario y el registro nuevo new.entrada o new.salida con el signo real.
3. Cuando insertan se inserta en ET_inventario el registro tal como se digito en la tabla original, new.entrada o new.salida


Despues realizo la consulta realizando la sumatoria para optener el dato consolidado


Hice un procedimiento que me reconstruye la tabla externa con los datos ya sumarizados, lo ejecutan periodicamente, semanal o mensual, el problema que tengo es que no he podido dejar en blanco el archivo de la tabla externa ni borrarlo, el usuario lo hace manualmente


No puedo borrar la tabla por los trigger y tendria que crearlas nuevamente en la base de datos.


Gracias

Casimiro Notevi 02-11-2012 16:30:41

Pero no has contestado a mi pregunta :confused:

EDITO: ahora veo, sí has contestado :)

Delphius 03-11-2012 04:10:09

La cuestión es que una tabla externa no está pensada para ser como una tabla más de una base de datos. Sino como una manera de "exportar" información para ser consumida por medios no convencionales o que no requieren de una conexión directa con la base de datos.
Por ejemplo para presentar un resumen de ventas por única vez en un archivo Excel, se puede generar una tabla externa desde una consulta y luego pasar esta información a Excel. De esta manera no se corre el peligro de borrar algún registro o que se modifique algo por accidente.

Ten en cuenta que una tabla externa es un simple archivo, no tiene porqué ni estar pensado para hacer de otra tabla más.

Si lo que buscas es tener la información constantemente actualizada y uniforme, entonces crea una tabla más en la base de datos, que es lo más fácil y recomendable. O bien, crea una segunda base de datos que contenga las tablas que requieras e implementas los mecanismos para "sincronizar" ambas base de datos.

Repito: no puedes pedir a una tabla externa que se comporte como una tabla normal de una base de datos.

Saludos,

bulc 08-03-2018 09:37:59

Cita:

Empezado por hecospina (Mensaje 448530)
Casimiro

Gracias por la respuesta, busque sobre el tema y al parecer no se pueden realizar "delete" ni "update" en estas tablas de tipo externas

:(

La tabla externa se puede acceder con el Bloc de Notas de Windows. Ya que es de formtao Texto *.TXT.

Casimiro Notevi 08-03-2018 10:09:58

Cita:

Empezado por bulc (Mensaje 524981)
La tabla externa se puede acceder con el Bloc de Notas de Windows. Ya que es de formtao Texto *.TXT.

Así es, un fichero de texto.

bulc 08-03-2018 18:06:15

Ya para terminar, control total con FireDAC
 
El Generador ya se puede controlar a gusto del poeta. Con este código:
Código Delphi [-]
// Obtener el xNum actual del Generador:
nGen:=FDConnection1.GenLastAutoGenValue('GEN_FOTO');   // o bien
nGenNext := FDM2.FDConnection1.ExecSQLScalar( 'select gen_id(gen_foto, 0) from rdb$database' );
//  y hacer avanzar el generador y obtener el número.  Con lo cual el Trigger ya no es tan vital.
nGenNext := FDM2.FDConnection1.ExecSQLScalar( 'select gen_id(gen_foto, 1) from rdb$database' );
Creo que puede ser útil. Pero tal vez no esté en el hilo apropiado.
Saludos.
bulc

Casimiro Notevi 08-03-2018 18:44:41

Un generador es un número automático incremental, no debería ser editado por nosotros en ningún caso.
Y si hace falta editarlo, entonces es que se está haciendo un mal uso del mismo.


La franja horaria es GMT +2. Ahora son las 04:07:39.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi