Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-10-2012
Gherardo Gherardo is offline
Registrado
 
Registrado: dic 2009
Posts: 8
Poder: 0
Gherardo Va por buen camino
Comenzando con DBX

Hola a todos, hasta ahora siempre he utilizado los componentes BDE para acceder a datos y estoy empezando a probar con DBX, y ando un poco perdido.
La primera prueba que he realizado ha sido rellenar un DBGrid con los datos de una tabla, comparando velocidades entre BDE y DBX, y resulta que con un TTable (BDE) Obtengo todos los datos en 0,6 segundos. y con un clientDataSet 26 segundos.
Utilizo la misma tabla de la misma base de datos en SQL Server 2008.
Yo tenia entendido que DBX era mas rapido, ¿Que puedo estar haciendo mal?.

Gracias por anticipado.
Responder Con Cita
  #2  
Antiguo 23-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración

Cita:
Empezado por Gherardo
Yo tenia entendido que DBX era mas rapido, ¿Que puedo estar haciendo mal?.
Como comprenderás, no somos adivinos, así que tendrás que explicarnos qué haces, cómo, etc.

Y recuerda poner títulos descriptivos a tus preguntas, "Comenzando con DBX" no describe lo que preguntas.

De todas formas te anticipo que, efectivamentte, DBX es bastante rápido.
Responder Con Cita
  #3  
Antiguo 23-10-2012
Gherardo Gherardo is offline
Registrado
 
Registrado: dic 2009
Posts: 8
Poder: 0
Gherardo Va por buen camino
Gracias Casimiro por tu repuesta.

Lo que hago es conectar un un Dbgrid a una tabla de SQL Server 2008, esta tabla tiene unos 120.000 registros.
La conecto a traves de un TTable , TDatabase y un TDataSource, y en el onClick de un TButton pongo "TTable.Active:=True;" de esta manera
veo los datos en menos de un segundo.

Despues realizo la misma operación pero utilizando un TSQLConnection,TSQLTable,DataSetProvider,ClientDataSet y en el evento on Click del TButton "ClientDataSet.Active:=True;" pero esta vez tarda entre 20 y 26 segundos en aparecer los datos.

Todo se encuentra en el mismo ordenador, por ahora son pruebas y las realizo en local.

No se que puedo estar haciendo mal, pues no creo que pueda haber esa diferencia de velocidad.

Gracias.
Responder Con Cita
  #4  
Antiguo 23-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Pero para qué quieres 120000 registros en una tabla?, ¿los vas a leer todos?
Responder Con Cita
  #5  
Antiguo 24-10-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hace muchos años que no manejo el obsoleto BDE pero, por la diferencia de tiempos que Gherardo señala, es casi seguro que TTable no esté trayendo esos 120 mil registros "de un jalón", es decir, que probablemente está haciendo "paginación" (se trae un grupo de registros y luego el siguiente según se necesiten).

Para salir de dudas, Gherardo, coloca una instrucción "Tabla.Last" después de poner en True su propiedad Active. En ese caso TTable habrá de demorar algo más.

Con TClientDataSet también pueden traerse registros en paquetes de n filas según vaya necesitando avanzar el cursor (propiedad PacketRecords). No obstante, prefiero traerme de un solo golpe todos los registros de la consulta (dejando PacketRecords en -1), dado que no es muy buena práctica "entretener" al servidor con impredecibles acciones de la interfaz de usuario.

Y bueno, si realmente se necesita una consulta de 120 mil registros, debemos acostumbrarnos a que algo así no es gratis (al menos no con los equipos actuales).
Responder Con Cita
  #6  
Antiguo 24-10-2012
Gherardo Gherardo is offline
Registrado
 
Registrado: dic 2009
Posts: 8
Poder: 0
Gherardo Va por buen camino
Muchas gracias AL Gonzalez.

Una vez que tienes todos los registros "aquì", el Last es instantaneo en ambos casos.

Si cambio la propiedad PackectRecords del ClientDataSet a un valor distinto a -1, en este caso si hay retardo en el Last del clientDataSet, esto no me preocupa, pero me da un error al realizar un ApplyUpdate. El error dice lo siguiente: " no se puede crear una nueva transacción, se excedio la capacidad ".

Gracias.
Responder Con Cita
  #7  
Antiguo 24-10-2012
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 22
gatosoft Va camino a la fama
Al final de cuentas, el punto clave aqui amigo Gherardo es lo que pregunta Casimiro:

Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿Pero para qué quieres 120000 registros en una tabla?, ¿los vas a leer todos?
Para algunos (me incluyo) se considera una mala práctica la utilización de componentes TTable para hacer CONSULTAS o Administración de datos.... estos componentes son váidos cuando las tablas son pequeñas o no transaccionales... pero es evidente que 120.000 registros corresponden a una tabla con movimientos....

Te aconsejo replantear tu modelo, de manera tal que el usuario proporcione un filtro a la consulta, o que utilices un esquema de paginación... no se...

BDE es una tecnología que en su momento fue la respuesta a muchos problemas, pero hace años que no tiene soporte, por lo cual urge que te salgas de ahí... si quieres un futuro para tu sistema. Cuando pienses en BDE, piensa en el equivalente de estar instalando a tu usuario el sistema operativo Windows 95...


A medida que vayas entrando en DBX vas a encontrar sus bondades...

Un saludo,
Responder Con Cita
  #8  
Antiguo 24-10-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por gatosoft Ver Mensaje
Al final de cuentas, el punto clave aqui amigo Gherardo es lo que pregunta Casimiro:
Coincido contigo. Desafortunadamente es un vicio que quedó de la época en que se usaban las bases de escritorio y podía uno darse el lujo de tener los 120,000 registros "en la mesa" sin pestañear. Luego se da uno cuenta que se trataba de un lujo por demás innecesario (como la mayoría de los lujos ).

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Comenzando con Firebird... Kenobi SQL 6 15-04-2007 19:44:42
Comenzando de Nuevo con Delphi 2007 dvd2000 Conexión con bases de datos 3 15-04-2007 15:54:40


La franja horaria es GMT +2. Ahora son las 07:22:44.


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
Copyright 1996-2007 Club Delphi