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 12-09-2007
[Waldo] Waldo is offline
Miembro Premium
 
Registrado: sep 2003
Posts: 101
Poder: 21
Waldo Va por buen camino
Access y Post lento

Hola buenos dias.

Tengo un pequeño problema he buscado algo por los foros y no he podido dar con la solucion.

Algunos compañeros como Caral me ayudo para que el sistema que manejo sea un poco mas rapido y optimo, pero en realidad prosigo con el siguiente problema:


Simplemente al hacer Post a una tabla a travez de la red tarda aproximadamente 30 segundos, considerando que esa tabla solo contiene almenos 4000 registros, en los otros modulos el post funciona perfectamente bien, incluso las consultas y los locate.



Quisiera saber si existe alguna forma de optimizacion de codigo para la manipulacion de esta tabla (registro de facturas).


considerando que:


* Abro la tabla completa para localizar un posible folio repetido, es decir evito el error de duplicacion de clave primaria.

* Si la clave Primara no existe entonces realizo un post (insertar) temporal mente la factura

* Despues de tener todos los datos, ya completos, edito ese mismo registro y aplico el post para guardar la factura de forma definitiva. aqui es donde tarda.

Si se requiere mas informacion agradeceria me la solicitaran, Agradeciendod e antemano su ayuda.

Waldo.
Responder Con Cita
  #2  
Antiguo 12-09-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Está díficil ayudarte, ya que ese tipo de problemas normalmente pueden darse por muchas razones distintas, talvez si posteas código en donde haces las modificaciones

Cita:
Empezado por Waldo Ver Mensaje
Hola buenos dias.
considerando que:
* Abro la tabla completa para localizar un posible folio repetido, es decir evito el error de duplicacion de clave primaria.

* Si la clave Primara no existe entonces realizo un post (insertar) temporal mente la factura

* Despues de tener todos los datos, ya completos, edito ese mismo registro y aplico el post para guardar la factura de forma definitiva. aqui es donde tarda.

Si se requiere mas informacion agradeceria me la solicitaran, Agradeciendod e antemano su ayuda.
Waldo.
o es idea mía o es que temporalmente guadas la fact. con un numero temporal para ver si ya existe, en este caso sería mejor que hagas un Locate o findkey antes de agregar el registro.
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #3  
Antiguo 12-09-2007
[Waldo] Waldo is offline
Miembro Premium
 
Registrado: sep 2003
Posts: 101
Poder: 21
Waldo Va por buen camino
Cita:
Empezado por D&W Ver Mensaje
o es idea mía o es que temporalmente guadas la fact. con un numero temporal para ver si ya existe, en este caso sería mejor que hagas un Locate o findkey antes de agregar el registro.

No en realidad lo hago como comentas, temporalmente me refiero que guardo algunos campos (guardo la factura parcialmente) y hasta no tener los datos completo hago el edit (para meter los campos restantes) y asi completar el registro con los datos que debe llevar.

Tratare de poner el codigo
Responder Con Cita
  #4  
Antiguo 12-09-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Conociendo tu programa podria decir que:
Para mi el problema mas grabe en esto es el uso de ADOTable, este trae todo el contenido de la tabla, es mas fácil de usar, pero alenta el sistema enormemente.
Yo cambiaría a ADOQuery y usaría otro sistema de update, por sql.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 12-09-2007
[Waldo] Waldo is offline
Miembro Premium
 
Registrado: sep 2003
Posts: 101
Poder: 21
Waldo Va por buen camino
en la parte dodne almaceno la factura y dodne tengo el problema es el siguiente:


Código Delphi [-]
 
begin
 g.tiempo:=0;
 progres:=tprogres.Create(self);
 try
 progres.bar.Progress:=0;
 progres.mensaje.Lines.Clear;
 progres.mensaje.Lines.Add('Guardando la factura, espere...');
 progres.show;
 progres.Refresh;
 Application.ProcessMessages;
 progres.bar.MaxValue:=8;
 M.TFactura.Open;
 progres.bar.Progress:=1;
 M.TFactura.Refresh;
 progres.bar.Progress:=2;progres.Refresh;Application.ProcessMessages;
 
//// aqui lozalizo el folio de la factura previamente almacenada para aplicar o editarla y meter los campos restantes
 

 IF M.TFactura.Locate('Folio',folio.text,[]) then
  BEGIN
