Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
diego ferreira ribeiro

Verificar datas

Question

Boa tarde,

estou desenvolvendo um sistema de locação e reserva,

como faço para verificar se uma data já foi reservada, tem um campo titulo e data prevista, como fazer ao gravar verificar primeiro se o livro escolhido já esta reservado para outro nessa data escolhida. exemplo

cod= 1

usuário = marcos

titulo=bingo

data prevista = 25/12/2019

cod=2

usuário=Diogo

titulo=bingo

data prevista = 25/12/2019

o código 2 já não pode reservar nessa data porque já esta reservado para o código 1.

 

 

 

Share this post


Link to post
Share on other sites

7 answers to this question

Recommended Posts

  • 0

Basta testar a data prevista na tabela

só preciso saber qual o banco de dados voce esta usando e a versão do seu delphi

abraço

Share this post


Link to post
Share on other sites
  • 0
13 minutos atrás, Jhonas disse:

Basta testar a data prevista na tabela

só preciso saber qual o banco de dados voce esta usando e a versão do seu delphi

abraço

eu fiz assim:

if dm.CDS_LIVROS.Locate('ID_LIVRO',dm.CDS_RESERVA.FieldByName('TOMBO_LIVRO').AsInteger,[]) then // livro escolhido
         begin
             if dm.CDS_RESERVA.FieldByName('DT_RESERVA').AsDateTime =Strtodate(dbedit5.Text)  then // verifica se as datas são iguais
             begin
                  messagedlg('Livro reservado nesta data, escolha outra data!',mtInformation,[mbok],0);
                  DBLookupComboBox2.SetFocus;
             end
             else
             begin
              falso();
              tratabotoes();
              dm.CDS_RESERVA.Post;
              dm.CDS_LIVROS.Edit;
              dm.CDS_LIVROS.FieldByName('STATUS_LIVRO').AsString:=('RESERVADO');
              DM.CDS_LIVROS.Refresh;
              messagedlg('Registro inserido com sucesso!',mtInformation,[mbok],0);
              if messagedlg('Deseja imprimir o recibo?',MtConfirmation,[mbYes,mbNo],0)=mrYes then
                begin

                      dm.recibo_reserva.ShowReport;
                end
              else
              abort;
             end;
         end;

mais não deu certo ele sempre aparece registro inserido com sucesso. eu uso banco firebird e o delphi e o xe8 se a pessoa quiser reservar um livro diferente nessa mesma data pode, so não pode reservar o mesmo livro na mesma data.

Edited by diego ferreira ribeiro

Share this post


Link to post
Share on other sites
  • 0

dm.CDS_RESERVA.FieldByName('DT_RESERVA').AsDateTime =Strtodate(dbedit5.Text)  then // verifica se as datas são iguais

lembre-se que  AsDateTime  testa a data e a hora .... se estiverem diferentes no segundo já não são iguais.

então prefira usar somente AsDate ( ou seja use somente o campo data )

defina o campo da tabela como Date somente

abraço

Share this post


Link to post
Share on other sites
  • 0

voce não informou qual é o banco de dados que está usando.

Se for o MYSQL o campo Data deve ser Date e não DateTime

dm.CDS_RESERVA.FieldByName('DT_RESERVA').AsDateTime =Strtodate(dbedit5.Text)

Me expressei mal....

o comando acima está correto, voce só não pode definir o campo da tabela como DateTime e sim Date ... entendeu ?

OBS: quando vode alterar o campo de sua tabela, voce deve apagar o campo do object inspector e coloca-lo novamente no componente ClientDataSet ou na Query ou no Table

abraço

 

Share this post


Link to post
Share on other sites
  • 0
   if dm.CDS_LIVROS.Locate('ID_LIVRO',dm.CDS_RESERVA.FieldByName('TOMBO_LIVRO').AsInteger,[]) then // livro escolhido
      begin
         if dm.CDS_RESERVA.FieldByName('DT_RESERVA').AsDateTime =Strtodate(dbedit5.Text)  then // verifica se as datas são iguais
            begin
               messagedlg('Livro reservado nesta data, escolha outra data!',mtInformation,[mbok],0);
               DBLookupComboBox2.SetFocus;
            end
         else
            begin
               falso();
               tratabotoes();
               dm.CDS_RESERVA.Post;
               dm.CDS_LIVROS.Edit;
               dm.CDS_LIVROS.FieldByName('STATUS_LIVRO').AsString:=('RESERVADO');
               DM.CDS_LIVROS.Refresh;
               messagedlg('Registro inserido com sucesso!',mtInformation,[mbok],0);
               if messagedlg('Deseja imprimir o recibo?',MtConfirmation,[mbYes,mbNo],0)=mrYes then
                  begin
                     dm.recibo_reserva.ShowReport;
                  end
               else
                  abort;
            end;
      end;

Obs: Se não existirem cópias do mesmo livro está correto.

Mas se tiver mais cópias do mesmo livro, então voce não pode usar dessa maneira, pois o comando Locate sempre vai encontrar a primeira ocorrencia ( nome do livro )  nos registros da tabela.

Porem vale lembrar que o comando Locate ( em caso de tabelas muitos grandes )  não é aconselhavel usar, pois voce terá perda de performance ( tempo )  na localização do registro na tabela.

Nesse caso, prefira usar o comando Select  dentro de um componente  Query.

abraço

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Cloud Computing


  • Forum Statistics

    • Total Topics
      148507
    • Total Posts
      644177
×
×
  • Create New...