Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-04-2007
leanfreue leanfreue is offline
Miembro
 
Registrado: mar 2007
Posts: 19
Poder: 0
leanfreue Va por buen camino
Evitar el "Refresh" del ClientDataSet

Hola amigos del foro.
Hace poco comenzé a programar (bue... en realidad, a probar) con Delphi 7 y MySQL.
Estoy haciendo algunas pruebas para ver cuál es la forma más rápida de acceder a los datos, modificarlos, ordenarlos, etc.
Estoy utilizando dbExpress y ClientDataSet para acceder y actualizar datos.
Noté que a medida que aumenta la cantidad de registros de una tabla, el refresh del ClientDataSet tarda cada vez más (ya se, no descubrí la pólvora )

Estoy probando una solución para este problema, y consiste en lo siguiente:

Al agregar un nuevo registro, lo agrego a la base de datos mediante una instrucción SQL en un SQLDataSet (para mí es una opción muy cómoda) y luego, en lugar de hacer un refresh del ClientDataSet, le agrego (mediante insert - post) el nuevo registro.

A continuación les muestro el código que utilizo.

Código Delphi [-]
  // Agregar un cliente.
  self.SQLDataSet2.Close;
  self.DataSource1.Enabled := False;
  self.SQLDataSet2.CommandText :=
  'insert into tbClientes (codCliente, Nombre, apellido, empresa, mostrar)' +
  ' values (' +
  IntToStr(self.cmpCodCliente) + ', ' +
  '"' + self.cmpNomCliente + '", ' +
  '"' + self.cmpApeCliente + '", ' +
  '"' + self.cmpEmpCliente + '", ' +
  '"' + self.cmpMosCliente + '")';
  self.SQLDataSet2.ExecSQL();

  self.SQLDataSet2.Close;
  self.SQLDataSet2.CommandText := 'select last_insert_id()';
  self.SQLDataSet2.Open;
  NewId := self.SQLDataSet2.Fields[0].AsInteger;

// Esto es lo que tarda
// self.ClientDataSet1.Refresh;

  self.DataSource1.Enabled := True;
  with self.ClientDataSet1 do
    begin
      ReadOnly := false;
      Insert;
      FieldByName('idCliente').Value := NewId;
      FieldByName('CodCliente').Value := self.cmpCodCliente;
      FieldByName('Nombre').Value := self.cmpNomCliente;
      FieldByName('Apellido').Value := self.cmpApeCliente;
      FieldByName('Empresa').Value := self.cmpEmpCliente;
      FieldByName('Mostrar').Value := self.cmpMosCliente;
      Post;
      ReadOnly := true;
    end;


Por las pruebas que estuve haciendo, todo funciona perfectamente. Por lo que Uds. se preguntarán: ¿Y qué es lo que querés saber entonces?

El tema es que como no tengo experiencia en esto, no sé si lo que estoy haciendo puede traer algún problema o riesgo, o si hay alguna mejor forma de hacerlo. Por lo que me gustaría que me den su opinión de expertos.

Les pido disculpas si la pregunta es muy ambigua o demasiado amplia.

Desde ya les agradezco su tiempo.

Leandro

Última edición por leanfreue fecha: 14-04-2007 a las 07:00:45.
Responder Con Cita
  #2  
Antiguo 14-04-2007
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Supongo que no tendrás ningún problema mientras no hagas un ApplyUpdates, pero en tu caso que haces los cambios a través de SQLDataSet, no deberías tener problemas. Yo haría un CancelUpdates antes de cerrar el ClientDataSet.

El único inconveniente que le veo es si están trabajando varios clientes a la vez, no verás las actualizaciónes hechas por el resto de los clientes.
Responder Con Cita
  #3  
Antiguo 14-04-2007
leanfreue leanfreue is offline
Miembro
 
Registrado: mar 2007
Posts: 19
Poder: 0
leanfreue Va por buen camino
Gracias Basti, voy a tener en cuenta lo de CancelUpdates, y en cuanto a las actualizaciones de los otros usuarios, voy a poner un botón "Refresh" en el formulario, para que el usuario pueda asegurarse de estar viendo los últimos datos.

Gracias otra vez. Saludos.

Leandro
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
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
"ChequeaEsto" elegido el futuro "Killer CLubDelphi" mamcx Noticias 51 31-10-2006 20:56:32
Cinco normas para evitar el "phishing" marcoszorrilla Noticias 56 02-05-2006 21:07:55
Evitar navegar desde barra "Dirección" de MI PC Luis F. Orjuela API de Windows 1 10-02-2006 19:56:16
porque no me reconoce los caracteres "*" ni "%" cuando filtro mrmago Conexión con bases de datos 10 27-01-2006 04:21:16


La franja horaria es GMT +2. Ahora son las 12:57:33.


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