Pesquisa entre datas

Delphi

26/01/2004

Pessoal, preciso de verificar ao sair de um DBEdit se a data que foi digitada esta entre duas datas já gravadas no banco de dados.
Explicando melhor:
Tenho uma tabela de reserva de aptos com a data da chegada e a data da saida, então não posso ter este mesmo apto reservado para este mesmo período(uso paradox).
Se alguém puder me ajudar agradeço muito.
Marcelo.


Marcrv2

Marcrv2

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

26/01/2004

Colega,

Voce pode utilizar BETWEEN na cláusula WHERE numa consulta SQL, pois o BDE suporta notação ANSI SQL92 para o Paradox.


GOSTEI 0
Marcrv2

Marcrv2

26/01/2004

Caro Aroldo, é o seguinte não consegui com between porque não vou passar um campo de tabela para pesquisar entre duas datas que passarei como parametro, e sim pesquisar de uma data entre dois campos de tabela já com as datas registradas.
Ao invés de eu ter where CampoDaTabela between DataI and DataF eu teria que ter where DataAPesquisar between CampoDaTabelaInicio and CampoDaTabelaFim e isso não deu certo.
Se tiver como fazer me de um exemplo.
Muito obrigado
Marcelo


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

26/01/2004

Colega,

Coloca a estrutura da tabela aqui pra facilitar (DDL).


GOSTEI 0
Marcrv2

Marcrv2

26/01/2004

Tenho os seguintes campos:
Nome : A
Apto : S
DataChegada : Date
DataSaida : Date
Por exemplo, quando eu reservar o apto 105 no período de 25/01/2004 a 30/01/2004 o mesmo não pode ser reservado neste mesmo período, por exemplo quando o usuário digitar qualquer data entre 25 e 30 ele dará o aviso que o mesmo já se encontra reservado.
Deu para entender.
Marcelo.


GOSTEI 0
Brenoinfo

Brenoinfo

26/01/2004

caro colega...
pq vc na coloca um campo na tabela chamado reservado true ou false
nao seria mais facil


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

26/01/2004

caro colega... pq vc na coloca um campo na tabela chamado reservado true ou false nao seria mais facil


A que período refere-se a reserva?


GOSTEI 0
Marcrv2

Marcrv2

26/01/2004

Eu não posso colocar um campo boleano pois o apto ode ser reservado para o periodo 25 a 30 mas pode para um periodo posterior como por exemplo 01 a 10 do mes subsequente, e o caso se refere a uma tabela onde faço reservas de aptos do hotel para onde desenvolvi o sistema.
Agradeço a ajuda até o momento.
Marcelo.


GOSTEI 0
Marcrv2

Marcrv2

26/01/2004

Pessoal apenas corrigindo o texto anterior:
Eu não posso colocar um campo boleano pois o apto não pode ser reservado para o periodo de 25 a 30 se já estiver reserva neste periodo mas pode para um periodo posterior como por exemplo de 01 a 10 do mes subsequente, e o caso se refere a uma tabela onde faço reservas de aptos do hotel para onde desenvolvi o sistema.
Agradeço a ajuda até o momento.
Marcelo.


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

26/01/2004

Colega,


Veja o exemplo. Não sei está 100¬, pois é apenas um protótipo de alguns minutos:

SQL:
SELECT * FROM reservas
WHERE (res_inicio <= :inicio and res_fim >= :fim) and res_apto = :apto


Delphi:
procedure TForm1.btnReservarClick(Sender: TObject);
begin
Query1.Close;
Query1.ParamByName(´inicio´).AsDate := DateTimePicker1.Date;
  Query1.ParamByName(´fim´).AsDate := DateTimePicker2.Date;
  Query1.ParamByName(´apto´).AsInteger := StrToInt(Edit1.Text);
  Query1.Open;
  if Query1.RecordCount=0 then
  begin
  Table1.Append;
    Table1RES_NUMERO.Value:= 1;
    Table1RES_APTO.Value:= StrToInt(Edit1.Text);
    Table1RES_INICIO.Value:= DateTimePicker1.Date;
    Table1RES_FIM.Value:= DateTimePicker2.Date;
    Table1.Post;
  end;
end;

DFM:
  object DateTimePicker1: TDateTimePicker
    Left = 24
    Top = 44
    Width = 186
    Height = 21
    CalAlignment = dtaLeft
    Date = 38013.9103747685
    Time = 38013.9103747685
    DateFormat = dfShort
    DateMode = dmComboBox
    Kind = dtkDate
    ParseInput = False
    TabOrder = 0
  end
  object DateTimePicker2: TDateTimePicker
    Left = 26
    Top = 96
    Width = 186
    Height = 21
    CalAlignment = dtaLeft
    Date = 38013.9104217593
    Time = 38013.9104217593
    DateFormat = dfShort
    DateMode = dmComboBox
    Kind = dtkDate
    ParseInput = False
    TabOrder = 1
  end
  object Edit1: TEdit
    Left = 306
    Top = 52
    Width = 121
    Height = 21
    TabOrder = 2
    Text = ´Edit1´
  end
  object btnReservar: TButton
    Left = 40
    Top = 178
    Width = 75
    Height = 25
    Caption = ´Reservar´
    TabOrder = 3
    OnClick = btnReservarClick
  end
  object DBGrid1: TDBGrid
    Left = 302
    Top = 184
    Width = 320
    Height = 120
    DataSource = DataSource1
    TabOrder = 4
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = ´MS Sans Serif´
    TitleFont.Style = []
  end
  object DBNavigator1: TDBNavigator
    Left = 356
    Top = 126
    Width = 240
    Height = 25
    DataSource = DataSource1
    TabOrder = 5
  end
  object Table1: TTable
    Active = True
    DatabaseName = ´F:\locacao´
    TableName = ´RESERVAS.dbf´
    Left = 250
    Top = 32
    object Table1RES_NUMERO: TFloatField
      FieldName = ´RES_NUMERO´
    end
    object Table1RES_APTO: TFloatField
      FieldName = ´RES_APTO´
    end
    object Table1RES_INICIO: TDateField
      FieldName = ´RES_INICIO´
    end
    object Table1RES_FIM: TDateField
      FieldName = ´RES_FIM´
    end
  end
  object Query1: TQuery
    DatabaseName = ´F:\LOCACAO´
    SQL.Strings = (
      ´SELECT * FROM reservas´

        ´WHERE (res_inicio <= :inicio and res_fim >= :fim) and res_apto =´ +
        ´ :apto´)
    Left = 270
    Top = 94
    ParamData = <
      item
        DataType = ftDate
        Name = ´inicio´
        ParamType = ptInput
      end
      item
        DataType = ftDate
        Name = ´fim´
        ParamType = ptInput
      end
      item
        DataType = ftInteger
        Name = ´apto´
        ParamType = ptInput
      end>
  end
  object DataSource1: TDataSource
    DataSet = Table1
    Left = 514
    Top = 46
  end



GOSTEI 0
Marcrv2

Marcrv2

26/01/2004

Valeu Aroldo, tive tricando idéia ontem com um amigo e tb achamos uma solução basta apenas dar uma melhorada, mas vou testar o seu código.
Muito obrigado.
Marcelo


GOSTEI 0
POSTAR