Разработка баз данныхРазработка баз данных

 Программирование  Программы  Ссылки  Обратная связь
     
. . .
. . .
startpage.htm Новости
about.htm О сайте
fileformat.htm I. Выбор технологии
clientserver.htm Преимущества клиент-серверной технологи
prepare.htm Переход от MDB к ADP
upsizing.htm Инструменты переноса данных
setupserver.htm Выбор версии и установка сервера
selectclient.htm Выбор версии MSAccess
formsreports.htm II. Формы, Отчеты MSAccess
queries.htm Запросы / ADO
inputparameters.htm Передача входных параметров
data_drivers.htm Библиотеки доступа к данным
forms.htm Формы MSAccess
requery.htm Обновление данных в форме
updatableform.htm Обновляемость данных в форме
dialogform.htm Остановка кода пока открыта форма
formsaverecord.htm Сохранить текущую запись
formgotorecord.htm Переход по записям формы
sumform.htm Итоги в формах
serverfiltersample.htm Пример серверного фильтра
formerror.htm Причина Ошибки #Error
menubarevent.htm Перехват нажатия на кнопку меню
woconditionalformat.htm Раскраска строк ленточной формы без условного форматирования
currrec.htm Выделение цветом текущей записи
subform.htm Подчиненные Формы
textboxenter.htm Ввод перевода строки
twimagelistbug.htm treview + imagelist + подч. форма
reports.htm Отчеты, общие рекомендации
report_input_parameters.htm Входные параметры
vbaprog.htm III. Программирование VBA
dbpic.htm Картинки в базе данных
binbmp.htm Двоичные данные картинки в поле таблицы базы данных
piclink.htm Хранение ссылок на файлы
picjpg.htm Бинарное содержимое JPG, Gif файла в бинарном поле базы данных
playsound.htm Воспроизведение звуков
tv.htm Функции для тривью
restartaccess.htm Перезапуск Аксесса
publicvariables.htm Передача и хранение параметров и настроек
collectionfunctions.htm Коллекция полезных функций
datepicker.htm Всплывающий календарик
menuhummer.htm Меню и тулбары
padeg.htm Склонение по падежам
comborowsource.htm Источник данных для поля со списком
filedialog.htm Диалог выбора файла / папки
sendmapi.htm Отправка почты (4 способа) + архивация
autoupdateclient.htm Автоматическое обновление клиентской части
licenses.htm  Устранение проблем с регистрацией компонентов
uncommented.htm Без коментариев
filetime.htm Время и дата файла
reportsample.htm Пример настраивомого отчета
adpformfilter.htm Серверный Фильтр by GEO
tempmdb.htm ADP: Временный MDB для временных таблиц
mutex.htm Запрет запуска нескольких копий приложения
translit.htm Транслитерация всего проекта.
updateident.htm Изменение счетчика
webinterface.htm IV WEB
accessinternet.htm Работа с аксесс через интернет
webupdate.htm Обновление приложения аксесс через интернет
msiecom.htm Программное управление веббраузером
sqlserver.htm MS SQL
mssqltransfer2.htm Перенос/копирование баз
mssqlperm.htm Adp проверка прав пользователя перед открытием формы или управление доступностью полей формы
mssqlcrossdatabase.htm  Межбазовые разрешения
tsqlcollection.htm T-sql коллекция
similarity.htm Сортировка по созвучности
esp.htm расширенные хранимые процедуры
mssqloptimizing.htm Оптимизация быстродействия
    "Вылизать" выложенные функции руки не доходят, но за время эксплуатации кое-какие изменения они все-таки претерпели. Выложу их еще раз, авось кому пригодится:

Option Compare Database
Option Explicit
'авторы: Козин Алексей, Удалов Георгий

Public Function OrderByAcs()
  Dim ctl As Access.Control
  Dim bt As Boolean
  Dim frm
  
  If Screen.ActiveControl.ControlType = acComboBox Then
    On Error Resume Next
    Set ctl = Screen.ActiveControl
    Set frm = ctl.Parent
    If Err.Number <> 0 Then Exit Function
    If frm.Form.Name = "" Then
    End If
    Do While Err.Number <> 0 And Len(frm.Name) > 0 ' в frm находится, например, ссылка на вкладку
      Set frm = frm.Parent
      Err.Clear
      If frm.Form.Name = "" Then
      End If
    Loop
    
    Err.Clear
    If frm.RecordsetClone.Fields("~" & ctl.Name).Name = "" Then
    End If
    If Err.Number = 0 Then bt = True ' Есть поле, по которому можно сортировать
    On Error GoTo 0
    
    If bt Then
      frm.OrderBy = "~" & ctl.Name & ""
      frm.OrderByOn = True
    Else
      RunCommand acCmdSortAscending
    End If
  Else
    RunCommand acCmdSortAscending
  End If
End Function

