Filtro de códigos visual foxpro

Tengo una tabla llamada partidos de la cuales deseo reportar 6 campos de los 10 que tiene pero del un campo llamado galpón me muestra la descripción del galpón mas no me muestra el nombre del galpón osea:

tablas==> jugador, equipo =>> cada jugador esta relacionado a un equipo jalando el id de equipo.

Entonces al hacer un sorteo para saber que equipos jugaran existen condiciones en la cual los equipos que sean real 1, rel 2, y real 3, no pueden jugar entre ellos, entonces he creado un campo mas en la tabla equipo la cual dice frente para identificarlos a todos ellos como real y poder realizar el sorteo, al realizar esta opción lo capturo en la tabla partidos

Las condiciones son las siguientes: no tienen que pelear entre sucursales, y los juegos no deben ser seguidos y en la tabla partida no me muestra el nombre del equipo si no el frente.

Pero en la tabla partidas tengo el código de jugador quiero saber también si partiendo del código de jugador que contiene en su tabla el código de equipo. Pueda reemplazar el nombre de frente por nombre de equipo.

* tabla equipo (id_equipo, equipo, frente)

* tabla jugador (id_ jugador, id_equipo, jugador)

*****después del proceso de sorteo donde necesariamente tengo que capturar el frente de la tabla galpón. Me resulta lo siguiente.

* Partida (id_jugador, frente, id_jugadorb, frenteb), podría crear otra tabla en la cual copie solo estos datos y reemplazar el frente por el nombre de equipo, he aquí mi incógnita.

Creo que redunde explicación no se si me deje entender, si no me entienden por favor escríbanme necesito su ayuda.

1 Respuesta

Respuesta
1

Esta muy interesante tu caso! Pero a ver... croe que viene un poco enredada la pregunta...! El titulo dice "filtro de códigos" ok! ¿Qué es exactamente lo que necesitas? Veo que planteas varias cosas que necesitas! Vamos por partes! Explicame un poco mejor y te ayudare con mucho gusto!

Gracias por responder, cuando me refería a filtro de códigos quería que me filtre el código osea (id_codigo) del equipo de la tabla jugador, entonces eso ya lo resolví, creando una función en prg filtrando con un selct * from tabla, etc y todo ello y logre solucionarlo, muchas gracias de antemano pero deseo aprovechar para hacerte una serie de consulta para mi sistema si no es mucha molestia. en principio

1. es en el reporte, al momento de realizar el sorteo para los partidos lo ordeno por peso de jugador. entonces como puedo hacer que en mi reporte me muestre aleatoriamente, que no tenga un orden pero si que tengan una numeración.

ejemplos: no de esta forma:

COD JUGADOR PESO EQUIPO1 JUGADOR2 PESO EQUIPO2

7 JUAN 3.05 ALIANZA ROBERTO 3.06 UNIVERSITARIO

20 RODOLFO 3.05 ALIANZA CHIZITO 3.04 MELGAR

31 DAVID 3.06 ALIANZA MIGUEL 3.07 MELGAR

Lo deseo de esta forma:

N° JUGADOR PESO EQUIPO1 JUGADOR2 PESO EQUIPO2

1 juan 3.06 alianza roberto 3.07 melgar

2 david 4.07 union ichmiño 4.06 universitario

3 *****

4 ********

2. Cual es la lógica de cotejamiento por libra si la diferencia es una onza, osea:

16 oz = 1 libra

y deseo cotejarlos o emparejarlos por 1 onza de esta forma: tengo echo una lógica que me saque la diferencia de 0.001 al ingresarlo por un entero y dos decimales

=> 3.05

3.06 => 3.06

=> 3.07

pero cuando llega a 3 libras y 15 onzas debería emparejarse con 4 libras y 0 onzas y/o viceversa.

la verdad tengo mas cosas que preguntarte, como realizar el mantenimiento de mi sistema al vaciar correctamente algunas tablas desde el menu de un proyecto generado, si se supone que esta abierto la base de datos porque me pide que abra la tabla en exclusiva y lo hice de esta manera.

USE PARTIDA EXCLUSIVE IN 0

SELECT PARTIDA

ZAP PARTIDA

**********

USE PARTIDAS2 EXCLUSIVE IN 0
SELECT PARTIDA2
ZAP PARTIDA2

**********

USE COMPETIDDORES EXCLUSIVE IN 0
SELECT COMPETIDORES
ZAP COMPETIDORES

es correcto???

