![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
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:
IbTablePedidos.Insert
IbTablaPedidosID.Asinteger:=StrtoInt(edit1.text);
IbTablaPedidosCodigo.AsInteger:=Strtoint(edit2.text);
.
.
.
IbTablaPedidosCantidad:AsInteger:=StrtoInt(Edit20.text);
IbTablePedidos.post;
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 |
|
#2
|
|||
|
|||
|
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 ...)
VALUES (:PCAMPO1, :PCAMPO2, :PCAMPO3 ...)
FieldByParam('PCAMPO1').AsInteger := StrToInt(Edit1.Text);
...
...
Última edición por chenech fecha: 25-02-2026 a las 20:30:37. |
|
#3
|
||||
|
||||
|
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). * ...
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#4
|
||||
|
||||
|
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;
|
|
#5
|
||||
|
||||
|
Hola GINMARMENOR,
En vez de utilizar utiliza el , este último lo pone al final del fichero y el que utilizas lo pone al principio desplazando todos los demás y creo que ese es el retraso que tienes. Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber. |
|
#6
|
|||
|
|||
|
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:
|
|
#7
|
||||
|
||||
|
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.
|
|
#8
|
||||
|
||||
|
Yo trabajo con TFDQuery contra una base de datos Firebird, pero supongo que es más o menos lo mismo...
|
|
#9
|
|||
|
|||
|
Es correcto, lo he hecho en principio sin Transactiones pero funciona perfectamente, mil gracias
|
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Duda sobre grabación de registros | usuario1000 | Varios | 25 | 18-02-2019 14:13:17 |
| Update registros de columna1 de tabla A con registros de columna1 de tabla B | soldierxp | Firebird e Interbase | 0 | 08-09-2013 16:45:09 |
| enviar registros de una tabla a un campo de otra tabla a travez de ciclo IF en MYSQL | CLUSTERBIT | SQL | 8 | 23-10-2008 15:50:03 |
| grabación | jorodgar | Windows | 4 | 19-09-2005 11:22:42 |
| Seleccionar registros en una tabla, envio, e insercion en otra tabla!! | EfrainSanmiguel | Conexión con bases de datos | 3 | 21-10-2004 01:12:43 |
|