Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   buscando en registros particulares (https://www.clubdelphi.com/foros/showthread.php?t=67325)

sisne 12-04-2010 08:19:39

buscando en registros particulares
 
Hola foreros, necesito su ayuda...
En esta ocasion pues tengo un planteamiento similar a los anteriores.
El caso es, como puedo buscar teniendo varios alumnos y sus materias respectivas q tienen que prograrmarse, donde una materia (con su codigoMateria y Nombre Materia) puede repetirse al momento de programarrse en toda la Base de datos.
Lo que debo hacer es, si un alumno se programa MAT-100 pues quiero que este dato busque en todo el registro que pertencen al alumno PERO solo del alumno y no asi de la Base de datos. de la misma tabla.
El codigo que me sugerieron es este, que me lo busca en toda la Base de datos.
Código Delphi [-]
procedure TFmateria.CodigoMExit(Sender: TObject);
begin
    with Query1 do
      begin
        Close;
        SQL.Text:= 'SELECT * FROM BDmateria WHERE CodigoM = '+QuotedStr(CodigoM.Text);
        Open;
        if not IsEmpty then
          begin
            MessageDlg('Datos EXISTENTE',mtError,[mbOk],0);
            CodigoM.SetFocus;
          end;
      end;
end;
Estaba intentando con la sentencia Inner, para que solo me lo busque en el registro de un solo alumno.
Código Delphi [-]
        SQL.Text:= 'SELECT m.* FROM BDmateria m INNER RIGHT BDinscripcion i ON m.IdE=i.IdE and CodigoM = '+QuotedStr(CodigoM.Text);
También intente con la sentencia if
Código Delphi [-]
if (Query1.Locate('CodigoM',CodigoM.Text, [loPartialKey]))and (DM.TmateriaIdE.text=DM.TinscripcionIdE.text) then
  ShowMessage('Codigo repetido, o existente en su registro')
else
   NombreM.SetFocus;
Como ven intente realizar de estas formas, con la primera me lo busca en toda la Base de tados y las otras pues no me funcionan, se me repiten igual la informacion.

Donde: CodigoM= Es la sigla de la materia
NombreM=Es el nombre de la materia
IdE= es un contador, que en BDinscripcion es unico y en BD materia se repite cuantas materias se programa.

POr favor alguien...donde esta mi error....

Gracias

cloayza 12-04-2010 15:24:07

Lo que sugiero es que hagas una consulta de las materias inscritas por alumno, asi podras validar que una materia no se repita para un alumno.
Código Delphi [-]
procedure TFmateria.CodigoMExit(Sender: TObject);
begin
    with Query1 do
      begin
        Close;
        SQL.Text:= 'SELECT * FROM BDmateria WHERE CodigoM =:CodigoM AND IDAlumno=:IdAlumno ';
        ParamByName('IdAlumno').AsString:=IdAlumno.Text;
        ParamByName('CodigoM').AsString:=CodigoM.Text;

        Open;
        if not IsEmpty then
          begin
            MessageDlg('Datos EXISTENTE',mtError,[mbOk],0);
            CodigoM.SetFocus;
          end;
      end;
end;

Saludos cordiales

sisne 12-04-2010 16:48:42

Hola cloayza:
Agradecerte por tu interés, comentarte que me funcionó, solo ahora tengo que acomodarlo cuando un XXXalumno se reprograma,ahi si puede repetirse el mismo nombre y codigo.
Si no es mucha molestia, queria consultarte:
Cita:

SQL.Text:= 'SELECT * FROM BDmateria WHERE CodigoM =:CodigoM AND IDAlumno=:IdAlumno ';
ParamByName('IdAlumno').AsString:=IdAlumno.Text;
ParamByName('CodigoM').AsString:=CodigoM.Text;
Exactamnte :
Cita:

=: ///quisiera saber su funcionamiento...
ParamByName // Quisiera saber su funcionamiento
Muuuuchas gracias!


La franja horaria es GMT +2. Ahora son las 12:14:31.

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