Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Limitar Insercion de registros version prueba (https://www.clubdelphi.com/foros/showthread.php?t=4089)

FernanGil 01-10-2003 18:44:32

Limitar Insercion de registros version prueba
 
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:

Código:

{$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

Código:

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


La franja horaria es GMT +2. Ahora son las 04:40:38.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi