PDA

Ver la Versión Completa : Limitar Insercion de registros version prueba


FernanGil
01-10-2003, 18:44:32
Hola amigos, que tal, tengo lo siguiente:
Estoy desarrollando una aplicacion y a la hora de entregarla me gustaria permitirle insertar hasta un numero limitado de registros, y que despues no pueda continuar insertando mas registros hasta que yo se lo permita.
Como hacerlo? He pensado en ponerle una condicion que comprueba el numero de registros insertados y un valor de un campo en Tabla, ej:

If TablaDatos.Recorcount >= 20 and TablaValor.tex = 'No' then
No permitir mas inserciones.

Y para permitir que pueda insertar mas registros tan solo tengo que cambiar el valor TablaValor de 'No' a otro valor.
Lo que pasa es que esta solucion no me gusta porque cada vez que tenga que insertar un registro va a hacer una consulta a una
Tabla para comprobar el valor de TablaValor. Espero que me den alguna idea o si consideran que esta es la solucion adecuada me lo indiquen.

Saludos y Gracias.

marcoszorrilla
01-10-2003, 18:46:38
Carga al abrir la aplicación el valor en una variable Global y luego ya no tienes que volver a consultar la tabla, puesto que el valor ya está en memoria.

Un Saludo.

delphi.com.ar
01-10-2003, 19:15:30
Si el usuario final no tiene acceso a la estructura de la base de datos, también puedes poner un Trigger que produzca un error cuando inserte mas de un registro.
De todos modos, para estos casos, yo soy partidario de utilizar compilación condicional, así evitamos dejar código compilado en el producto final, y solo agregamos código a la DEMO.

Este es un ejemplo, no se si del todo práctico pero creo mostrar la idea:


{$IFDEF DEMO}
procedure CheckCantRegistros(ADataSet: TDataSet; AMaxRecords: Integer = 20);
begin
if ADataSet.RecordCount >= AMaxRecords Then
raise Exception.CreateFmt('La versión demo no permite mas de %d registros', [AMaxRecords]);
end;
{$ENDIF}
...
procedure InsertarRegistro...
begin
{$IFDEF DEMO}
CheckCantRegistros(Query1);
{$ENDIF}
Query1.Insert;
...
end;


Saludos!

FernanGil
01-10-2003, 19:47:50
Muchas gracias por las dos respuestas, seguramente haré la de colocar una variable global y cargarla al cargar la aplicacion, no es que la otra opcion no me guste, me gusta y me parece mucho mas elegante lo de la compilacion condicional pero desconozco como hacerlo, muchas gracias otra vez.

__cadetill
01-10-2003, 20:35:31
si vas a Project-Options y la pestaña Directories/Conditionals, verás que hay una entrada de texto que pone Conditionals defines. Es aquí donde deberías de poner lo que te propone delphi.com.ar, es decir, la palabra DEMO y, luego, desde código, controlar como comenta delphi.com.ar el define

Si creo un proyecto nuevo y, en el OnShow del formulario pongo esto


procedure TForm1.FormShow(Sender: TObject);
begin
{$IFDEF DEMO}
showmessage('demo');
{$ENDIF}
showmessage('hola');
end;

Si esta puesta la palabra DEMO en Conditionals defines, saltarán los dos mensajes, en cambio, si no está puesta, sólo saltará el segundo mensaje

Espero te sirva