Disculpa la tardanza en responder! El trabajo me consume mucho tiempo! :(

1. Para mostrar los registros ordenados... andes de mandar a generar el reporte, debes ordenarlos con SET ORDER TO. Anda a la tabla, en modo de diseño y establece el campo id_codigo como llave (indice) regular!

Antes de mandar a llamar el reporte con REPORT FORM ... debes hacer referencia al indice de la tabla para ordenar los registros por ese campo. Cuando estableces el indice en modo de diseño de la tabla... fijate como se llama el indice. Anda a la pestaña INDEX del diseñador de tablas y ahí aparece el nombre! Muchas veces... a algunos programadores de fox, les da error cuando intentan hacer referencia al indice porque no se fijan en el NOMBRE DEL INDICE... sino que toman el nombre del CAMPO y eso es incorrecto. SET ORDER TO no reconoce el nombre del campo... sino del indice. Y si el nombre del campo es demasiado largo... el nombre del indice se acorta. Antes de llamar al reportte... hace referencia a la tabla a la cual filtrastes los registros... o aun mejor (como veo que usas un select) ANTES DE HACER EL SELECT... para filtrar... ordena la tabla. Así

SELECT tabla

SET ORDER TO id_codigo ASCENDING

Recordá que después de TO debes hacer referencia al nombre del indice! :) Ascending te ordena los registros de la tabla en orden ascendente. DESCENDING en orden descendente.

