![]() |
Grabacion de Registros en una tabla.
Muy buenas, Estoy Trabajando con Delphi 2.010 y uso Firibird 2.5 las bases de datos las he creado con IbExpert, y de momento llevo creando el programa varios años, y todo funciona bien, dentro del programa tengo un total de unas 50 Tablas (IbTables) con sus TDataSources correspondientes, las Tablas más importantes que más utilizo que es la IbTablaPedidos, dispone de 85 campos en los cuales trabajo a una velocidad normal tarda 2 a 3 segundos en guardar un pedido, aunque aparentemente es lento pero se puede trabajar bien, siempre utilizo este Sintaxis para grabar los pedidos:
Código:
Pero acabo de crear una nueva Tabla que tiene 140 campos, pero de una tirada grabo unos 25 campos, el resto de campos los voy introduciendo en otros procesos, pero resulta que ahora en vez de 2 ó 3 segundos en grabar tarda de 30 segundos más o menos, utilizando un código similar. No sé si es debido a tener tantos campos en la tabla, o es el código, si me pueden echar una mano, La tabla anterior tiene dentro unos 2.000 registros, y funciona con ese desfase de 2 ´o 3 segundos Ésta nueva tabla al ser creada hace poco dispone de unos 40 registros pero siempre en cada grabación tarda unos 30 segundos. Si me pueden echar una mano para ver el por qué o si debo cambiar el código se lo agradecería |
las Table creo que estan por compatibilidad con BDE y no las recomienda casi nadie, yo uso Query con un Insert siempre y en tablas con 60 millones de registros y mas de 90 campos tarda menos de un segundo, siempre milisegundos, en algunos clientes tengo FireBird 2.5 y en otros FireBird 3 y lo mismo practicamente, prueba a usar esto:
Código:
INSERT INTO TABLEX (CAMPO1, CAMPO2, CAMPO3 ...) |
Cita:
Está claro que eso no es normal. Yo intentaría ir descartando cosas o haciendo pruebas con diferentes factores para ver dónde está el problema. * Intentar realizar la conexión con el mismo código pero con otros componentes (FireDac, ADO+ODBC). * Revisar que no estés realizando la conexión cada vez (eso justificaría los 30 sg. aunque tampoco sería normal) * Probar con otra Base de datos sólo con esa tabla (descartar problemas en ese fichero). * Probar en local si está en red (para eliminar ese factor) * Reducir los campos de la tabla a ver si en algún momento ese tiempo baja (-cosa que sería muy rara-). * Realizar el mismo INSERT, pero en lugar de utilizar un IBTable, utilizar un IBQuery (y todo lo demás igual). * ... |
También mira si tienes procedimientos que se ejecuten como eventos de algunas tablas.
OnBeforeInsert/Update/Post/Close/Open OnAfterInsert/Update/Post/Close/Open Debuga con alguna forma de log apra ver cuanto tarda cada parte;
|
|
Buenas estoy siguiendo los pasos de chenec mediante SQL, pero no encuentro la syntaxys correcta según su ejemplo es el siguiente,
Cita:
Cita:
Cita:
|
No mencionas el mensaje de error que te devuelve la aplicación.
De todos modos, creo que se trata del "Open". En el caso de que no se devuelvan datos, deberías utilizar ExecQuery. Además, debes asignar los parámetros antes de ejecutar el query o abrir una tabla.
|
Yo trabajo con TFDQuery contra una base de datos Firebird, pero supongo que es más o menos lo mismo...
|
Es correcto, lo he hecho en principio sin Transactiones pero funciona perfectamente, mil gracias
|
| La franja horaria es GMT +2. Ahora son las 03:25:58. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi