Ver Mensaje Individual
  #12  
Antiguo 01-12-2004
Avatar de sercornejov
sercornejov sercornejov is offline
Miembro
 
Registrado: may 2003
Ubicación: Neiva - Colombia
Posts: 88
Reputación: 22
sercornejov Va por buen camino
Los componentes que uso:

para conectar: TADOConnection
Tablas: TADOTable
Queries: TADOQuery

cuando se entra una cedula en un TEdit (normal), al salir (con TAB para pasar al Tedit del nombre del personaje) está este evento:

Código:
procedure TfrmEntrada.edtIDExit(Sender: TObject);
var
  ID:string;
  iti:integer;
  total:double;
  semana,hoy:TDateTime;

begin
  // para saber si el query que trae la historia del personaje está activado

  if not dmppal1.adoqryHisVisTot.Active then
		dmppal1.adoqryHisVisTot.Active:=true;
  // toma la cedula del personaje
  ID:=edtID.Text;
  // inicializa la tabla de visitantes al primer record
  dmppal1.adotblVisitas.First;
  // los visitantes actuales se guardan en una tabla que se llama ADENTRO
  // si la nueva cedula está adentro, no permite una segunda entrada
  // esto es porque la gente se le olvida entregar el sticker a la salida
  nohasalido:=dmppal1.adotblAdentro.Locate('VIS_CC',id,[loCaseInsensitive]);
  if nohasalido then
    begin
      showmessage('El visitante con CC '+dmppal1.adotblAdentroVIS_CC.Value+
      	' no ha salido aún de la Gobernación.  Entro el '+
        dmppal1.adotblAdentroVTA_IN.AsString);
      // oculta los label que muestran el historial del personaje
      lblTotTiempo1.Visible:=false;
      lblTotTiempo2.Visible:=false;
      lblTotSemana1.Visible:=false;
      lblTotSemana2.Visible:=false;
      lblTotHoy1.Visible:=false;
      lblTotHoy2.Visible:=false;
      // deja en blanco el edit de cedula para una nueva entrada
      edtID.Text:='';
      edtVisNombre.Text:='';
      imgVisFoto.Picture.Bitmap:=nil;// el Timage de la foto lo deja nulo
      dbgVisitasEnt.Visible:=False;
      bbtnRegistrar.Enabled:=False;// inhabilita el registro
      sbtnCambiarFotoVis.Visible:=False;
      sbtnCancelVisFoto.Visible:=False;
      dbmmoVisNota.Visible:=false;
      sbtnOKFoto.Visible:=False;
    end;
  // si existe coloca el cursor en el registro del personaje
  existe:=dmppal1.adotblVisitante.Locate('VIS_CC',id,[loCaseInsensitive]);
  if existe then
  	begin
    	if dmppal1.adotblVisitanteVIS_ESTADO.Value=0 then // si esta prohibida la entrada del personaje:
      	begin
          edtID.Font.Color:=clwhite;
          edtID.Font.Style:=[fsBold];
          edtID.Color:=clRed;
          edtVisNombre.Font.Color:=clwhite;
          edtVisNombre.Font.Style:=[fsBold];
          edtVisNombre.Color:=clRed;
          dbmmoVisNota.Visible:=true;
          dbmmoVisNota.Font.Color:=clwhite;
          dbmmoVisNota.Font.Style:=[fsBold];
          dbmmoVisNota.Color:=clRed;
          bbtnRegistrar.Enabled:=false;
        end
        else // si sí puede entrar:
        	begin
            edtID.Font.Color:=clWindowText;
            edtID.Font.Style:=[];
            edtID.Color:=clWindow;
            edtVisNombre.Font.Color:=clWindowText;
            edtVisNombre.Font.Style:=[];
            edtVisNombre.Color:=clWindow;
            dbmmoVisNota.Visible:=true;
            dbmmoVisNota.Font.Color:=clWindowText;
            dbmmoVisNota.Font.Style:=[];
            dbmmoVisNota.Color:=clWindow;
            bbtnRegistrar.Enabled:=true;
          end;
      edtVisNombre.Text:=dmppal1.adotblVisitanteVIS_NOMBRE.Value;
      if FileExists(rutafotos+id+'.jpg') then  // si el archivo existe en el directorio de fotos:
      	begin
      		imgVisFoto.Picture.LoadFromFile(rutafotos+id+'.jpg');
          fotosel:=true;
        end
        else  // si no, coloca un archivo de nofoto.jpg
        	begin 
          	imgVisFoto.Picture.LoadFromFile(rutafotos+'nofoto.jpg');
            fotosel:=false;
          end;
      // se habilitan los controles para cambiar la foto y otros...
      sbtnCambiarFotoVis.Visible:=true;
      sbtnCancelVisFoto.Visible:=true;
      dmppal1.adoqryHisVisTot.Active:=false; // para saber la historia del peronaje
      dmppal1.adoqryHisVisTot.Parameters.Items[0].value:=ID;
      dmppal1.adoqryHisVisTot.Active:=true;
      lblTotTiempo1.Visible:=true;
      lblTotTiempo2.Visible:=true;
      lblTotSemana1.Visible:=true;
      lblTotSemana2.Visible:=true;
      lblTotHoy1.Visible:=true;
      lblTotHoy2.Visible:=true;
      total:=0;
      for iti:=1 to dmppal1.adoqryHisVisTot.RecordCount do
      	begin
        	total:=total+SecondsBetween(dmppal1.adoqryHisVisTotVTA_OUT.Value,dmppal1.adoqryHisVisTotVTA_IN.Value);
          dmppal1.adoqryHisVisTot.Next;
        end;
			lblTotTiempo2.Caption:=FloatToStrF(total/3600,ffGeneral,2,2)+ 'horas';
      semana:=incday(now,-7);
      dmppal1.adoqryHisVisSem.Active:=false;
      dmppal1.adoqryHisVisSem.Parameters.Items[0].Value:=ID;
      dmppal1.adoqryHisVisSem.Parameters.Items[1].Value:=semana;
      dmppal1.adoqryHisVisSem.Active:=true;
      total:=0;
      for iti:=1 to dmppal1.adoqryHisVisSem.RecordCount do
        begin
      		total:=total+SecondsBetween(dmppal1.adoqryHisVisSemVTA_OUT.Value,dmppal1.adoqryHisVisSemVTA_IN.Value);
          dmppal1.adoqryHisVisSem.Next;
      	end;
			lblTotSemana2.Caption:=FloatToStrF(total/3600,ffGeneral,2,2)+ 'horas';
      hoy:=today;
      dmppal1.adoqryHisVisHoy.Active:=false;
      dmppal1.adoqryHisVisHoy.Parameters.Items[0].Value:=ID;
      dmppal1.adoqryHisVisHoy.Parameters.Items[1].Value:=hoy;
      dmppal1.adoqryHisVisHoy.Active:=true;
      total:=0;
      for iti:=1 to dmppal1.adoqryHisVisHoy.RecordCount do
        begin
      		total:=total+SecondsBetween(dmppal1.adoqryHisVisHoyVTA_OUT.Value,dmppal1.adoqryHisVisHoyVTA_IN.Value);
          dmppal1.adoqryHisVisHoy.Next;
      	end;
			lblTotHoy2.Caption:=FloatToStrF(total/3600,ffGeneral,2,2)+ 'horas';
      dbgVisitasEnt.Visible:=true;
		  bbtnRegistrar.Enabled:=true;
    end
    else
    	begin
        edtVisNombre.SetFocus;
        sbtnOKFoto.Visible:=true;
        sbtnCancelVisFoto.Visible:=true;
        bbtnRegistrar.Enabled:=true;
      end;
