Otro consejo o regla que deberías seguir:
Las transacciones deben ser lo más cortas posibles.
Por lo tanto,
- Cada form debería tener una transaccion independiente.
- Cada listado debería tirar de un query con su propia transaccion.
- Si necesitas buscar algún dato deberías hacerlo abriendo y cerrando la transacción inmediatamente.
Por lo tanto:
- Deberías tener un DataModule principal con el componente de base de datos
- Cada Form debería tener su DataModule con una transaccion unida a la base de datos del DataModule principal
- Para consultas aisladas yo hago lo siquiente:
Código Delphi
[-]
function Form1.DameCantidadDato: Integer;
var
q: TFibQuery;
begin
q := TFibQuery.Create(Self);
try
q.Database := DMMain.Database;
q.Transaction := TFibTransaction.Create(Self);
q.Transaction.DefaultDatabase := DMMain.Database;
q.Transaction.StartTransaction;
q.SQL.Text := 'SELECT COUNT(*) FROM TABLA';
q.ExecQuery;
Result := q.FieldByName['COUNT'].AsInteger;
finally
q.Transaction.Free;
q.Free;
end;
end;