Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-10-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
if anidado o consulta con varias selecciones

Hola, tengo que realizar la carga de un registro de una veterinaria, la cual debe discriminar si el veterinario ya tiene una reserva en el mismo día y horario, le avise que ese turno esta ocupado que elija otro horario.
La carga del dia se realiza a través de un DateTimePicker y la hora a través de dos combobox uno para la hora y otro para los minutos los cuales se asignan a una veriable 'Hora' del tipo datatime.
Les muestro una imagen de la pantalla de carga y la codificación, pense que se podria utilizar un if anidado o algo asi :
No le presten atención a las flechas


codificación boton nuevo
Código Delphi [-]
 // nuevo turno
procedure TForm20.BitBtn6Click(Sender: TObject);
begin
DBEdit4.SetFocus;
Table1.Open;
  Table1.Last;
    c:=Table1.FieldByName('Cod_turnovet').Asinteger;
    c:=c+1;
    Table1.insert;
    table1.edit;
    BitBtn6.Enabled:=False;
    BitBtn3.Enabled:=false;
    BitBtn2.Enabled:=true;
    BitBtn4.Enabled:=true;
    DBEdit2.Visible:=false;
    DateTimePicker1.Visible:=true;
end;

botón guarda nuevo
Código Delphi [-]
  // guarda turno
procedure TForm20.BitBtn4Click(Sender: TObject);
begin
cv:= ('Cod_vete').integer;
f:=('Fecha').datetime;
//comparo si el veterinario seleccionado es el mismo y si la fecha es la misma a alguna seleccionada
 if table1.FieldByName('Cod_vete').AsInteger = cv and table1.FieldByName('Fecha')= f;
  // Si hay horas y minutos seleccionados...
  if (ComboBox3.ItemIndex <> -1) and (ComboBox2.ItemIndex <> -1)  then
  begin
    table1.FieldByName('Cod_turnovet').AsInteger:=c;
    table1.FieldByName('Cod_propi').AsInteger:=Table3.FieldByName('Cod_prop').AsInteger;
    Table1.FieldByName('Hora').AsDateTime := EncodeTime(
      StrToInt(ComboBox3.Items[ComboBox3.ItemIndex]),     // Horas
      StrToInt(ComboBox2.Items[ComboBox2.ItemIndex]), //Minutos
      0, 0); // Segundos, ms
      hr:=('Hora').datetime;
      end;
          if not Table1.FieldByName('Hora').AsDateTime = hr then
          begin
     table1.Post;
        BitBtn5.Enabled:=True;
        BitBtn6.Enabled:=True;
        BitBtn4.Enabled:=false;
        BitBtn3.Enabled:=True;
        DateTimePicker1.Visible:=false;
        DBEdit2.Visible:=true;
        end
        else
          ShowMessage('Debe ingresar horas y minutos');
end;
Pero no funciona,que datos mas necesitan para pode ayudarme, gracias.
Responder Con Cita
  #2  
Antiguo 07-10-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Código Delphi [-]
procedure TForm20.BitBtn6Click(Sender: TObject);
begin
DBEdit4.SetFocus;
Table1.Open;
    c:=Table1.FieldByName('Cod_turnovet').Asinteger;
    c:=c+1;
    Table1.Append;
    BitBtn6.Enabled:=False;
    BitBtn3.Enabled:=false;
    BitBtn2.Enabled:=true;
    BitBtn4.Enabled:=true;
    DBEdit2.Visible:=false;
    DateTimePicker1.Visible:=true;
end;

Código Delphi [-]
procedure TForm20.BitBtn4Click(Sender: TObject);
begin
cv:= ('Cod_vete').integer;
f:=('Fecha').datetime;

//comparo si el veterinario seleccionado es el mismo y si la fecha es la misma a alguna seleccionada
 if (table1.FieldByName('Cod_vete').AsInteger = cv) and (table1.FieldByName('Fecha')= f) then
    begin
          // Si hay horas y minutos seleccionados...
          if (ComboBox3.ItemIndex <> -1) and (ComboBox2.ItemIndex <> -1)  then
          begin
          table1.FieldByName('Cod_turnovet').AsInteger:=c;
          table1.FieldByName('Cod_propi').AsInteger:=Table3.FieldByName('Cod_prop').AsInteger;
          Table1.FieldByName('Hora').AsDateTime := EncodeTime(
          StrToInt(ComboBox3.Items[ComboBox3.ItemIndex]),     // Horas
          StrToInt(ComboBox2.Items[ComboBox2.ItemIndex]), //Minutos
          0, 0); // Segundos, ms
          hr:=('Hora').datetime;
         end;
          if not Table1.FieldByName('Hora').AsDateTime = hr then
            begin
            table1.Post;
            BitBtn5.Enabled:=True;
            BitBtn6.Enabled:=True;
            BitBtn4.Enabled:=false;
           BitBtn3.Enabled:=True;
           DateTimePicker1.Visible:=false;
           DBEdit2.Visible:=true;
          end
        else
          ShowMessage('Debe ingresar horas y minutos');
