Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-09-2007
Avatar de martinzcr
martinzcr martinzcr is offline
Miembro
 
Registrado: jun 2006
Ubicación: San Jose, Costa Rica
Posts: 53
Poder: 18
martinzcr Va por buen camino
Question Cuál es la mejor forma de conectar la base de datos a mi programa?

Hola a todos!

Quisiera su opinión sobre lo siguiente: cuál es la mejor forma de conectar (y trabajar) la base de datos a mi programa??

Les comento por donde viene la cuestión... Tengo un programa desarrollado en Delphi que trabaja con una base de datos Firebird. Para conectarme a la base de datos utilizo los componentes FIBPlus (base de datos, transacciones y datasets). En algún momento he utilizado los IBComponents que vienen en las paletas de controles estandard de Delphi.
En este momento la dirección de la base de datos en un archivo ini y la conexión y activación de datasets la hago al iniciar el programa.
Nunca trabaje con ODBC. Me comentaron por ahí que tal vez era más rápido (o más eficiente) trabajar con esta forma de conexión.
Quisiera saber la opición de ustedes, si han trabajado con las dos modalidades y si hay diferencias sustanciales de rendimiento.

Desde ya les agradezco!
__________________
Martin Zalazar
Responder Con Cita
  #2  
Antiguo 05-09-2007
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Es mejor trabajar con componentes de acceso nativo, como los IBX y FIBPlus que con ODBC, ya que con ODBC obtienes una capa extra lo que le resta velocidad...


Saludos...
Responder Con Cita
  #3  
Antiguo 05-09-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tal y como comenta maeyanes, lo más rápido es lo más directo, y ahora mismo, lo mejor, lo más rápido, avanzado, seguro, potente, útil, cómodo (y no muy caro) es FIBplus.
Responder Con Cita
  #4  
Antiguo 05-09-2007
Avatar de martinzcr
martinzcr martinzcr is offline
Miembro
 
Registrado: jun 2006
Ubicación: San Jose, Costa Rica
Posts: 53
Poder: 18
martinzcr Va por buen camino
Question DataSets o Querys??

Gracias por la info... Va otra consulta

Tengo varios procesos de inserción de datos dentro de ciclos (por ejemplo guardar detalles de facturas, etc.). He probado hacer la inserción utilizando un DataSet y tmbien lo he hecho con un Query... un ejemplo

Utilizando DataSet...

Código Delphi [-]
while not DetalleTemporal.Eof() do begin
   
   DSetDetalle.Append;
   DSetDetalleCOD_ARTICULO.AsString := DetalleTemporalCOD_ARTICULO.AsString;
   DSetDetalleCANTIDAD.AsCurrency   := DetalleTemporalCANTIDAD.AsCurrency;
   ...otros campos...
   
   DSetDetalle.Post;
   DetalleTemporal.Next;
end;

Utilizando Query...

Código Delphi [-]
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('insert into DETALLE_FACTURA (');
Query.SQL.Add('COD_ARTICULO, CANTIDAD, CAMPO_X...)');
Query.SQL.Add('values (:vCOD_ARTICULO, :vCANTIDAD, :vCAMPO_X...)');
while not DetalleTemporal.Eof() do begin
   
   Query.ParamByName('vCOD_ARTICULO').AsString := DetalleTemporalCOD_ARTICULO.AsString;
   Query.ParamByName('vCANTIDAD').AsCurrency   := DetalleTemporalCANTIDAD.AsCurrency;
   ...otros campos..
   DetalleTemporal.Next;
end;

No he encontrado como medir el rendimiento de este código... Quisiera saber si alguien sabe o tiene algúna idea de cúal de las dos opciones es la más eficiente.

Desde ya les agradezco por la ayuda.

Saludos!
__________________
Martin Zalazar
Responder Con Cita
  #5  
