Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / БД Приемная, делопроизводство / 16 сообщений из 16, страница 1 из 1
27.07.2016, 03:53
    #39280729
kabzistov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
Писал еще на диплом базу данных для секретаря в приемной, для регистрации корреспонденции, а сейчас сижу ее привожу в божеский вид.

Просьба оценить, высказать замечания и самое главное подсказать как можно базу улучшить (возможно у вас какие то идеи и умения ее преобразят). Спасибо


БД https://yadi.sk/d/ubR-Bn8Gtf2TM


по вопросам пишите либо тут, либо почта leninne@mail.ru
...
Рейтинг: 0 / 0
27.07.2016, 03:59
    #39280731
kabzistov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
Руководство пользователя.doc
https://yadi.sk/i/8n2x7KWJtf2Wr
...
Рейтинг: 0 / 0
27.07.2016, 08:06
    #39280764
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
kabzistov , доброго времени суток. Не глядя на функционал, просто открыл первую форму "Входящая корреспонденция" и в глаза сразу же бросились куски кода:

Код: vbnet
1.
If DCount("[Tip]", "[Tip]", "[Tip]=Forms![VHOD]![Tip]") = 0 And Forms![VHOD]![Tip] <> "" Then


- обрабатывать событие NotInList нужно.

Код: vbnet
1.
2.
3.
4.
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Tip (Tip)SELECT [Forms]![VHOD]![Tip] AS Tip"
[Forms]![VHOD]![Tip].Requery
DoCmd.SetWarnings True


- обрабатывать событие NotInList нужно. Да и вообще, я бы не использовал такие "штуки" как "DoCmd.SetWarnings False"

Код: vbnet
1.
If [Дата1] <> "" Then


Дату проверять как IsDate(Дата1).

Код: vbnet
1.
If [Индекс_документа] <> ""


А если " "? Хотя бы уже так: LEN(Индекс_документа & "")>0

Код: vbnet
1.
If Me![Korrespondent] <> "1" Then DoCmd.OpenForm "Korrespondenti1", , , "[Korrespondent]= '" & Me![Korrespondent] & "'"


Тут вообще не понятно. Вначале сравниваете как число потом как строку. К тому же, если открываете форму с условием, может все таки уникальный идентификатор есть, и его нужно использовать а не текстовое значение?

На главной:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub Кнопка253_Click()
On Error GoTo Err_Кнопка253_Click
    Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "ISHOD"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_Кнопка253_Click:
    Exit Sub
Err_Кнопка253_Click:
    MsgBox Err.Description
    Resume Exit_Кнопка253_Click
    DoCmd.OpenForm "ISHOD", acNormal, , , acFormAdd
End Sub


Вывод формы после вывода ошибки? Или я чего то не понял?

Дальше даже не смотрел уже, полагаю все в таком же духе.
Плюс ко всему, нет общего правила наименований контролов, событий и прочего(то русский, то латинница), что "режет" глаз. Вы или то или то уже используйте.

С Уважением.
...
Рейтинг: 0 / 0
27.07.2016, 08:12
    #39280769
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
Форма командировка:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
If Me.NewRecord Then
  Me![Кнопка25].Enabled = False
 Else
  Me![Кнопка25].Enabled = True
  End If
  If Me.NewRecord Then
  Me![Кнопка42].Enabled = False
 Else
  Me![Кнопка42].Enabled = True
  End If
  If Me.NewRecord Then
  Me![Кнопка64].Enabled = False
 Else
  Me![Кнопка64].Enabled = True
  End If
  If Me.NewRecord Then
  Me![Кнопка65].Enabled = False
 Else
  Me![Кнопка65].Enabled = True
  End If
  If Me![ФИО] = "-" Then
  Me![Должность].Enabled = False
 Else
   Me![Должность].Enabled = True
  End If


-аддд...
...
Рейтинг: 0 / 0
27.07.2016, 08:15
    #39280772
Agapov_stas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
Журнал "Входящая корреспонденция":
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Dim s1, s2
Me.Refresh
s1 = "true "
s2 = "" & Me.wФАМ106
If Len(s2) > 0 Then
s1 = s1 & " and  format([Дата регистрации],'dd.mm.yyyy') like '*" & s2 & "*'"
End If


3. Использование дат
...
Рейтинг: 0 / 0
27.07.2016, 09:06
    #39280800
NewRecord,
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
Agapov_stasФорма командировка:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
If Me.NewRecord Then
  Me![Кнопка25].Enabled = False
 Else
  Me![Кнопка25].Enabled = True
  End If
  If Me.NewRecord Then
  Me![Кнопка42].Enabled = False
 Else
  Me![Кнопка42].Enabled = True
  End If
  If Me.NewRecord Then
  Me![Кнопка64].Enabled = False
 Else
  Me![Кнопка64].Enabled = True
  End If
  If Me.NewRecord Then
  Me![Кнопка65].Enabled = False
 Else
  Me![Кнопка65].Enabled = True
  End If
  If Me![ФИО] = "-" Then
  Me![Должность].Enabled = False
 Else
   Me![Должность].Enabled = True
  End If


-аддд...+1
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Sub Form_Current()
    Static IsNewRecord As Boolean
    Dim arrControls
    Dim v
    '
    If IsNewRecord <> Me.NewRecord Then
        IsNewRecord = Me.NewRecord
        arrControls = Array("Флажок4", "Кнопка6", "Кнопка7", "Поле8", "ПолеСоСписком10")
        For Each v In arrControls
            Me.Controls(v).Enabled = Not IsNewRecord
        Next
    End If
