![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración
![]() Cita:
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.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#2
|
|||
|
|||
|
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. |
|
#3
|
||||
|
||||
|
¿Pero para qué quieres 120000 registros en una tabla?, ¿los vas a leer todos?
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#4
|
||||
|
||||
|
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). ![]() |
|
#5
|
|||
|
|||
|
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. |
|
#6
|
||||
|
||||
|
Cita:
Sobre PacketRecords, como dije antes, es preferible dejarla en -1. ![]() |
|
#7
|
||||
|
||||
|
Cita:
Aunque de todas formas extraña tanto tiempo para dbx siendo una base local. // Saludos |
|
#8
|
||||
|
||||
|
Al final de cuentas, el punto clave aqui amigo Gherardo es lo que pregunta Casimiro:
Cita:
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, |
|
#9
|
||||
|
||||
|
Cita:
).// Saludos |
|
#10
|
|||
|
|||
|
Gracias a todos
He hecho la prueva del " while not eof" y el resultado ha sido , con el BDE 10 Segundos. Con dbx Cuando llevaba 20 minutos me he cansado y he reseteado el programa, con lo cual no se lo que tarda. el codigo que he utilizado es el siguiente. Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
If CDSAlbaranes.Active then
begin
CDSAlbaranes.Active:=False;
// CDSLineasAlbaran.Active:=False;
end
else
begin
CDSAlbaranes.Active:=True;
// CDSLineasAlbaran.Active:=True;
ShowMessage('Empiezo');
CDSAlbaranes.First;
while not CDSAlbaranes.Eof do
begin
CDSAlbaranes.Next;
end;
ShowMessage('Termino');
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
If TblCabeceraAlbaran.Active then
begin
TblCabeceraAlbaran.Active:=False;
// TblLineasalbaran.Active:=False;
end
else
begin
TblCabeceraAlbaran.Active:=True;
// TblLineasalbaran.Active:=True;
ShowMessage('Empiezo');
TblCabeceraAlbaran.First;
while not TblCabeceraAlbaran.Eof do
begin
TblCabeceraAlbaran.Next;
end;
ShowMessage('Termino');
end;
end;
De todas maneras el tema es ¿como DBX siendo más actual, no es igual o mas eficiente que BDE?. ¿Debo configurar algo en los componentes DBX?, ¿que no estoy haciendo? Saludos y Gracias por vuestras suguerencias. |
|
#11
|
||||
|
||||
|
Cita:
Pero, si como es de esperarse, tu aplicación va a usar un base montada en un servidor, entonces el BDE ni siquiera es un competidor. Y tratar de usar DBX o cualquier otra tecnología, como si fuera el BDE, con componentes Table, en este caso te dará pobres resultados. Necesitas usar consultas SQL del tipo:
es decir, con un filtro que razonablemente restrinja la cantidad de resultados. Después de un tiempo, te darás cuenta que, en realidad, presentar los 120,000 clientes al usuario para que éste recorra la lista hasta llegar a la M y de ahí buscar Montoya, no sirve de nada. Y, a fin de cuentas, tu usuario terminará agradeciéndotelo, pues para él es más sencillo usar un formulario de búsqueda que recorrer manualmente miles de resultados. // Saludos |
|
#12
|
||||
|
||||
|
Cita:
Ya lo has localizado, ahora sólo haces un 'edit' para que el usuario lo modifique. 2. DBX es mucho más eficiente que BDE. El problema es que lo estás tratando como una obsoleta tabla plana ( lo que en su día era DBF, por ejemplo) 3. ¿Qué estás no haciendo?, es que debes usar cliente/servidor, es una base de datos relacional (un RDBMS), por lo tanto debes usarla como es, no quieras usar un Ferrari para transportar cajas de tomates. Los tiempos han cambiado. Aquí tienes uno de los mejores libros que puedes encontrar para manejar bases de datos con delphi, está en pdf, es primordial.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|