Public Function OrderByDesc()
  Dim ctl As Access.Control
  Dim bt As Boolean
  Dim frm
  
  If Screen.ActiveControl.ControlType = acComboBox Then
    On Error Resume Next
    Set ctl = Screen.ActiveControl
    Set frm = ctl.Parent
    If Err.Number <> 0 Then Exit Function
    If frm.Form.Name = "" Then
    End If
    Do While Err.Number <> 0 And Len(frm.Name) > 0 ' в frm находится, например, ссылка на вкладку
      Set frm = frm.Parent
      Err.Clear
      If frm.Form.Name = "" Then
      End If
    Loop
    
    Err.Clear
    If frm.RecordsetClone.Fields("~" & ctl.Name).Name = "" Then
    End If
    If Err.Number = 0 Then bt = True ' Есть поле, по которому можно сортировать
    On Error GoTo 0
    
    If bt Then
      frm.OrderBy = "[~" & ctl.Name & "] DESC"
      frm.OrderByOn = True
    Else
      RunCommand acCmdSortDescending
    End If
  Else
    RunCommand acCmdSortDescending
  End If
End Function

Public Function SetServerFilterBySel()
  Dim ctl As Access.Control
  Dim sf
  Dim frm, findtext

  On Error Resume Next
  Set ctl = Screen.ActiveControl
  Set frm = ctl.Parent
  If Err.Number <> 0 Then Exit Function
  If frm.Form.Name = "" Then
  End If
  Do While Err.Number <> 0 And Len(frm.Name) > 0 ' в frm находится, например, ссылка на вкладку
    Set frm = frm.Parent
    Err.Clear
    If frm.Form.Name = "" Then
    End If
  Loop
  On Error GoTo 0
  
  Select Case ctl.ControlType
  Case acTextBox:
    Select Case VarType(ctl.Value)
      Case 2 To 6, 14, 17:
        findtext = ctl.Value
        sf = "[" & ctl.ControlSource & "]=" & findtext
      Case Else
        If ctl.SelText = "" Then
          findtext = ctl.Text
        Else
          findtext = ctl.SelText
        End If
        findtext = Replace(findtext, "'", "''", , , vbTextCompare)
        findtext = Replace(findtext, """", "' + char(34) + '", , , vbTextCompare)
        If ctl.SelText = ctl.Text Or Len(Nz(ctl.SelText)) = 0 Then
          If Len(Nz(findtext)) = 0 Then
            sf = "([" & ctl.ControlSource & "] = '' OR [" & ctl.ControlSource & "] IS NULL)"
          Else
            sf = "[" & ctl.ControlSource & "] = '" & findtext & "'"
          End If
        Else
          sf = "[" & ctl.ControlSource & "] like  '%" & findtext & "%'"
        End If
    End Select
  Case acComboBox, acListBox:
    ' В полях со списками надо брать value, т.к. отображаемый столбец м.б. несвязанным
    ' Перед фильтрацией надо обновить содержимое поля
    findtext = Nz(ctl.Value)
    findtext = Replace(findtext, "'", "''", , , vbTextCompare)
    findtext = Replace(findtext, """", "' + char(34) + '", , , vbTextCompare)
    If Len(findtext) = 0 Then
      sf = "[" & ctl.ControlSource & "] is null"
    Else
      sf = "[" & ctl.ControlSource & "] = '" & findtext & "'"
    End If
  Case acCheckBox:
    If ctl.Value = 0 Then
      sf = "[" & ctl.ControlSource & "]=0"
    Else
      sf = "[" & ctl.ControlSource & "]<>0"
    End If
  End Select
  
  If Len(Nz(frm.ServerFilter)) = 0 Then
    If Len(Nz(sf)) <> 0 Then
      frm.ServerFilter = sf
      frm.RecordSource = frm.RecordSource
    End If
  Else
    If sf <> "" Then
      frm.ServerFilter = frm.ServerFilter & " AND " & sf
      frm.RecordSource = frm.RecordSource
    End If
  End If
End Function

Public Function ClearServerFilter()
  Dim ctl As Access.Control
  Dim frm
  
  On Error Resume Next
  Set ctl = Screen.ActiveControl
  If ctl.ControlType = acSubform Then
    Set frm = ctl.Form
  Else
    Set frm = ctl.Parent
  End If
  If Err.Number <> 0 Then Exit Function
  If frm.Form.Name = "" Then
  End If
  Do While Err.Number <> 0 And Len(frm.Name) > 0 ' в frm находится, например, ссылка на вкладку
    Set frm = frm.Parent
    Err.Clear
    If frm.Form.Name = "" Then
    End If
  Loop
  On Error GoTo 0
  
  frm.ServerFilter = ""
  frm.RecordSource = frm.RecordSource
End Function

Чего тут у меня?.. А, да, для полей со списками, чтобы не искать отображаемый столбец (которого в источнике данных может и не быть), если по ним нужна специальная сортировка, в источник данных я выкладываю для них поле, с именем контрола-поля со списком и префиксом "~". При сортировке сортирую именно по этому полю, если нахожу его.
 
. . .
. . .
© 2000 - 2009 Алексей Козин эта вебстраница является зеркалом сайта www.msdatabase.ru Рейтинг@Mail.ru
Hosted by uCoz