Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problemas Con IbTable, Interbase (https://www.clubdelphi.com/foros/showthread.php?t=3557)

Rabata 11-09-2003 13:59:19

Problemas Con IbTable, Interbase
 
Mi Duda es la Siguiente:

Alguien sabría decirme pq mi conexión a una tabla interbase a través de componentes TIBTable, me va tan lento cuando la base de datos esta en un PC remoto (no en Local)

La verdad es k me tarda entre 1 - 2 Segundos cada vez qure abro una tabla, y al ser cliente - servidor hago muchos Refresh y me tarda otros tantos....

Ejemplo de Código:


Procedure Refresca();
Begin
With Dm_local Do
Begin
If Transaction.InTransaction Then
Transaction.CommitRetaining
Else
Transaction.StartTransaction;

Garantia.Refresh;

End;

Revisa_Perfil();

End;


Utilizo el CommitRetaining para que no me cierre la Transacción sino sería aún más lento....

Cuando Realizo el refresh y Open me tarda mucho en remoto, mientras k si la Base de datos está en Local me va como un tiro..

Alguién me podría indicar algo o echarme una mano, aunke sea el cuello, pero k me solucione el probelma.......jejejeje


Muchas Gracias a los colaboradores.....

kinobi 11-09-2003 14:20:47

Hola,

Cita:

Posteado originalmente por Rabata
La verdad es k me tarda entre 1 - 2 Segundos cada vez qure abro una tabla,
no considero que 1-2 segundos sea mucho tiempo para abrir un cursor en un entorno cliente/servidor.

Cita:

Posteado originalmente por Rabata
y al ser cliente - servidor hago muchos Refresh y me tarda otros tantos....

no encuentro la relación entre un entorno cliente/servidor y tener que hacer muchos "Refresh" en los Datasets clientes, más bien al contrario.

Si buscas en hilos antiguos (puedes utilizar el buscador) encontrarás varios en los foros de "Interbase y Firebird" y "Conexión con bases de datos" donde se trata el tema.

Saludos.

Rabata 12-09-2003 09:30:40

Mi intención es k cuando un cliente introduzca datos, le aparezca lo k hay en realidad en la base de datos.

Por eso es mi intención de utilizar REFRESH para k cada vez k haya una insercción o modificación de otro cliente, le aparezca al usuario en pantalla en cuanto k el almacene, ya k son varios cliente a la vez y kieren tener la información en pantalla k hayan podido introducir los demas terminales.

En cuanto a lo del tiempo (1-2) seg. si me conecto utilizando el BDE de delphi (TTable,TDataBase) me es instántaneo....

Lo k he apreciado es k con el IBConsole de Interbase cuando hago un Refresh Data a un Pc remoto me tarda 1 - 2 Segundos (en Local es inmediato), mientras k si lo configuró por el Sql Explorer, el refesco es inmediato..... Para acceso remoto Utilizó TCP

Yo kreo k el problema esta en la configuración de mi base de datos (gestión de administración de Interbase), pero por k con el bde(TTable) es tan rápido y con el TIBTable es tan lento si los 2 acceden a interbase....

kinobi 12-09-2003 09:46:21

Hola,

Cita:

Posteado originalmente por Rabata
Mi intención es k cuando un cliente introduzca datos, le aparezca lo k hay en realidad en la base de datos.
Esa declaración de intenciones creo que la tenemos todos.

Cita:

Posteado originalmente por Rabata
Por eso es mi intención de utilizar REFRESH para k cada vez k haya una insercción o modificación de otro cliente, le aparezca al usuario en pantalla en cuanto k el almacene, ya k son varios cliente a la vez y kieren tener la información en pantalla k hayan podido introducir los demas terminales.
Un par de comentarios:

1. El método Refresh de los Dataset's IBX sólo refresca el registro activo (sobre el que está en ese momento el Dataset), pero no el resto de registros del Dataset.

2. El "refresco" (relanzando la consulta que alimenta al Dataset) sólo permite ver los cambios hechos desde otras transacciones concurrentes si éstas han sido confirmadas y la transacción tiene un nivel de aislamiento read_commited (por defecto TIBTransaction lo fija a Snapshot, el más alto y que más aisla a la transacción).

Cita:

Posteado originalmente por Rabata
En cuanto a lo del tiempo (1-2) seg. si me conecto utilizando el BDE de delphi (TTable,TDataBase) me es instántaneo....
¿Algún tipo de caché utilizando BDE?. De todas formas, 1 ó 2 segundos para conectarse a una base de datos no me parece un tiempo excesivo.

Otra cosa: hace tiempo que no utilizo IBX, pero los Dataset's IBX utilizan una estrategia de solicitud de registros al servidor bajo demanda, pasándole éste (si no recuerdo mal) bloques de registros según las necesidades del Dataset. Creo que existe una propiedad que fija el número de registros por bloque. Tal vez bajando ese número consigas mejores resultados. Lo siento, no recuerdo el nombre de la propiedad (tendrás que tirar de la ayuda en línea).

Cita:

Posteado originalmente por Rabata
Yo kreo k el problema esta en la configuración de mi base de datos (gestión de administración de Interbase), pero por k con el bde(TTable) es tan rápido y con el TIBTable es tan lento si los 2 acceden a interbase....
TIBTable es un componente que existe sólo por compatibilidad con BDE. El propio Jeff Overcash (el desarrollador principal actual de IBX) se ha pronunciado múltiples veces desaconsejando el uso de TIBTable, entre otras razones, por problemas de rendimiento.

Saludos.

Rabata 12-09-2003 10:53:40

Pero lo k no llego a entender es pk si ataco a la base de datos desde el sql explorer, el refresco de datos es inmediato y si lo hago desde el ibconsole me tarda un tiempo ¿ a k se debe este retraso?

Muchas gracias por tu colaboración, me está sirviendo mucho de ayuda.....

La conclusión es k si decido utilizar de nuevo los IBX, sólo lo hare con TIBDataSet ya que son Sql Directo.....

kinobi 12-09-2003 11:17:41

Hola,

Cita:

Posteado originalmente por Rabata
Pero lo k no llego a entender es pk si ataco a la base de datos desde el sql explorer, el refresco de datos es inmediato y si lo hago desde el ibconsole me tarda un tiempo ¿ a k se debe este retraso?
seguramente a varias razones:

* IBConsole no es un producto extremadamente refinado. En origen fue escrito en C por una empresa externa a Borland (ni siquiera por gente del TeamB). Cuando Borland liberó los fuentes de InterBase 6.0 (Julio del 2000), Jeff Overcash y algunos desarrolladores más del TeamB se hicieron cargo de IBX y de IBConsole, reescribiéndolo (yo supongo que apresuradamente) a Object Pascal.

* IBX siempre ha sido muy criticado por el sistema de caché de sus Dataset's, necesario para implantar el mecanismo de bidireccionalidad, que posibilita la navegación atrás<->adelante en el Dataset.

Cita:

Posteado originalmente por Rabata
La conclusión es k si decido utilizar de nuevo los IBX, sólo lo hare con TIBDataSet ya que son Sql Directo.....
En realidad "SQL Directo" es también el BDE y cualquier otro mecanismo de acceso, ya que el servidor sólo "entiende" SQL.

Como norma general, yo utilizaría esta estrategia:

1. Para consultas en los que no sea necesario la navegación entre registros, utilizar el componente TIBSQL (el más rápido de todos). También lo utilizaría para el envío de sentencias SQL en las que no estuviesen implicados controles enlazados a datos.

2. Para consultas de sólo lectura enlazadas a controles visuales: TIBQuery.

3. Para el resto de casos: TIBDataSet

Otra opción es utilizar otros mecanismos de acceso: dbExpress, IBO, FIBPlus, ...

De todas formas, no tomes mis opiniones como concluyentes. Cada vez estoy más alejado de Delphi, y en consecuencia de IBX, BDE, dbExpress ..., por tanto mis opiniones en este tema acusan el paso del tiempo y la falta de práctica con estas herramientas.

Saludos.


La franja horaria es GMT +2. Ahora son las 20:16:50.

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