Ir para conteúdo
Fórum Script Brasil
  • 0

Verificar datas


diego ferreira ribeiro

Pergunta

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.

 

 

 

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 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.

Editado por diego ferreira ribeiro
Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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

 

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...