end;
en el boton de REGISTRAR, que es el que llena las tablas:

Código:
procedure TfrmEntrada.bbtnRegistrarClick(Sender: TObject);
var
	hoy:TDateTime;

begin
	if edtID.Text='' then
    begin
      showmessage('No ha Introducido la cédula');
      exit;
    end;
  if not fotosel then
    begin
      showmessage('No ha tomado la foto');
      exit;
    end;
  if not areasel then
    begin
      showmessage('No ha seleccionado un AREA para el visitante');
      exit;
    end;
	if not empleadosel then
    begin
      showmessage('No ha seleccionado un EMPLEADO para el visitante');
      exit;
    end;
  if not existe then // esta variable es global. si existe es FALSE inserta un registro en visitantes
		begin
      with dmppal1 do
        begin
          hoy:=now;
          // rutina de visitante
          adotblVisitante.Insert;
          adotblVisitanteVIS_CC.Value:=edtID.Text;
          adotblVisitanteVIS_NOMBRE.Value:=edtVisNombre.Text;
          adotblVisitanteVIS_FOTO.Value:=rutafotos+edtID.Text+'.jpg';
          adotblVisitanteVIS_ULTVIS.Value:=hoy;
          adotblVisitanteVIS_ESTADO.Value:=1;
          adotblVisitanteUSU_USUARIO.Value:=adotblUsuarioUSU_USUARIO.Value;
          adotblVisitante.Post;
        end;
    end
    else // si existe es TRUE, solo actualiza la fecha de la última visita
      with dmppal1 do
        begin
          hoy:=now;
          // rutina de visitante
          adotblVisitante.edit;
          adotblVisitanteVIS_ULTVIS.Value:=hoy;
          adotblVisitanteUSU_USUARIO.Value:=adotblUsuarioUSU_USUARIO.Value;
          adotblVisitante.Post;
        end;
  with dmppal1 do // aqui se llena la tabla de VISITAS
  	begin
      // rutina de visita
      adotblVisitas.Insert;
      adotblVisitasVTA_IN.Value:=hoy;
      adotblVisitasVTA_OUT.Value:=hoy;
      adotblVisitasARE_ID.Value:=adoqryAreasEmplARE_ID.Value;
      adotblVisitasEMP_ID.Value:=adoqryAreasEmplEMP_ID.Value;
      adotblVisitasVIS_ID.Value:=adotblVisitanteVIS_ID.Value;
      adotblVisitasUSU_USUARIO.Value:=adotblUsuarioUSU_USUARIO.Value;
      adotblVisitas.Post;
      dmppal1.adotblAdentro.insert; // aqui se llena la tabla de ADENTRO
      dmppal1.adotblAdentroVTA_ID.Value:=dmppal1.adotblVisitasVTA_ID.Value;
      dmppal1.adotblAdentroVTA_IN.Value:=dmppal1.adotblVisitasVTA_IN.Value;
      dmppal1.adotblAdentroVTA_OUT.Value:=dmppal1.adotblVisitasVTA_OUT.Value;
      dmppal1.adotblAdentroVIS_CC.Value:=dmppal1.adotblVisitaslk_VisCC.Value;
      dmppal1.adotblAdentroVIS_NOMBRE.Value:=dmppal1.adotblVisitaslk_Visitante.Value;
      dmppal1.adotblAdentroARE_NOMBRE.Value:=dmppal1.adotblVisitaslk_Area.Value;
      dmppal1.adotblAdentroEMP_NOMBRE.Value:=dmppal1.adotblVisitaslk_Empleado.Value;
      dmppal1.adotblAdentroUSU_USUARIO.Value:=dmppal1.adotblVisitasUSU_USUARIO.Value;
      dmppal1.adotblAdentro.Post;
    end;
    // imprime
    rfrmStikerPeq:=TrfrmStikerPeq.create(self);
    rfrmStikerPeq.qrlblEntrada.Caption:=DateTimetoStr(dmppal1.adotblVisitasVTA_IN.Value);
    rfrmStikerPeq.qrlblVisitante.Caption:=dmppal1.adotblVisitaslk_Visitante.Value;
    rfrmStikerPeq.qrlblAreaVis.Caption:=dmppal1.adotblVisitaslk_Area.Value;
    rfrmStikerPeq.qreanVisCC.BarCode:=dmppal1.adotblVisitaslk_VisCC.Value;
    rfrmStikerPeq.qrStickerPeq.Print;
    rfrmStikerPeq.Close;
    rfrmStikerPeq.Free;
    // Limpiar el formulario
    lblTotTiempo1.Visible:=false;
    lblTotTiempo2.Visible:=false;
    lblTotSemana1.Visible:=false;
    lblTotSemana2.Visible:=false;
    lblTotHoy1.Visible:=false;
    lblTotHoy2.Visible:=false;
    edtID.Text:='';
    edtVisNombre.Text:='';
    imgVisFoto.Picture.Bitmap:=nil;
    dbgVisitasEnt.Visible:=False;
    bbtnRegistrar.Enabled:=False;
    sbtnCambiarFotoVis.Visible:=False;
    sbtnCancelVisFoto.Visible:=False;
    sbtnOKFoto.Visible:=False;
    dbgrdAreEntrada.SelectedRows.Clear;
    dbgrdEmplEntrada.SelectedRows.Clear;
    edtID.Font.Color:=clWindowText;
    edtID.Font.Style:=[];
    edtID.Color:=clWindow;
    edtVisNombre.Font.Color:=clWindowText;
    edtVisNombre.Font.Style:=[];
    edtVisNombre.Color:=clWindow;
    dbmmoVisNota.Font.Color:=clWindowText;
    dbmmoVisNota.Font.Style:=[];
    dbmmoVisNota.Color:=clWindow;
    dbmmoVisNota.Visible:=false;
    areasel:=false;
    empleadosel:=false;
    dmppal1.adotblAdentro.First;
    edtID.SetFocus;
end;
bueno. Pues se que se abusa de los queries para la historia del personaje...
Cuando los tengo en red, la búsqueda del archivo de fotos si es realmente lenta...

Es muy descabellado incluir la foto dentro de la base de datos???

Saludos desde Colombia...

Sergio
__________________
En Colombia hay muchos, pero muchos colombianos muy buenos. Los violentos son pocos y los vamos a controlar...
Responder Con Cita