Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Едем в номера...
 
 автор: час   (16.02.2010 в 11:56)   личное сообщение
 
 

Имеется задачка
В аренду в течении дня на несколько минут-часов сдаётся "Кровать"
В течении дня её вновь и вновь хотят занять
Потому телефоны - звонят и звонят и звонят
И заранье за день иль за десять звонят
Ну востребована среди клиентов - кровать!!!
Ну а кто принимает звонки, тот в желании знать
Время в какое - свободна кровать,
Что бы другим в эти сроки отдать
Место - где можно слегка подремать
======================================

  Ответить  
 
 автор: час   (16.02.2010 в 11:58)   личное сообщение
 
 

Я так прикинул - нужна таблица с тремя полями
Дата заказа, начало услуги, конец услуги.
на форму бросаем календарь и тыкаем по дням - для определения уже в конкретном дне - какие чесы у девочки - свободны...
На форму выливаются по порядку часы(интервал ~15 минут), и если какой то период занят он красится в Red
А если какой свободен он красится в Blue

  Ответить  
 
 автор: Explorer   (16.02.2010 в 12:01)   личное сообщение
9 Кб.
 
 

нужно разбить на минимальные периоды, если возможно - это все значительно упростит.=>

так, это было :))) просмотрел

а в чем тогда проблема?
это называется ResourceBooking

  Ответить  
 
 автор: час   (16.02.2010 в 12:06)   личное сообщение
 
 

Красиво - прям как я описал

А что это за тёмные хвостики на конце графической линии?
Тада период возьмём - 1 минута.
или имеешь ввиду - 1 час?

  Ответить  
 
 автор: Explorer   (16.02.2010 в 12:13)   личное сообщение
 
 

технологические перерывы - подмести-убраться в номере, например - чтобы невозможно было букать обслуживаемый ресурс стык-в-стык

  Ответить  
 
 автор: час   (16.02.2010 в 12:20)   личное сообщение
 
 


технологические перерывы


Блин - а это идея....
Ну там помыть припудрить чего....
Сменить резину-
на зимнюю

  Ответить  
 
 автор: час   (16.02.2010 в 12:04)   личное сообщение
 
 

теперь внимание - вопрос
На форме 4 поля для ввода данных о начальном часе и нач минутах, и о конечном часе и кон. минуте услуги.
Как устроит проверку - вхождения выбранного периода в уже зарезервированные в таблице места.....
сижу вота - думаю(не в туалете....)

  Ответить  
 
 автор: snipe   (16.02.2010 в 12:12)   личное сообщение
 
 

Час - а можно уточнить
коечка одна или много

  Ответить  
 
 автор: час   (16.02.2010 в 12:19)   личное сообщение
 
 

Коечка - пока одна...
Я не так богат, что бы сразу бордель откры вать........
=====================================================
Я про реализацию спрашиваю, а ты уже в клиенты напрашиваешся

  Ответить  
 
 автор: kot_k_k   (16.02.2010 в 12:26)   личное сообщение
 
 

это он у тещи спер диван-кровать и решил бабла заработать

а в чем проблем со сравнением?
есть период Занято с...по -> попадаем каким либо концом в него болт!!!
и обратная проверка, для исключения попадания занятого периода в Искомый.

  Ответить  
 
 автор: час   (16.02.2010 в 12:31)   личное сообщение
 
 

  Ответить  
 
 автор: час   (16.02.2010 в 12:34)   личное сообщение
 
 

Все понятно на словах
Ну сумятица в умах
На кровати чтоб поспать
Как проверку мне создать-
Вот причина написанья,
Суть не в том кому давать
Как всё это расчитать
Что бы лишнего не дать
Но вопрос стоит про код
Что на это скажешь, Коттт
Как проверку обеспечить
Чтоб вхжденье только встретишь
Срзу выдать на весь свет
В это время - койки -НЕТ!

  Ответить  
 
 автор: kot_k_k   (16.02.2010 в 12:36)   личное сообщение
 
 

можно проще - на стадии принятия заказа - запретить челу вводить время, которое уже занято - это проще, чем сравнивать интервалы!!!!

  Ответить  
 
 автор: час   (16.02.2010 в 12:37)   личное сообщение
 
 

Согласен - я ж никак не врублюся как организовать эту самую проверку
КАК то надо бежать по времени
For F = 00.00.01 to 23.59.59
if First_Time_Service = F then

