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

 
 
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
 



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 11:02:43.


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