///// de aqui en adelante es dodne biene el problema, considerando la lentitud cuando se hace el post.

   m.TFactura.Edit;
   progres.bar.Progress:=3;progres.Refresh;Application.ProcessMessages;
   M.TFactura.Fields[3].Value:=TOTALT.Value;
   M.TFactura.Fields[4].Value:=memo1.TEXT;
   M.TFactura.Fields[5].Value:='NO';
   progres.bar.Progress:=4;progres.Refresh;Application.ProcessMessages;
   M.TFactura.Fields[7].Value:='NO';
   M.TFactura.Fields[9].Value:=IVAT.Value;
   M.TFactura.Fields[10].Value:=SUBTOTALT.Value;
   progres.bar.Progress:=5;progres.Refresh;Application.ProcessMessages;
   IF MEMO2.Text<>'< ESCRIBA AQUI LAS OBSERVACIONES >' THEN
    M.TFactura.Fields[8].Value:=MEMO2.TEXT
   ELSE
    M.TFactura.Fields[8].Value:='';
   progres.bar.Progress:=6;progres.Refresh;Application.ProcessMessages;
 
 
////// aqui es donde se pdemora en hacer el post
   m.TFactura.Post;
//////
   M.TFactura.CLOSE;
   progres.bar.Progress:=7;progres.Refresh;Application.ProcessMessages;
  END;
 progres.bar.Progress:=8;progres.Refresh;Application.ProcessMessages;
 progres.bar.Progress:=0;
 progres.Close;
 finally
 progres.Free;
 end;
 
 
/// de aqui en adelante, es solo un mensaje si desea imprimir o no la factura ya guardada, de aqui para abajo lo hace con la velocidad normal.

Podria ser que en lugar de locate, aplique una consulta SQL buscando la factura con el foli a editar? a caso eso resolveria el problema?
Responder Con Cita
  #6  
Antiguo 12-09-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
La verdad es que sigo pensando lo mismo.
Usas una tabla, localizas unos campos de la misma, los editas, les asignas unos valores y luego los guardas.
Todo esto se puede hacer en un solo paso con un adoquery y una sentencia sql con un update.
Algo asi:
Código Delphi [-]
 DataModule1.AC1.BeginTrans;
      try
          QTemp.SQL.Text := 'Update OrdenProd set FechaRequerido = '+QuotedStr(DateToStr(DateTimePicker1.DateTime))+', Comentarios = '
                            +QuotedStr(Memo1.Text)+', CodCliente = '+Edit3.Text+', Prioridad = '+IntEdit1.Text+
                            ' Where CodOrden = '+Edit2.Text;

         QTemp.ExecSQL;
         guardada := true;
         IF Nueva  then
         begin
            QOrdProd.Requery();
            QOrdProd.Last;
         end
         else begin
                bok := QOrdProd.Bookmark;
                QOrdProd.Requery();
                QOrdProd.Bookmark := bok;
              end;
         DataModule1.AC1.CommitTrans;
Esto no tiene que ver con ti codigo, es de mi programa, pero te explica como hacer un update, mas o menos.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 12-09-2007
[Waldo] Waldo is offline
Miembro Premium
 
Registrado: sep 2003
Posts: 101
Poder: 21
Waldo Va por buen camino
Hola

Hola que tal Carl, te comento por fin encontre la solucion, y es la misma que propones, no lo hice asi exactamente como tu lo dices, simplemente hago una consulta a la tabla, localizo el registro edito la consulta y la guardo.

lo implemente y wow Lo hizo en menos de un parpadeo de ojo, jejej por fin resolvi el problema, ojala le pueda ayudar a muchos mas que he leido que tienen el mismo problema.


El punto es evitar de alguna forma abrir toda la tabla, que e slo mas facil, pero a la larga sera muy lento y satura los recursos, es mejor traducirlo en una consulta de manera que solo saque los datos que se necesitan de la tabla,... los demas para que?.... en fin ahora puedo decirles que si funciona perfectamente ha y lo cheque en red.


Agradezco a Caral, Carlos por averme ayudado a resolver este problema , Gracias, su amigo Waldo.
Responder Con Cita
  #8  
Antiguo 13-09-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me alegro que resolvieras el problema.
Saludos
__________________
Siempre Novato
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
Post o CheckBrowseMode ? David Conexión con bases de datos 3 30-08-2007 03:14:15
Procedure en Firebird lento o IbQuery lento capo979 Firebird e Interbase 14 17-07-2007 21:35:36
Post no me funciona maximo_nashir PHP 1 18-06-2007 01:44:31
IBDatase Insert Post Edit Post ariefez Firebird e Interbase 4 12-10-2005 01:53:04
After Post en interbase jgutti Firebird e Interbase 2 09-03-2005 06:00:12


La franja horaria es GMT +2. Ahora son las 03:48:54.


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