Next F

  Ответить  
 
 автор: kot_k_k   (16.02.2010 в 12:44)   личное сообщение
 
 

вар 1 - на обновление поля Время нач. заказа/конец заказа - проверка на вхождение в забронированные интервалы по данному дню.
вар 2 - как правило заказы принимают 12-00, 12-30, ну максимум 12-00, 12-15, 12-30, 12-45.
сделать форму 0час, 1 час, ..... 23 часа. на каждый час выпадающий список с Время_нач в котором все возможные не занятые интервалы.

  Ответить  
 
 автор: час   (16.02.2010 в 12:46)   личное сообщение
 
 

kot_k_k
Я тебя прибъю

  Ответить  
 
 автор: kot_k_k   (16.02.2010 в 12:50)   личное сообщение
 
 

"select * from Zakaz where data_zak=" & me.Дата_Заказа & " and " & me.Нач_Заказа & "between time_nach and Time_end"

и проверка на EOF, возможно вместо between использовать конструкцию me.Нач_Заказа<= time_nach and me.Нач_Заказа <=Time_end

  Ответить  
 
 автор: час   (16.02.2010 в 12:52)   личное сообщение
 
 

Боюся так не выйдет
потому как вводимый интервал может быть внутри уже имеющегося а может быть и наоборот...
Как ты считаешь???

  Ответить  
 
 автор: час   (16.02.2010 в 12:58)   личное сообщение
 
 

Где то на форуме мы с Lukas за чашкой чая это уже обсасывали - вот тока разве найжёшь теперь.........

  Ответить  
 
 автор: kot_k_k   (16.02.2010 в 13:04)   личное сообщение
 
 

не ты проверяешь на входжение данного времени во все забитые интервалы!!!! ты ж рабатаешь с таблой через Recordset - запрос, и при вхождении у тебя появится запись - т.е. св-во EOF = False - гласит о запрете на ввод.

  Ответить  
 
 автор: час   (16.02.2010 в 13:04)   личное сообщение
 
 

Итак

таблица SERVICE_TBL
DATE_SERVICE -               дата услуги as date
FIRST_TIME_SERVICE - время начала as (кстати какой тип выбрать чтобы select не ошибся)
LAST_TIME_SERVICE - время окончания as (кстати какой тип выбрать чтобы select не ошибся)

  Ответить  
 
 автор: kot_k_k   (16.02.2010 в 13:07)   личное сообщение
 
 

Дата услуги должна быть 2!!!! если снимается койка на 1 сутки и более и если с нимать с 22:00 до 02:00!!!!

  Ответить  
 
 автор: час   (16.02.2010 в 13:08)   личное сообщение
 
 

Да???
Тогда
FIRST_TIME_SERVICE будет as Date,
и табм будет и дата и время

  Ответить  
 
 автор: kot_k_k   (16.02.2010 в 13:15)   личное сообщение
 
 

все извини я в банк, если ч то после 17отвечу

  Ответить  
 
 автор: Explorer   (16.02.2010 в 13:14)   личное сообщение
15 Кб.
 
 

во первых =>


SELECT 
EventDateTime, 
Description, 
EventDuration, 
Format([EventDateTime],"dd/mmm/yyyy") AS CheckInDate, 
Format([EventDateTime],"hh:nn") AS CheckInTime, 
Format(DateAdd("n",[EventDuration],[EventDateTime]),"dd/mmm/yyyy") AS CheckOutDate, 
Format(DateAdd("n",[EventDuration],[EventDateTime]),"hh:nn") AS CheckOutTime
FROM tblReservations


где EventDuration число в минутах (резервирование на сутки = 24*60=1440 минут) а EventDateTime полный формат даты и времени начала события dd-mm-yyyy hh:nn

реализация условия "как не попасть в диапазон" зависит в принципе от алгоритма работы с приложением - интерфейса ввода

  Ответить  
 
 автор: час   (16.02.2010 в 13:50)   личное сообщение
 
 

Спасибо!!!

  Ответить  
 
 автор: час   (17.02.2010 в 09:15)   личное сообщение
 
 

Прорисовалась функция добавления контролов (Label) на форму с указанием часов услуг и закраской занятых участков...


Function Create_TIME_Line(STR_LEFT As Long, STR_TOP As Long, STR_DATE As String)
' создание рисунков
Dim im As Label
Dim rst As ADODB.Recordset
Dim KL As String  ' название
Dim KL1 As Long    ' + название
Dim STR_HOUR As Long    ' часы
Dim STR_MINUTE As Long    ' минуты
Dim STR_TIME As String
' Удаление рисунков
Call DELETE_TIME_Line

Set rst = New ADODB.Recordset
rst.Open "SELECT SERVICE_TBL.DATE_SERVICE, SERVICE_TBL.FIRST_TIME_SERVICE, SERVICE_TBL.LAST_TIME_SERVICE" _
& " From SERVICE_TBL " _
& " WHERE (((SERVICE_TBL.DATE_SERVICE)= #" & STR_DATE & "#));", GLB_CONNECTION, adOpenKeyset, adLockOptimistic

KL1 = 1
For STR_MINUTE = 480 To 1440 Step 2
KL = "DNI" & KL1
Set im = Controls.Add("VB.Label", KL)
im.Top = STR_TOP
im.Left = STR_LEFT
im.Height = 250
im.Width = 500
im.Appearance = 0
im.BorderStyle = 1
im.FontSize = 9

im.Alignment = 2
im.Visible = True
STR_LEFT = STR_LEFT + im.Width - 15 'FRM_OKNO("T" & s)
    If STR_LEFT >= 14500 Then
       STR_LEFT = 600
      STR_TOP = STR_TOP + 250
    End If
        If Val(STR_MINUTE) >= 60 Then
               im.Caption = Format(Int(Val(STR_MINUTE) / 60), "00") & ":" & Format(Int(Val(STR_MINUTE) - 60 * Int(Val(STR_MINUTE) / 60)), "00")
             STR_TIME = im.Caption
             If STR_TIME = "24:00" Then STR_TIME = "00:00"
             rst.Filter = "FIRST_TIME_SERVICE<= " & STR_TIME & " AND  LAST_TIME_SERVICE >= " & STR_TIME
              If rst.RecordCount <> 0 Then
              im.BackColor = &HFFEBE8
               Else
               im.BackColor = vbWhite
              End If
              rst.Filter = adFilterNone
        Else
             im.Caption = Int(Val(STR_MINUTE) / 60) & ":" & STR_MINUTE
             im.BackColor = vbWhite
        End If
KL1 = KL1 + 1
Next STR_MINUTE
End Function

И тут я понял, что не всё кту масленница

  Ответить  
 
 автор: час   (17.02.2010 в 09:18)   личное сообщение
 
 



Function Create_TIME_Line(STR_LEFT As Long, STR_TOP As Long, STR_DATE As String)
' создание рисунков
Dim im As Label
Dim rst As ADODB.Recordset
Dim KL As String                      ' название
Dim KL1 As Long                     ' + название
Dim STR_HOUR As Long        ' часы
Dim STR_MINUTE As Long    ' минуты
Dim STR_TIME As String        ' время
' Удаление рисунков
Call DELETE_TIME_Line

Set rst = New ADODB.Recordset
rst.Open "SELECT SERVICE_TBL.DATE_SERVICE, SERVICE_TBL.FIRST_TIME_SERVICE, SERVICE_TBL.LAST_TIME_SERVICE" _
& " From SERVICE_TBL " _
& " WHERE (((SERVICE_TBL.DATE_SERVICE)= #" & STR_DATE & "#));", GLB_CONNECTION, adOpenKeyset, adLockOptimistic

KL1 = 1
For STR_MINUTE = 480 To 1440 Step 2
KL = "DNI" & KL1
Set im = Controls.Add("VB.Label", KL)
im.Top = STR_TOP
im.Left = STR_LEFT
im.Height = 250
im.Width = 500
im.Appearance = 0
im.BorderStyle = 1
im.FontSize = 9
im.Alignment = 2
im.Visible = True
STR_LEFT = STR_LEFT + im.Width - 15
    ' дошли до конца строки - перевод на новую
    If STR_LEFT >= 14500 Then
        STR_LEFT = 600
        STR_TOP = STR_TOP + 250
    End If
    
        If Val(STR_MINUTE) >= 60 Then
                im.Caption = Format(Int(Val(STR_MINUTE) / 60), "00") & ":" & Format(Int(Val(STR_MINUTE) - 60 * Int(Val(STR_MINUTE) / 60)), "00")
                STR_TIME = im.Caption
                If STR_TIME = "24:00" Then STR_TIME = "00:00"
                rst.Filter = "FIRST_TIME_SERVICE<= " & STR_TIME & " AND  LAST_TIME_SERVICE >= " & STR_TIME
                ' если занято
                If rst.RecordCount <> 0 Then
                        im.BackColor = &HFFEBE8
                Else
                 ' если свободно
                       im.BackColor = vbWhite
                End If
                ' удалим фильтр
                rst.Filter = adFilterNone
        Else
             ' если минут менее часа
             im.Caption = Int(Val(STR_MINUTE) / 60) & ":" & STR_MINUTE
             im.BackColor = vbWhite
       End If
       
