Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-06-2012
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Buscar registro por parametros

Hola a todos.

Estoy intentando controlar si un registro esta dentro de una tabla con el código siguiente:

Código Delphi [-]
 
for i:= 1 to StrToInt(CursaVOLTES.Text) do
        begin
                Pasos.Close;
                Pasos.Open;
                if Pasos.Locate('ID_CURSA; ID_VOLTA; DORSAL', VarArrayof([PasosID_CURSA.Value, PasosID_VOLTA.Value, PasosDORSAL.Value]),[])then
                begin
                        ShowMessage('Corredor existent');
                        Abort;
                end
                else
                begin
                        with ibqryInserta_Pas do
                        begin
                                Close;
                                ParamByName('ID_CURSA').AsString:= IntToStr(CursaID_CURSA.Value);
                                ParamByName('DORSAL').AsString:= IntToStr(InscritsDORSAL.Value);
                                ParamByName('VOLTA').AsString:= IntToStr(i);
                                ParamByName('PASAT').AsString:='N';
                                Open;
                        end;
                        ibqryInserta_Pas.Next;
                end;
        end;

Pasos es la tabla donde guardo los registros, los cuales constan de un ID (autoincremental con trigger y único) un ID_CURSA y un ID_Volta, (se los paso por parametro) y un DORSAL, que es el que escribo a mano.

No se si estoy pasando bien los parametros al arrayof, pero si ejecuto paso a paso, el valor que cogen los campos es siempre 0, con lo que el array queda 0,0,0 y evidentemente no cumple la condición, con lo cual me añade un registro que ya existe a la tabla, es decir si existe 1,1,6 me dice que no y lo vuelve a crear.

Alguna idea?

Delphi 6 Firebird 1.5.6

Saludos
Responder Con Cita
  #2  
Antiguo 22-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No entiendo bien lo que estás haciendo, si quieres comprobar si existe un dorsal:

Código Delphi [-]
q.close;
q.sql.text := 'select * from tabla where dorsal= :numero';
q.params[0].asinteger = StrToInt(edit1.text);  // aquí teclea el usuario el núm. de dorsal
q.execsql;
if q.recordcount>0 then  // existe
begin
  // lo que quieras
end
else  // no existe
begin
  // lo que quieras
end;
Responder Con Cita
  #3  
Antiguo 22-06-2012
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Gracias Antonio.

Primero felicidades por tus 16 k, pareces un ordenador antiguo, jejeje

En cuanto a tu respuesta, igual es que no me he explicado bien.

Tengo una tabla de la carrera con un ID unico, enlazado a esta la tabla de los inscritos con un campo id_carrera que es igual en las dos tablas, otra tabla de vueltas unida a la tabla carrera por el id_carrera y finalmente una tabla pasos con el campo id_carrera, id_vuelta y dorsal.

Desde el formulario de la carrera creo la cabecera con unos datos basicos, id, fecha, nombre numero de inscritos y numero de vueltas.

Al salir del campo numero de vueltas, genero en la tabla vueltas tantos registros como valor tiene la tabla carrera, es para poder controlar si una vuelta esta cerrada (han pasado todos los corredores, o no y estan doblados).

Ej. ID_Carrera =1, nombre = prueba, categoria= prueba, fecha = hoy numer inscritos 5 numero vueltas 5

En la tabla vueltas oibtengo:
ID ID_CARRERA ID_VUELTA FINALIZADA
1 1 1 N
2 1 2 N
3 1 3 N
4 1 4 N
5 1 5 N

Luego pongo lo inscritos

ID ID_CARRERA DORSAL RETIRADO
1 1 1 N
2 1 2 N
3 1 45 N
4 1 60 N
5 1 70 N

En el afterpost de esta tabla, genero las vueltas

ID ID_CARRERA ID_VUELTA DORSAL
1 1 1 1
2 1 2 1
3 1 3 1
4 1 4 1
5 1 5 1
6 1 1 2
7 1 2 2
Asi hasta que s completa el bucle........
...........
24 1 4 70
25 1 5 70

El problema viene cuando cambio un dorsal en su dbgrid correspondiente, que lo que quiero controlar es que no exista, ya que sinó me lo duplica y no es lo que me interesa precisamente.

Por eso busco con el array que la combinacion carrera, vuelta, dorsal, no exista ya que esta combinacion solo puede darse una vez en toda la tabla.(no pueden haber dos carreras 1, aunque si dos vueltas 1 pero de distintas carreras).

Espero haber sido más claro.

Saludos

Josep

Última edición por jafera fecha: 22-06-2012 a las 21:38:55. Razón: errores ortograficos
Responder Con Cita
  #4  
Antiguo 22-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jafera Ver Mensaje
Primero felicidades por tus 16 k, pareces un ordenador antiguo, jejeje
Gracias, aunque antigüo sí que soy, y ordenado también

Entonces, si lo he entendido, se trata de consultar la tabla esta última, ¿no?

Código Delphi [-]
q.close;
q.sql.text := 'select * from carrera where carrera= :carrera and vuelta= :vuelta and dorsal= :dorsal';
q.params[0].asinteger := strtoint(edit1.text);
q.params[1].asinteger := strtoint(edit2.text);
q.params[2].asinteger := strtoint(edit3.text);
q.execsql;
if q.recordcount>0 then  // existe
...
Responder Con Cita
  #5  
Antiguo 22-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Aunque lo que realmente no entiendo es eso de "cambiarle el dorsal", eso no debería de poder hacerse, ni tampoco darle un mismo número a otro, ¿no?
Responder Con Cita
  #6  
Antiguo 22-06-2012
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Evidentemente, no puede duplicarse.
Cambiarse si porque me puedo equivocar y si en vez de 12 pongo 14, se debe cambiar.

Aunque despues de haber escrito los mensajes, creo que ya se por donde va el fallo, no paso correctamente los parametros pues estoy buscando en la tabla algo que no le digo que es.

Los valores carrera, vuelta y dorsal, estan en la tabla pasos pero yo no veo estoa tabla directamente, solo le puedo pasar como parametro ID_Carrera, Dorsal ya que estos datos si los tengo visibles.

Voy a probar y cuento.

Josep

Nota: Lo de los 16k me referia al Commodore 16 que fue mi primer ordenador, luego pase al 128 y ya a los PC.
Responder Con Cita
  #7  
Antiguo 22-06-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jafera Ver Mensaje
Nota: Lo de los 16k me referia al Commodore 16 que fue mi primer ordenador, luego pase al 128 y ya a los PC.
Ya, aunque pensé que lo decías por el "Dragón 16"

Este es el Dragón 32:
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
buscar registro camiz Conexión con bases de datos 1 29-05-2012 10:12:59
Buscar Registro Semejantes servicomp Firebird e Interbase 9 14-09-2010 10:52:07
Buscar y reemplazar en el registro aom Varios 2 21-09-2006 13:50:06
Buscar un registro en una tablaAdo Telemaco Conexión con bases de datos 3 08-10-2004 09:24:19
Buscar con 3 parametros CI>140 Conexión con bases de datos 4 12-09-2003 09:46:48


La franja horaria es GMT +2. Ahora son las 01:23:17.


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
Copyright 1996-2007 Club Delphi