Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Tiempo de respuesta de Actualizacion (https://www.clubdelphi.com/foros/showthread.php?t=74285)

oesqueda 09-06-2011 17:51:57

Tiempo de respuesta de Actualizacion
 
Ahora necesito ayuda, agradezco desde antes la que me proporcionen.

Tengo una aplicacion en Access, se que es una porqueria, pero es lo unico que se me pudo acomodar en bases de escritorio porque mi cliente no queria servidores, digamos que salio de mis manos. a veces hay que conceder :s.

Ok, les decia, se actualiza un registro, actualizamos la lista (se cierra ADOConnection y se abre de nuevo con todas las tablas) y no aparece, tiene que pasar un minuto para que se actualice, alguen sabe si esa configuracion esta en el registro o en el motor de Jet 4.0

Es una base de Access 2003, uso ADO (MDAC 2.8) en Windows 7 con Delphi XE con dbGo (TADOConnection, TADODataset).

Gracias por la ayuda

jafera 09-06-2011 19:26:34

Y porque no usas firebird?

Yo tengo varias aplicaciones que funcionan en sobremesas y portatiles, incluso en un pendrive y no necesitan servidor dedicado, solo debes instalar el motor y a funcionar.

Es mucho más robusto y ágil.

En mis inicios tambien programe en el VB de access y era bastante lento, aunque lo que menos me gusta de las tablas access es que el usuario tenga acceso total a las tablas y a veces lian cada cisco...

Saludos

oesqueda 09-06-2011 19:46:30

Como te digo, lamentablemente no esta en mis manos, son requerimientos del cliente y asi quedo.
El problema es ese, que al actualizar tarda un rato, se que es cuestion del MSJET pero no he dado donde.

Neftali [Germán.Estévez] 10-06-2011 10:32:17

A mi me había pasado esto con MSJet, pero el "retardo" era de apenas unos segundos. Lo de un minuto, la verdad es que no tiene mucho sentido. :(:(

¿Cuentas máquinas están funcionando sobre esa Base de Datos?

oesqueda 10-06-2011 15:27:13

Mi estimado son unas cuantas, como 5.
La cuestion, si son segundos, pero la desesperacion del usuario son horas, jejeje.

Estoy viendo soluciones alternas que nos ayuden a que entiendan que access no debe ser, pero es que el sistema se cuelga sobre otro, bueno es un cuento largo.

Lo pongo asi, depurando yo en mi equipo.
Tengo el access abierto con la base de datos, posicionado en el registro X, si por el software modifico el registro X y en acess solo cambio de registro automaticamente se actualiza, pero no es inmediato. He notado que ese comportamiento lo tengo con ADO, con un simple Close - Open, pero tengo que esperar ese tiempo que te digo, no se si me di a entender, porque ya me hice bolas yo.

NeoNew 22-06-2011 17:15:53

Hola Colegas,

Tengo algo parecido, si me pueden dar ideas o ayudar para optimizar el tiempo que demora en llenar una tabla access.
(Vi algo que ya se trato en otro hilo con una respuesta buena, pero no lo encuentro)

Necesito crear una tabla access con datos de otras tablas access que se encuentran en un servidor, hasta aquí todo bien, lo que sucede es que se demora mucho tiempo al poblar la nueva tabla.
Son como 10.000 registros los que necesito extraer.
Quiero decir que no puedo utilizar otro tipo de BD, por que el cliente ya tiene todo montado en access (desafortunadamente).

Pego el código de como lo hago; creo que de una u otra forma se puede optimizar, pero para ello necesito de su ayuda e ideas.

Gracias de antemano.

NeoNew

Código Delphi [-]

  ADOTablePedido.Filter := 'FechaRegistro > '+DateToStr(myDate);
  ADOTablePedido.Filtered := True;

  while not ADOTablePedido.Eof do
  begin
    if  Not(ADOTablePedido.FieldByName('AnularPedido').AsBoolean) then
    begin
      stPedidoNumero := QuotedStr(ADOTablePedido.FieldByName('PedidoNumero').AsWideString);
      ADOTablePedido2.Filter := 'PedidoNumero = ' + stPedidoNumero;
      ADOTablePedido2.Filtered := True;
      while not ADOTablePedido2.Eof do
      begin
        if (ADOTableProdTerminado.Locate('NumeroOrdenCompra;CodigoItem',VarArrayOf([ADOTablePedido2.FieldByName('PedidoNumero').AsString,ADOTablePedido2.FieldByName('CodigoProducto').A  sString]), [])) then
        begin
          stNumLote :=  QuotedStr(ADOTableProdTerminado.FieldByName('NumLote').AsWideString);
          stFechaSalida := QuotedStr(Copy(ADOTableProdTerminado.FieldByName('FechaRegistro').AsString,1,10));
        end;
        if (ADOTableListaDetalles.Locate('CodigoPT',ADOTablePedido2.FieldByName('CodigoProducto').AsString, [])) then
        begin
          stNombreDetalle := QuotedStr(ADOTableListaDetalles.FieldByName('Nombre').AsString);
          stSolvente :=  QuotedStr(Trim(ADOTableListaDetalles.FieldByName('Solvente').AsString));
        end;

        cadena := 'INSERT INTO ListaPedidos(.........)';
        cadena := cadena + 'VALUES (stPedidoNumero,stNumLote,stNombreDetalle...';
        cadena := cadena + ')';

        ADOQueryPedidos.SQL.Clear;
        ADOQueryPedidos.SQL.Text := cadena;
        ADOQueryPedidos.ExecSQL;

        ADOTablePedido2.Next;
      end;
    end;
    ADOTablePedido.Next;
  end;

olbeup 23-06-2011 08:13:27

Es posible que el problema radique en como abres la base de datos access, si lo haces a modo local en el ordenador principal o lo haces en red, se debe de abrir la base de datos todos por igual aunque la aplicación esté en el principal, creo que puede ser el retraso que tienes.

Un saludo.

NeoNew 23-06-2011 15:03:42

Gracias olbeup

CursorLocation = ClUseServer en ADOs me permitió bajar un poco el tiempo, pero sigue bastante lento.

olbeup 27-06-2011 08:19:41

Tienes algún antivirus en el servidor, si es así, excluye de los archivos de rastreo la base de datos.

Un saludo.

NeoNew 28-06-2011 15:18:14

Mirando y mirando, creo que la demora significativa esta en los Locate, para lo cual no se si exista alguna alternativa mas rápida, lo intente por slq, pero se demora mocho mas, no se que hacer para bajar el tiempo.
Por ahora se me ocurre preguntar por la fecha de modificación de las tablas de Access y así hacer o no el llenado de la tabla nueva.
Entonces.
Si alguien me puede ayudar con lo siguiente:
1. Alternativas al Locate.
2. Como saber la fecha de modificación de una tabla Access.

Gracias.

olbeup : Gracias, antivirus no es.


La franja horaria es GMT +2. Ahora son las 22:02:38.

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