Respecto al punto 2.. hmm pues no comprendí muy bien lo que necesitas. :(

Respecto a vaciar tablas... hay algunas formas de hacerlo. Yo te recomiendo que para "vaciar la tabla" unicamente utilices el comando DELETE para marcar los registros para eliminación. ¿Por qué usar ZAP? ZAP te vacía todo lo que tienes en la tabla. ¿Es eso lo que necesitas? ¿Oo? Busca la entrada en mi blog sobre DELETE

http://ravennfoxpro.blogspot.com/

Para usar, en tu caso, ZAP... coloca esos mismos códigos en el evento UNLOAD del form desde donde ordenas la ejecución.

Hola ante todo gracias por responder muchas gracias.

1. En cuanto a la primera pregunta deseo que los resultados sean aleatorios que no tengan ningún orden que sea dispersados, pero que tenga un contador o numero de orden (del orden aleatorio que se ha realizado) este es mi código a mostrar:

IF thisform.optiongroup2.Value = 1

IF LEN(ALLTRIM(thisform.text1.Value))=5
tor = ALLTRIM(thisform.text1.Value)
DO CASE
CASE thisform.optiongroup1.Value = 1
SELECT * FROM torneos WHERE id_torneo = tor INTO CURSOR torneo
SELECT a.id_torneo, a.nombre, a.fech_fin, a.fech_ini,;
b.gallo_a, buscarcaract(b.gallo_a) name_car, buscarGallo(b.gallo_a) name_a, buscarGalponA(b.gallo_a) name_x, b.galpon_a,;
b.gallo_b, buscarcaract(b.gallo_b) name_ca, buscarGallo(b.gallo_b) name_b, buscarGalponA(b.gallo_b) name_y, b.galpon_b,;
b.ganador,buscarGallo(b.ganador) name_g, b.estado,;
pesito(b.gallo_a) pesitoA, pesito(b.gallo_b) pesitoB;
FROM torneo a, partidas b;
WHERE a.id_torneo = b.id_torneo;
INTO CURSOR REPORTE_PARTIDAS
REPORT FORM rpt_partidas preview
OTHERWISE
ENDCASE
ELSE
MESSAGEBOX('Numero de Torneo Incorrecto')
ENDIF
ELSE
SELECT a.id_torneo, a.nombre, a.fech_fin, a.fech_ini,;
b.peso_a, b.peso_b,b.gallo_a, buscarcaract(b.gallo_a) name_car, buscarGallo(b.gallo_a) name_a, b.galpon_a,;
b.gallo_b, buscarcaract(b.gallo_b) name_ca,buscarGallo(b.gallo_b) name_b, buscarGalponA(b.gallo_a) name_x, b.galpon_b,;
b.ganador, buscarGallo(b.ganador) name_g, buscarGalponA(b.gallo_b) name_y, b.estado,;
pesito(b.gallo_a) pesitoA, pesito(b.gallo_b) pesitoB;
FROM torneos a, partidas b;
WHERE a.id_torneo = b.id_torneo;
INTO CURSOR REPORTE_PARTIDAS
REPORT FORM rpt_partidas preview
ENDIF


Las funciones son estas:

FUNCTION buscarGallo(por)
SELECT * FROM gallos a1 WHERE a1.id_gallo=por INTO CURSOR gal
a = gal.nombre
RETURN a
ENDFUNC
******
FUNCTION buscarcaract(d)
SELECT * FROM gallos a2 WHERE a2.id_gallo=d INTO CURSOR car
c = car.característica
RETURN c
ENDFUNC
*****
********
FUNCTION pesito(n)
SELECT * FROM gallos a9 WHERE a9.id_gallo=n INTO CURSOR jum
n = jum.pesito
RETURN n
ENDFUNC
*******
*****
FUNCTION buscarGalponA(y)
SELECT a1.nombre, a2.id_gallo, a1.representa FROM galpón a1, gallos a2 WHERE a2.id_galpon = a1.id_galpon INTO CURSOR galp
SELECT * FROM GALP WHERE ID_GALLO = Y INTO CURSOR GALP1
b = GALP1.nombre
RETURN b
ENDFUNC
FUNCTION buscarGalpon(y)
SELECT a1.nombre, a2.id_gallo, a1.representa FROM galpón a1, gallos a2 WHERE a2.id_galpon = a1.id_galpon INTO CURSOR galp
SELECT * FROM GALP WHERE ID_GALLO = Y INTO CURSOR GALP1
b = GALP1.representa
RETURN b
ENDFUNC
FUNCTION Galpón(y)
SELECT representa FROM galpón WHERE id_galpon = Y INTO CURSOR GALP1
b = GALP1.representa
RETURN b
ENDFUNC
FUNCTION buscarTorneoA(y)
SELECT * FROM torneos a1 WHERE a1.id_torneo=y AND a1.estado = .t. INTO CURSOR galpa
c = galpa.nombre
RETURN c
ENDFUNC
FUNCTION buscarTorneoB(y)
SELECT * FROM torneos a1 WHERE a1.id_torneo=y AND a1.estado = .t. INTO CURSOR galpa
d = galpa.nombre
RETURN d
ENDFUNC
FUNCTION buscarTorneoC(y)
SELECT * FROM torneos a1 WHERE a1.id_torneo=y AND a1.estado = .t. INTO CURSOR galpa
d = galpa.categoría
RETURN d
ENDFUNC
FUNCTION ganador(POR)
**
SELECT COUNT(ID_TORNEO) CANTIDAD ;
FROM PARTIDAS;
WHERE ID_TORNEO = POR ;
AND ALLTRIM(ESTADO) = 'PENDIENTE';
INTO CURSOR GANADORES
**
SELECT GANADORES
**
IF GANADORES.CANTIDAD > 0
*SELECT COUNT(GANADOR) GANA, GANADOR FROM PARTIDAS GROUP BY GANADOR ORDER BY GANA INTO CURSOR GA
ELSE
RETURN 'VACIO'
ENDIF
**
ENDFUNC
FUNCTION porPelear(x)
SELECT count(gallo_a) cantidad FROM partidas WHERE id_torneo = x AND ALLTRIM(ganador) = '' INTO CURSOR peleadas
RETURN peleadas.cantidad
ENDFUNC
FUNCTION peleadas(x)
SELECT count(gallo_a) cantidad FROM partidas WHERE id_torneo = x and LEN(ALLTRIM(ganador)) > 0 INTO CURSOR peleadas
RETURN peleadas.cantidad
ENDFUNC
FUNCTION peleas(x)
SELECT count(gallo_a) cantidad FROM partidas WHERE id_torneo = x INTO CURSOR peleadas
RETURN peleadas.cantidad
ENDFUNC
FUNCTION Sobrantes(x)
SELECT count(id_torneo) cantidad FROM partidas WHERE id_torneo = x INTO CURSOR canttorneo
SELECT canttorneo
IF canttorneo.cantidad > 1 THEN
SELECT cruce_varios
DELETE FROM cruce_varios
SELECT gallo_a id_gallo FROM partidas WHERE id_torneo = x INTO ARRAY galloa
SELECT cruce_varios
APPEND FROM ARRAY galloa
**
SELECT gallo_b id_gallo FROM partidas WHERE id_torneo = x INTO ARRAY gallob
SELECT cruce_varios
APPEND FROM ARRAY gallob
**
SELECT competidores.id_gallo FROM competidores;
LEFT OUTER JOIN cruce_varios ON cruce_varios.id_gallo = competidores.id_gallo;
WHERE cruce_varios.id_gallo IS NULL;
INTO CURSOR sobrantes
SELECT sobrantes
**
SELECT b.*, c.* FROM sobrantes a, gallos b, galpón c;
WHERE a.id_gallo = b.id_gallo AND b.id_galpon = c.id_galpon AND b.torneo = x;
INTO CURSOR sobrantes2
SELECT sobrantes2
ELSE
MESSAGEBOX('No hay Partidas Cotejadas',0+64,'COTEJO')
ENDIF
ENDFUNC

Todo este proceso me funciona correctamente, reitero lo que requiero:

que en el reporte deseo que no tenga ningún orden que la posición de cada registro sea aleatoria, que el registro 1 de mi tabla pase a ser el 50 o 30 el 2 que sea el 100 y así sucesivamente, pero que exista un numero de orden, osea desordenar los registros y que ese desorden tenga numeración.

2. la pregunta 2 ya lo resolví, muchas gracias igual.

3. la pregunta tres es para borrar todo lo que haga en la pregunta 1 la tabla se llama partidas, y para llegar a partidas uso otras tres tablas mas que son; partidas, partidas2, amarres; y una que no esta dentro del proyecto se encuentra en la carpeta del proyecto pero no dentro de el y también se llama partidas2, quiero crear el modulo de mantenimiento en la cual me borre, esas tablas.

Espero me entiendas, muchas gracias.

Muchas Gracias pro haber atendido a mi pregunta la solución solo se reducía en el siguiente esquema:
SELECT Int(Rand()*1000), a.id_torneo, a.nombre, a.fech_fin, a.fech_ini, a.estado,;
FROM torneos a, partidas b; WHERE a.id_torneo = b.id_torneo; Order By 1;

INTO CURSOR REPORTE_PARTIDAS

REPORT FORM rpt_partidas preview

muchas gracias por toda su atención

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas