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
[-]
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;
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