KL1 = KL1 + 1
Next STR_MINUTE
End Function



А каким методом удалять эти Labels с формы??

  Ответить  
 
 автор: час   (17.02.2010 в 09:30)   личное сообщение
 
 

Пробую вот так:


Function DELETE_TIME_Line()
' удаление  рисунков

    Dim ctrl As Control
    For Each ctrl In Controls
        If TypeName(ctrl) = "Label" And Left(ctrl.Name, 3) = "DNI" Then
            ctrl.Remove
        End If
    Next ctrl

End Function

  Ответить  
 
 автор: час   (17.02.2010 в 09:49)   личное сообщение
 
 

Решил не удалять - один раз создать, а потом перекрашивать токма


Function COLOR_TIME_LINE(STR_DATE As String)
' перекрасить рисунки (Labels)

Dim ctrl As Control                    'Labels
Dim rst As ADODB.Recordset
Dim STR_TIME As String        ' время

Set rst = New ADODB.Recordset

rst.Open "SELECT SERVICE_TBL.DATE_SERVICE, SERVICE_TBL.FIRST_TIME_SERVICE, SERVICE_TBL.LAST_TIME_SERVICE" _
& " From SERVICE_TBL " _
& " WHERE (((SERVICE_TBL.DATE_SERVICE)= #" & STR_DATE & "#));", GLB_CONNECTION, adOpenKeyset, adLockOptimistic

For Each ctrl In Controls
        If TypeName(ctrl) = "Label" And Left(ctrl.Name, 3) = "DNI" Then
          STR_TIME = ctrl.Caption
        
        If STR_TIME = "24:00" Then STR_TIME = "00:00"
               rst.Filter = "FIRST_TIME_SERVICE<= " & STR_TIME & " AND  LAST_TIME_SERVICE >= " & STR_TIME
                ' если занято
                If rst.RecordCount <> 0 Then
                        ctrl.BackColor = &HFFEBE8
                Else
                 ' если свободно
                       ctrl.BackColor = vbWhite
                End If
                ' удалим фильтр
                rst.Filter = adFilterNone
        End If
Next ctrl

rst.Close
Set rst = Nothing
End Function


  Ответить  
 
 автор: час   (17.02.2010 в 09:51)   личное сообщение
 
 

Так, что скоро сможете воспользоваться - "Услугой"

  Ответить  
 
 автор: kot_k_k   (17.02.2010 в 15:17)   личное сообщение
 
 

Час:

если с каждой на кровать - поломается давать!!!

  Ответить  
 
 автор: Explorer   (17.02.2010 в 15:57)   личное сообщение
 
 

я бы воздержался.

и вообще - не размещал бы лэйблы на форме а рисовал бы тайм-лайны в имадже

  Ответить  
 
 автор: час   (17.02.2010 в 17:09)   личное сообщение
 
 


тайм-лайны в имадже

Простите невежду, что Бы

  Ответить  
 
 автор: Explorer   (17.02.2010 в 17:34)   личное сообщение
 
 

на lebans.com есть пример PictureBoxA2k - посмотри как там реализована отрисовка - всего один объект имадж - ничего не нужно в дизайн-вью формы мастырить (кстати и лукасу с его диаграммами и тайм-лайнами этот пример подошел бы)

когда потребуется какая-то интерактивность при работе с таймлайнами можно отталкиваться от границ имаджа -

я так когда-то интерактивные карты рисовал и атобусные маршруты по ним прокладывал

с тайм-лайнами все проще будет.

  Ответить  
 
 автор: час   (18.02.2010 в 00:11)   личное сообщение
61 Кб.
 
 

Всем огромное спасибо !!!!
Я сдвинулся
Вот скрин и шот

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList