Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Limitar cantidad e registros a crear en una base de datos (https://www.clubdelphi.com/foros/showthread.php?t=73166)

RedVenom 05-04-2011 05:00:46

Limitar cantidad e registros a crear en una base de datos
 
Antes que nada disculpen si no va aqui la pregunta pero no supe donde de ponerla, bueno ahi va la cuestion tengo un LookUpComboBox y bueno dependiendo la opcion que escojan de el es la catidad de registros que quiero dejar que el usuario pueda registrar en la base de datos, por ejemplo:
Si escojen Ciclismo que solo puedan meter 3 participantes de ciclismo en la base de datos y no se si puede hacer con un DBGrid o con un contador o algo parecido por favor me urge espero su ayuda.
Gracias de antemano.

RedVenom 05-04-2011 07:27:12

Por si no me explique aqui les va un mejor ejemplo:

Tengo una tabla Asocicacion, una Tabla Participantes, una Tabla Deporte y una Tabla Inscripcion entonces por ejemplo una asociacion en el deporte futbol solo puede tener inscritos a 11 participantes y en el deporte ciclismo uno entonces mi tabla inscripcion guardo el ID del participante y el ID del deporte y el id de la asociacion pero en esa tabla yo quiero que de alguna forma solo pueda admitir 11 registros si es de futbol o 1 si es de ciclismo alguien me puede dar alguna idea.
Gracias

RedVenom 05-04-2011 07:44:21

Yo solo me voy dando ideas pero estas nuevas ideas me crean nuevas interrogantes, bueno ahi les va mi idea crear un campo en el que guarde el ID de la asociacion y el ID del Deporte creando un registro de este tipo "01-03" y luego recorrer la tabla y por cada registro que encuentre que lo sume en uno y lo guarde en una variable y despues con un if preguntar por ejemplo en el caso del futbol si la variable es menor que once dejar guardar un nuevo registro y si no mandar un mensaje que ya no se pueden guardar mas registros para ese deporte, ahora la duda es como puedo hacer ese barrido o recorrido por la tabla y como hago el incremento en uno dentro de la variable cada vez que encuentre un registro igual al dato que le estoy pasando.

De nuevo espero su gran ayuda es de vida o muerte casi, solo tengo hasta mañana al medio dia para terminar esta aplicacion.

ecfisa 05-04-2011 07:49:04

Hola RedVenom.

En principio creo que el lugar adecuado para evaluar es el evento BeforeInsert del DataSet.

Por ejemplo:
Código Delphi [-]
...
(* True si se alcanzo la cantidad máxima permitida *)
function TForm1.CiclistasFull(ADataSet: TDataSet; Tope: Integer): Boolean;
begin
  Result:= ADataSet.RecordCount >= Tope;
end;

procedure TForm1.DataSet1BeforeInsert(DataSet: TDataSet);
begin
  if CiclistasFull(DataSet, 3) then  // donde 3 es la cantidad máxima de ciclistas (Tope)
  begin
    ShowMessage('Error: Pista demasiado angosta para tanta bicicleta...');
    Abort;
  end;
end;
...


Un saludo.

RedVenom 05-04-2011 07:56:05

Disculpa tanta ignorancia pero no soy muy asiduo a programar pero en la funcion en que parte le paso el campo o el dato que quiero que cuente.
Gracias por tu ayuda

ecfisa 05-04-2011 07:56:37

Hola de nuevo.

No vi tu segundo post hasta despues de guardar el anterior. Había interpretado por el primero que eran varias tablas.

Pero viendo tu segundo mensaje me parece que en una misma tabla tenes todos los deportes. ¿ Es así ?

Un saludo.

RedVenom 05-04-2011 07:58:10

asi es en una misma tabla tengo todos los deportes pero futbol solo se pueden inscribir hasta once y en ciclismo solo uno y asi sucesivamente dependiendo del deporte.

RedVenom 05-04-2011 07:59:59

es decir en una misma tabla voy a meter todos los que se inscribieron a futbol, a ciclismo, a natacion pero quiero limitar la cantidad de inscritos segun el deporte al que se inscribieron.

ecfisa 05-04-2011 08:00:16

¿ Con que base de datos estas trabajando ?

RedVenom 05-04-2011 08:00:55

Con SQL server 2008

RedVenom 05-04-2011 08:11:03

Alguna idea??

Casimiro Notevi 05-04-2011 11:49:19

Amigo, para empezar, deberías leer nuestra guía de estilo, gracias por tu colaboración.

Y para continuar, tienes muchas opciones, por ejemplo un simple campo que indique qué tipo de deporte es.

RedVenom 05-04-2011 15:54:36

Casimiro Notevi
gracias por lo de la guia de estilo y pues tu sugerencia de resolucion a mi problema creo que no dice nada porque ya se que le tengo que poner un campo que me diga que deporte es, eso es mas que obvio pero dime como limito que no creen mas registros de los que permite el deporte te repito si el deporte solo se pueden inscribir hasta once que no me creen 12 registros o mas que pertenesca al deporte futbol.
De todos modos se agradece tu "aportacion" a mi problema.

Casimiro Notevi 05-04-2011 16:31:35

Cita:

Empezado por RedVenom (Mensaje 395877)
[..] De todos modos se agradece tu "aportacion" a mi problema.

De nada, hombre ;)