End Sub
...
Рейтинг: 0 / 0
27.07.2016, 09:34
    #39280814
kabzistov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
Код: vbnet
1.
If Me![Korrespondent] <> "1" Then DoCmd.OpenForm "Korrespondenti1", , , "[Korrespondent]= '" & Me![Korrespondent] & "'"


Тут вообще не понятно. Вначале сравниваете как число потом как строку. К тому же, если открываете форму с условием, может все таки уникальный идентификатор есть, и его нужно использовать а не текстовое значение?



Не помню почему, но нельзя было поставить проверку на заполненности либо не заполненность поля и поэтому поставил "если значение поля любое, но не "1", тогда открывать на редактирование именно эту строку из справочника"
...
Рейтинг: 0 / 0
27.07.2016, 12:06
    #39281018
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
kabzistov,

первое , что я делаю при просмотре таких баз --пытаюсь ввести несколько записей
это мне вроде удалось, но
--я несколько раз набирала должность --нет справочника должностей
--кажется и город тоже и ....(не вспомню уже)
--все формы закрываются по крестику, а не по кнопке закрытия
--нет нормального поиска(у трудом заметила его в примечании форм
--нет возможности просмотреть клиента на историю писем(входящие/исходящие )
--похоже, что нет связи этих писем между собой(если только в ручном примечании)

этот же код я применяю в поиске довольно часто (если не известна точная дата ), хотя связь даты и фам весьма натянута

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Dim s1, s2
Me.Refresh
s1 = "true "
s2 = "" & Me.wДатаРегистрации   ''''ФАМ106
If Len(s2) > 0 Then
s1 = s1 & " and  format([Дата регистрации],'dd.mm.yyyy') like '*" & s2 & "*'"
End If
...
Рейтинг: 0 / 0
27.07.2016, 12:10
    #39281026
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
ПЕНСИОНЕРКА
Код: vbnet
1.
2.
3.
.......
s1 = s1 & " and  format([Дата регистрации],'dd.mm.yyyy') like '*" & s2 & "*'"
.......

Часто у Вас вижу, но никак не пойму, зачем Like для дат?
Что это дает?
...
Рейтинг: 0 / 0
27.07.2016, 12:28
    #39281057
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
__MichelleЧасто у Вас вижу, но никак не пойму, зачем Like для дат?

я с этим очень часто сталкивалась -- исполнитель помнит ТОЛЬКО примерную дату
поэтому если проверять по периоду -- слишком избыточная выборка
причем часто надо именно историю по договору

например
клиент --рога и копыта
договор--100 от декабря 2014 года или начала 2015

но переписка по нему идет уже 3 года(договор не закрыт)
надо получить всю переписку по нему
вх от ,,,,,текст сообщения
исх от ......текст ответа
вх от ,,,,,текст сообщения
исх от ......текст ответа
вх от ,,,,,текст сообщения
исх от ......текст ответа
вх от ,,,,,текст сообщения
исх от ......текст ответа
исх от ......текст ответа
исх от ......текст ответа
вх от ,,,,,текст сообщения
вх от ,,,,,текст сообщения

сначала тоже было по интервалу дат , но затем по просьбе трудящихся переделала на лике
...
Рейтинг: 0 / 0
27.07.2016, 12:39
    #39281081
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
ПЕНСИОНЕРКА,

Нет.
Речь не про разницу выборки по периоду или по крайним точкам.
А про способ сравнения
Код: vbnet
1.
<Дата_из_базы> Like "*" & <Заданная_дата> & "*"

Требующееся форматирование опускаю, для вопроса не существенно.
Почему не
Код: vbnet
1.
<Дата_из_базы> = <Заданная_дата>

?
...
Рейтинг: 0 / 0
27.07.2016, 12:43
    #39281088
БД Приемная, делопроизводство
__Michelle,

<Заданная_дата> пользователи вводят. например, так - *.07.2016
...
Рейтинг: 0 / 0
27.07.2016, 12:46
    #39281093
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
Заданная_дата,__Michelle,

<Заданная_дата> пользователи вводят. например, так - *.07.2016 Вот это другое дело.
Так бы сразу и сказали.
А то про периоды и непериоды.)))
...
Рейтинг: 0 / 0
27.07.2016, 12:48
    #39281097
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
Вот только почему тогда просто год и месяц не брать за основу,
или не вводить 01.07.2016?
Но это, видимо, дело хозяйское...
...
Рейтинг: 0 / 0
27.07.2016, 12:53
    #39281104
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
__Michelle,

2016 ПОИСК ГОДА201[456]поиск 2014-201607.2016июль 2016.07.201*июль 2010-2019
...
Рейтинг: 0 / 0
27.07.2016, 13:04
    #39281124
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
БД Приемная, делопроизводство
ПЕНСИОНЕРКА__Michelle,

2016 ПОИСК ГОДА201[456]поиск 2014-201607.2016июль 2016.07.201*июль 2010-2019Я уже поняла. Спасибо.
Все это у меня через граничные значения дат.
В критериях для них сразу выставляются реальные минимальное и максимальное значения из базы,
для каждого "конца" есть также поле со списком реально присутствующих годов,
при выборе определенного года критерии тоже "сами" подстраиваются,
Как-то человеку, по-моему, в таком виде понятнее и очевиднее, что он задал.
И очень быстро получается.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / БД Приемная, делопроизводство / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]