Me ha extrañado mucho lo de los problemas comentados con el componente "Table" y yo no recuerdo que fuese tan malo, aunque la última vez que lo usé hace tantos años que ni me acuerdo, así que he hecho una prueba muy simple, apenas he tardado 5 minutos en escribir el proyecto y grabarlo en video.
Solamente quería comprobarme a mí mismo y de paso recordar cómo iba, porque no me gusta contar algo que esté equivocado, quería estar seguro, así que esto es lo que he hecho:
He abierto una vieja máquina virtual con windows XP y delphi 2007, he creado un nuevo proyecto.
De la pestaña Interbase (son los componentes IBX) he añadido un ibdatabase, un ibtransaction y un ibTable.
Lo he conectado a una base de datos firebird 2.5 de una gestión contable que hice hace unos años.
He puesto un dbgrid, un dbnavigator y unos botones para conectar y otro para hacer una búsqueda.
No hay nada de código SQL, ni Query, ni nada de nada, solamente el componente "table".
He añadido (con ibexpert) a una de las tablas 110.000 registros que más los que tenía, suman un total 110.053 registros.
Son poquitos, pero para hacer una prueba creo que valen, y el test lo he grabado en video.
Botón conectar es instantáneo, desconectar igualmente, vuelta a conectar al instante.
Voy al final de la tabla, casi instantáneo. Voy de nuevo al principio, instantáneo.
En el registro 100.000 la descripción es "HOLA", le doy a buscar, que usa un simple
locate y se puede ver que es instantáneo.
Avanzo hacia arriba (retrocedo) un poco y edito un registro cambiando su descripción también por "HOLA", es instantáneo, la edición de cualquier registro no tarda absolutamente nada.
Voy de nuevo al principio y le doy a buscar, encuentra el registro editado también instantáneamente.
Desconectar y salir.
Aquí está
el video de prueba.
Y aquí está el código fuente, nada de SQL, ni nada de nada.
Código Delphi
[-]unit Unit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, DB, IBCustomDataSet, IBTable, IBDatabase, ExtCtrls,
DBCtrls, StdCtrls;
type
TForm6 = class(TForm)
IB1: TIBDatabase;
TR1: TIBTransaction;
ibtbl1: TIBTable;
ds1: TDataSource;
dbgrd1: TDBGrid;
dbnvgr1: TDBNavigator;
pn1: TPanel;
bt2: TButton;
bt1: TButton;
ed1: TEdit;
bt3: TButton;
procedure bt1Click(Sender: TObject);
procedure bt2Click(Sender: TObject);
procedure bt3Click(Sender: TObject);
private
public
end;
var
Form6: TForm6;
implementation
{$R *.dfm}
procedure TForm6.bt1Click(Sender: TObject);
begin
ib1.Connected := not(ib1.Connected);
tr1.Active := ib1.Connected;
ibtbl1.Active := ib1.Connected;
ds1.Enabled := ib1.Connected;
if not(ib1.Connected) then
bt1.Caption := 'Conectar'
else
bt1.Caption := 'Desconectar';
end;
procedure TForm6.bt2Click(Sender: TObject);
begin
close;
end;
procedure TForm6.bt3Click(Sender: TObject);
begin
ibtbl1.Locate('NOMBREPROVINCIA',ed1.Text,[]);
end;
end.