end;
end;
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 07-10-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Gracias caral, tira un error [Error] Unit20.pas(215): Record, object or class type required en la asignacion
hr:=('Hora').datetime;
hr esta declarada como variable global Tdatetime, es increible siempre tiene que surgir una complicacion, no puede simplemente correr.
Responder Con Cita
  #4  
Antiguo 07-10-2013
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
hr es una variable que pusiste ahí, si no es global entonces donde esta la declaración ?, para que la pusiste?
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 07-10-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Aca la declare
Código Delphi [-]
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form20: TForm20;
  c,h1,m1,s,cv:integer;
  h,m:string;
  hr:Tdatetime;
  f:Tdate;

implementation
La puse para asignar la hora y minutos elegidos por el usuario y que luego la compare con la base de datos para saber si el mismo veterinario ya había utilizado ese turno u horario.
las tablas relacionadas son las siguiente ecfisa
Turnos veterinaria
Cod_turnovet//calve principal integer
Cod_vete//relacionado con veterinario integer
Cod_propi//relacionado con el propietario integer
Cod_masc//relacionado con la mascota integer
Fecha//del turno Datetime
Hora//del turno Datetime

Mascota
Cod_mascota//clave principal integer
Cod_prop//relacionado con el propietario integer
Cod_tamaño//relacionado con tipos de tamaños integer
NombreM//nombre de la mascota
Fecha_nac //datetime
Raza //string
Color etc. //string

Propietario
Cod_prop//clave principal integer
Cod_loc//relacionado con localidades integer
ApellidoP//string
NombreP//string
Direccion etc.//string

Veterinario
Cod_vet//clave principal integer
Cod_loc//relacionado localidades integer
ApellidoV//string
NombreV//string
Direccion etc.//string

Voy a probar tu solucion tambien, a ver si la puedo aplicar
Muchas gracias a ambos.
Responder Con Cita
  #6  
Antiguo 14-11-2013
DOS DOS is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 173
Poder: 13
DOS Va por buen camino
Hola, la verdad es que todavia estoy tratando de encontrarle la vuelta a esto y no logro solucionarlo, se muy bien que ustedes nunca tiran una respuesta concisa, sino van guiando el camino(y esta muy bien), hasta que les toca alguien bruto como yo que despues del segundo intento ustedes se aburren y no le prestan mas atencion.
he estado trando de darle una vuelta de tuerca al trabajo despues de tanto tiempo y se que estoy a un pasito pero no encuentro tierra firme y como siempre o falta el codigo de algo o no esta la relacion de las tablas, bueno en el post anterior esta la relacion de las tablas y en el archivo que subo, esta todo absolutamente todo, tal vez de esa manera le sea mas facil a cualquiera que lo vea( se ponen las tres carpetas en C:\)
Les recuerdo que el tema es el mismo, crear un turno en la veterinaria, verificando que el VETERINARIO seleccionado, no tenga reservado el mismo dia y horario otro turno.
Muchas gracias a cualquiera que me pueda ayudar.
https://www.dropbox.com/s/yukzpzdh43d3x4y/ITM3.rar
Responder Con Cita
  #7  
Antiguo 07-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola DOS.

No conozco la conformación de las tablas, nombres, tipos y relación entre los campos como para conocer todas las soluciones posibles.

Pero si deseas saber si un turno no está asignado a un veterinario en determinada fecha y hora de este modo tiene que funcionar:
Código Delphi [-]
function  TForm20.TurnoLibre(const cVet: Integer; const Fecha: TDate; Hora: TTime): Boolean;
begin
  with Query do  
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT COD_TURNO_VET FROM TABLA_TURNOS');
    SQL.Add('WHERE COD_VETE = :PVET AND FECHA = :PFECHA AND HORA = :PHORA');
    ParamByName('PVET').AsInteger := cVet;
    ParamByName('PFECHA').AsDate  := Fecha;
    ParamByName('PHORA').AsTime   := Hora;
    Open;
    Result := Query1.IsEmpty;
    Close;
  end;
end;

Ejemplo de uso:
Código Delphi [-]
procedure TForm20.BitBtn4Click(Sender: TObject);
begin
  if TurnoLibre(CodigoVeterinario_Leido, Fecha_Leida, Hora_Leida) then 
  begin
    //El turno esta libre, guardar los datos, etc, etc...
    ...
  end  
  else
    ShowMessage('El turno está ocupado')

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 07-10-2013 a las 00:34:13.
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
consulta SQL varias tablas pmtzg SQL 0 02-02-2012 06:05:03
Consulta con varias tablas marilinspi SQL 4 30-10-2007 22:40:48
almacenar multiples selecciones en sql vivys27 SQL 4 02-10-2007 16:26:24
consulta de varias tablas elprimo Tablas planas 3 03-01-2007 10:23:15
¿Selecciones iguales? ixMike Varios 5 17-07-2006 19:12:52


La franja horaria es GMT +2. Ahora son las 11:48:37.


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