Antiguo 05-09-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Intenta hacer una prueba insertando una cantidad grande de registros.
De todas formas se supone que el query es más eficiente en estos casos.
Ya nos contarás.
Responder Con Cita
  #6  
Antiguo 05-09-2007
Avatar de martinzcr
martinzcr martinzcr is offline
Miembro
 
Registrado: jun 2006
Ubicación: San Jose, Costa Rica
Posts: 53
Poder: 18
martinzcr Va por buen camino
Buena idea!

Voy a armar una demo que me cargue unos 100.000 registros con las 2 modalidades y le tomo el tiempo. Cuando termine les cuento los resultados...
__________________
Martin Zalazar
Responder Con Cita
  #7  
Antiguo 06-09-2007
MON___ MON___ is offline
Miembro
 
Registrado: abr 2007
Ubicación: Salamanca (España)
Posts: 84
Poder: 17
MON___ Va por buen camino
Como te han dicho prueba con una gran cantidad de registros. No obstante y dada mi experiencia (hace tiempo lo probé insertando una gran cantidad de registros en una tabla con unos 30 campos) me resulto más eficiente el empleo de TQUERY con el correspondiente SQL.

Un saludo y comenta tus resultados
Responder Con Cita
  #8  
Antiguo 06-09-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.731
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Ten en cuenta el tema de transacciones

Código:
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('insert into DETALLE_FACTURA (');
Query.SQL.Add('COD_ARTICULO, CANTIDAD, CAMPO_X...)');
Query.SQL.Add('values (:vCOD_ARTICULO, :vCANTIDAD, :vCAMPO_X...)');
while not DetalleTemporal.Eof() do begin
   if not Query.Transaction.InTransaction then Query.Transaction.StartTransaction; //agregado
   Query.ParamByName('vCOD_ARTICULO').AsString := DetalleTemporalCOD_ARTICULO.AsString;
   Query.ParamByName('vCANTIDAD').AsCurrency   := DetalleTemporalCANTIDAD.AsCurrency;
   ...otros campos..
   Query.Transaction.Commit; // agregado
   DetalleTemporal.Next;
end;
Si hay más de un usuario cargando datos, el hecho de que inserten al mismo tiempo y no cierren transacciones puede hacer más cada vez más lento la inserción de registros.

Última edición por duilioisola fecha: 06-09-2007 a las 14:50:50.
Responder Con Cita
  #9  
Antiguo 06-09-2007
Avatar de martinzcr
martinzcr martinzcr is offline
Miembro
 
Registrado: jun 2006
Ubicación: San Jose, Costa Rica
Posts: 53
Poder: 18
martinzcr Va por buen camino
Thumbs up

Hola Amigos:

Hice la prueba con una tabla con 40 campos (20 varchar y 20 float). Probe varias veces hacer la inserción con Query y con Dataset (probe 10000 registros). Definitivamente, fue más rápida la inserción con los Querys (según mis pruebas un 15% más rápido mas o menos).

Respecto de las transacciones, en el evento AfterExecute coloco siempre este código:

Código Delphi [-]
procedure TFDatos.Query_PruebaAfterExecute(Sender: TObject);
begin
     if not Transaccion.Active then
        Transaccion.Active := True;
     Transaccion.Commit;
end;

Gracias por la colaboración!
__________________
Martin Zalazar
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Encuesta: Cuál es el mejor gestor de base de datos? semptrion Conexión con bases de datos 7 19-06-2007 04:06:12
Conectar una base de datos a mi programa cesararturo2004 Conexión con bases de datos 3 24-01-2006 19:26:43
cual es la mejor forma ? martita Varios 14 07-07-2005 20:35:55
Cual es la mejor forma de pasar datos de MSaccess a MySQL ctronx Conexión con bases de datos 7 04-08-2004 02:04:53
Cual es la mejor forma de Conectarse a una base de Datos Acces? catapulta Conexión con bases de datos 1 07-05-2003 06:04:21


La franja horaria es GMT +2. Ahora son las 11:09:52.


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