¿Acaso no te gusta el código de ecfisa?, por eso te he indicado yo lo del tipo de deporte, porque si es tan obvio como dices entonces no sé cómo no lo has entendido ;)

Sólo has de añadir el filtro por ese campo de "TipoDeporte", hay muchas formas, como te indiqué antes, pero aprovechando el código de ecfisa, puede ser algo así:
Código Delphi [-]
(* True si se alcanzo la cantidad máxima permitida *)
function TForm1.CiclistasFull(ADataSet: TDataSet; Tope, TipoDeporte: Integer): Boolean;
begin
  case TipoDeporte of
    1: // futbol
    2: // ciclismo
       begin
         // aquí debes contar los registros que cumplan con TipoDeporte=2
         // No sé si el dataset que usas es una tabla, un query, etc. pero se trata de contar los registros
         Result := select coun(*) from ADataSet where CampoTipoDeporte=TipoDeporte;
       end;
    3: // canicas
    4: // estampitas de jugadores de futbol
  end;
end;

procedure TForm1.DataSet1BeforeInsert(DataSet: TDataSet);
begin
  if CiclistasFull(DataSet, 3, 2) then  // donde 3 es la cantidad máxima de ciclistas (Tope), y 2 es el TipoDeporte
  begin
    ShowMessage('Error: Pista demasiado angosta para tanta bicicleta...');
    Abort;
  end;
end;
...

RedVenom 05-04-2011 16:40:07

Gracias me parece una respuesta mas adecuada lo probare porque la forma de tu primer respuesta no me dice nada porque como mencione no soy un programador asiduo, pero ya respondiendo de esta forma me da una mejor idea de lo que voy a hacer.
Gracias y si queda el codigo yo te aviso gracias porque lo tratare de adaptar porque en la tabla deportes es donde tengo guardaco cuantos pueden ser inscritos a cada deporte.
Gracias

Casimiro Notevi 05-04-2011 17:21:36

De nada, para eso estamos aquí, para ayudarnos los unos a los otros.

RedVenom 05-04-2011 17:26:15

ya lo estuve tratando de implementar en mi cabeza pero fijate que bueno con el codigo que me das limito la cantidad de registros que se pueden crear para X deportes pero hay una variable mas que es la de la tabla asociacion lo que quiero decir con esto es que una asociacion puede tener n catidad de escritos en x deporte y asi otras, asociaciones no se si me explique??

Casimiro Notevi 05-04-2011 17:43:18

Por favor, pon aquí el código que estás usando, la estructura de las tablas, etc. para que podamos ir sobre seguro.

RedVenom 05-04-2011 18:30:19


Aqui esta la estructura de las tablas de la base de datos

Código:

ASOCIACIONES       
--------------       
ID                         
NOMBRE                 
                     

PARTICIPANTES           
---------------         
ID
NOMBRE
FECHA DE NAC


DEPORTES
-----------
ID
DEPORTE
CANTIDAD DE PARTICIPANTES
LUGAR


INSCRIPCIONES
---------------
ID_PARTICIPANTES
ID_ASOCIACIONES
ID_DEPORTE
IDINSCRIPCION
FECHA

Esta es la estructura de las tablas de la base de datos y pues mi idea es agregar un campo mas a la tabla inscripciones en el que una el ID de asociaciones y el ID del deporte y luego contar cuantas veces se repite en los registros de la base de datos guardarlo en una variable y despues compararlo con el campo cantidad de participantes de la tabla deportes si es menor o igual y dependiendo del resultado guardar el nuevo registro o mandar el mensaje.

Espero haber sido mas explicito la verdad ya estot bloqueado, de nuevo agradezco su ayuda.

RedVenom 05-04-2011 18:50:13

aqui esta el link con la imagen de como estan las tabalas de la base de datos porque el mensaje anterior no se aprecia http://cid-1291e717d22eba1d.office.l...%20DE%20BD.png



La franja horaria es GMT +2. Ahora son las 16:06:27.

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