powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access. Трюки
25 сообщений из 26, страница 1 из 2
Access. Трюки
    #34105840
EloyOrion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас читаю книжечку:
Кэн Блюттман
Access. Трюки (2006) Скачать
Книжечка простая, но я тут открываю для себя просто удивительные моменты.
Например, а вы знали что, Select Case, можно записать ввиде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  Select Case tbtest
  Case Is >  30 
    tbtest =  30 
  Case Is >  20 ,  15 
    tbtest =  20 
  Case Is <=  20 
    tbtest =  10 
  End Select
...
Рейтинг: 0 / 0
Access. Трюки
    #34105861
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EloyOrionСейчас читаю книжечку:
Кэн Блюттман
Access. Трюки (2006) Скачать
Книжечка простая, но я тут открываю для себя просто удивительные моменты.
Например, а вы знали что, Select Case, можно записать ввиде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  Select Case tbtest
  Case Is >  30 
    tbtest =  30 
  Case Is >  20 ,  15 
    tbtest =  20 
  Case Is <=  20 
    tbtest =  10 
  End Select


Наверное я тебя разочарую... но это описано в help-е.
Читать не пробовал?
...
Рейтинг: 0 / 0
Access. Трюки
    #34105899
EloyOrion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Н-да, точно, всё описано в хелпе..
Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber
Когда-то несколько лет назад изучал Access по книге, Select Case и всё остальное, там этого не было.
Поэтому мне нравится иногда пролистывать книги с примерчиками всякими - нахожу что-то, на что раньше не обращал внимания, например, что у формы есть свойство NewRecord, а я проверял, новая ли запись с помощью ISNUMERIC() от поля со счётчиком.
...
Рейтинг: 0 / 0
Access. Трюки
    #34105969
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
EloyOrionа я проверял, новая ли запись с помощью ISNUMERIC() от поля со счётчиком.
Даже IsNull было бы прямее.
...
Рейтинг: 0 / 0
Access. Трюки
    #34105989
EloyOrion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычДаже IsNull было бы прямее.
А вот IsNull на поле с IDENTITY не всегда срабатывает, т.к. там не NULL в любом случае, а чаще всего это PrimaryKey, который к тому же и NOT NULL. Иногда срабатывает, а иногда нет. Я даже в дебаггере смотрел, там в этом поле пишется <счетчик> или что-то такое, когда там ещё нет значения. А IsNumeric срабатывает всегда!
Такой момент точно присутствует в adp Access 2003, в других версиях не знаю.
...
Рейтинг: 0 / 0
Access. Трюки
    #34106020
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
EloyOrionЯ даже в дебаггере смотрел, там в этом поле пишется <счетчик> или что-то такое, когда там ещё нет значения.
Я тоже "даже в дебаггере смотрел", в Аксессе среди значений нет такого значения, как <счетчик>, а значение этого поля в описываемой ситуации именно Null.
...
Рейтинг: 0 / 0
Access. Трюки
    #34106049
EloyOrion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Саныча значение этого поля в описываемой ситуации именно Null
Может и Null, но IsNull не всегда срабатывает. Я раньше использовал IsNull, но в каких-то формах это работало, а в каких-то нет. У меня есть ленточная форма, в которой IsNull не срабатывает на поле типа счётчик, а полсе замены NOT IsNull на IsNumeric, всё работает, повторюсь это бывает в adp Access 2003 SP2. В mdb сейчас делал ленточную форму, там NULL - всё срабатывает.
...
Рейтинг: 0 / 0
Access. Трюки
    #34106052
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Гм... Странно, ну да ланно...
...
Рейтинг: 0 / 0
Access. Трюки
    #34106054
EloyOrion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причём не в функции дело, условие типа
Код: plaintext
If ID Is Null Then
тоже не срабатывает.
...
Рейтинг: 0 / 0
Access. Трюки
    #34106056
EloyOrion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно странно, "ну да ладно" - полностью согласен :) Теперь в моём арсенале есть NewRecord, буду использовать. А то я тогда всё что под руку попало перебрал, пока до IsNumeric дошёл :)
...
Рейтинг: 0 / 0
Access. Трюки
    #34106066
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
EloyOrionПричём не в функции дело, условие типа
Код: plaintext
If ID Is Null Then
тоже не срабатывает.
А в VBA такое и не должно работать. Причем вообще, а не только в делах, связанных со счетчиками. Такой синтаксис - только для селектов.
...
Рейтинг: 0 / 0
Access. Трюки
    #34106100
EloyOrion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычА в VBA такое и не должно работать.
Да, всё верно. Это я чего-то не в ту степеть... Вот это не работало:
Код: plaintext
1.
If Nz(ID, 0 )= 0  Then ...
...
Рейтинг: 0 / 0
Access. Трюки
    #34106120
EloyOrion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжая тему.

Сочетания клавиш быстрого вызова для ввода данных
Вставка текущего времени - Ctrl+SHIFT+;
Вставка текущей даты - Ctrl+:
Вставка значения из того же поля предыдущей записи - Ctrl+'
Вставка в поле значения по умолчанию - Ctrl+Alt+пробел
Вставка новой строки в текст, в поле memo, в надпись в режиме конструктора - Ctrl+Enter
Вставка новой записи - Ctrl+"плюс"
...
Рейтинг: 0 / 0
Access. Трюки
    #34106122
EloyOrion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использование макроса AutoKeys
Макрос AutoKeys позволяет назначить собственные сочетания клавиш для вызова действий, совершаемых в приложении базы данных. Вы можете назначить действия, совершаемые при нажатии функциональных клавиш, сочетаний клавиш, таких как Ctrl+A, а также при нажатии клавиш Insert и Delete. При ЭТОМ нужно строго придерживаться синтаксиса, в котором знак возведения в степень (^) представляет клавишу Ctrl, а знак плюс (+) представляет клавишу Shift. Обычные клавиши вводятся как есть, а функциональные и специальные клавиши (Insert и Delete) заключаются в фигурные скобки ({}). Вот несколько примеров:
■ ^А — назначает действие сочетанию Ctrl+A.
■ {F9} — назначает действие функциональной клавише F9.
■ +{F9} — назначает действие сочетанию Shift+F9.
■ {INSERT} — назначает действие клавише Insert.
При назначении собственных сочетаний клавиш взамен сочетаний, существовавших по умолчанию, последние будут утрачены. Вы даже можете переназначить действия, вызываемые общепринятыми сочетаниями клавиш, такими как Ctrl+V (вставка).
Синтаксические выражения помещаются в столбец Имя макроса , а соответствующие сочетанию клавиш действия — в столбец Макрокоманда . Остается только выполнить еще одно требование — присвоить макросу имя AutoKeys.
...
Рейтинг: 0 / 0
Access. Трюки
    #34106259
EloyOrion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использование в запросах Access регулярных выражений
Иногда возможностей символов-заменителей уже не хватает. Проявив смекалку, вы сможете использовать в запросах регулярные выражения.
Хотя в Access допускается использование довольно мощных механизмов сравнения строк, всё же время от времени требуется использовать что-нибудь более мощное. Возможность использования регулярных выражения была добавлена корпорацией Microsoft в Windows Scripting Engine еше в версии 5.0, в дополнение к JavaScript. Вся мощь этой технологии может быть использована и в запросах Access.
Хотя в данном трюке используются не самые простые элементы регулярных выражений, приводимый здесь пример может стать для новичков первым шагом в их изучении.
Отсутствие встроенных регулярных выражений во многих случаях можно компенсировать за счет применения символов-заменителей Access, многократного вызова строковых функций Left, Mid, Right, Len и т. д. Но как только вы увидите, на что способна специально созданная функция, то наверняка сможете оценить и преимущества ее применения, и полученную при этом экономию времени.
Сначала нужно создать функцию, связанную с исполняемом библиотекой Microsoft Scripting, которую можно будет вызвать из запроса Access.
Использование данного трюка предполагает наличие последней версии Microsoft Scripting Engine, установленной на вашем компьютере. Если ВЫ не уверены в её наличии, посетите веб-сайт http://www.microsoft.com/scripting.
В следующем программном фрагменте используется функция CreateObject, поэтому его можно использовать в другой базе данных без проверки установленных ссылок на объекты:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Function RegExp(str_CTpoKa As String, str_PerB As String, _
                        Optional bоl_ИгнРег As Boolean = False) As Boolean
  Dim re As Object
  Set re = CreateObject("vbscript.RegExp")
  re.Pattern = str_PerB
  re.IgnoreCase = bоl_ИгнРег
  If re.Test(str_CTpoKa) Then
    RegExp = True
  Else
    RegExp = False
  End If
End Function
У функции есть два обязательных параметра: строка, подлежащая сравнению, и строка, содержащая регулярное выражение. Третий, необязательный, параметр может заставить функцию при проведении сравнения игнорировать регистр букв; по умолчанию регистр будет учитываться.
В качестве примера рассмотрим процесс проверки учетных номеров комплектующих, направленный на выявление номеров, не отвечающих заданным критериям. Нередко данные, получаемые от разных людей, работающих на различных компьютерных платформах, необходимо ОЧИСТИТЬ перед вводом в главную 6азу данных. Предположим, что номера комплектующих деталей, предназначенных для фабрики, должны отвечать следующим критериям:
■ они должны начинаться с заглавных букв PN или заглавной буквы Р;
■ следующие две позиции должны быть цифрами;
■ следующая позиция должна быть заглавной буквой (A-Z);
■ следующие три или четыре позиции должны быть цифрами;
■ следующие пять позиции должны быть заглавными буквами (A-Z).
Примеры учетных номеров, отвечающих этим критериям: PN12W123ABCDE и P12W123ABCDE. Примеры, не отвечающие критериям: PN12W13ABCDE (только две цифры после W) и 12W123ABCDE (не начинается с PN или Р).
С учетом набора критериев, которым должны отвечать номера комплектующих, регулярное выражение должно иметь следующий вид:
"^(РN|Р)[0-9][0-9][A-Z][0-9]{3,4}[A-Z]{5,6}$"
Чтобы лучше понять, о чем идет речь, разберем наше выражение:
■ ^ — предписание вести поиск соответствия с начала строки;
■ (PN | Р) — задание соответствия символам PN или символу Р;
■ [0-9] [0-9] — задание соответствия двум цифрам, обе из которых находятся в диапазоне от 0 до 9;
■ [A-Z] — задание соответствия одиночному символу в диапазоне от А до Z;
■ [0-9] {3,4} - задание соответствия одиночной цифре от 0 до 9, которая повторяется от трех до четырех раз;
■ [A-Z] {5,6} —задание соответствия одиночному символу от A до Z, который повторяется от пяти до шести раз.
...
Рейтинг: 0 / 0
Access. Трюки
    #34106262
EloyOrion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения за опечатки в предыдущих примерах и прошу модераторов их удалить,
Модератор: удалил
должно быть так соответственно:
Внесения изменений в обработку событий открытия всех отчетов, имеющихся в базе данных:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Public Sub insert_open_report_event()
  ' !!Перед  запуском следует закрыть все запущенные отчеты!!
  Dim rpt As Report, open_proc_start As Long
  For Each rpt In CurrentProject.AllReports
    DoCmd.OpenReport rpt.Name, acViewDesign
    With Reports( 0 ).Module
      On Error Resume Next
      open_proc_start = .ProcBodyLine("Report_Open", vbext_pk_Proc)
      If Error <>  0  Then
        'Если  обработчик  отсутствовал,   он  будет  создан
        Err.Clear
        open_proc_start = .CreateEventProc("Open", "Report")
      End If
      .InsertLines open_proc_start +  1 , "Dim conn as ADODB.Connection"
      .InsertLines open_proc_start +  2 , "Set conn = CurrentProject.Connection"
      '...
    End With
    DoCmd.Close acReport, Reports( 0 ).Name, acSaveYes
  Next rpt
  MsgBox "Изменения  внесены во  все  отчеты"
End Sub
Эта процедура работаете программными модулями отчетов. Фактически мы имеем дело с кодом VBA, который создает такой же код VBA! В процессе работы процедуры каждый отчет открывается в режиме конструктора, после чего в его программный модуль вставляется новый фрагмент кода. Вы можете создать подобную процедуру и для форм — для этого нужно будет вместо AllReports обратиться к коллекции AllForms.

Определение типа данных в таблице.
Для определения типа данных вы можете обратиться к библиотеке ADOX. Эта библиотека предоставляет способ сканирования всех полей таблицы и определения их типов (впрочем, как и всех других свойств). Вот стандартная процедура сканирования отдельной таблицы, получения имен и типов каждого поля:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub get_fields()
  Dim cat As ADOX.Catalog
  Set cat = New ADOX.Catalog
  Dim fld As ADOX.Column
  cat.ActiveConnection = CurrentProject.Connection
  
  For Each fld In cat.Tables("tbl_Кпиенты").Columns
    Debug.Print fld.Name & " " & fld.Type
  Next
  
  Set cat = Nothing
End Sub
Учтите, что для использования библиотеки ADOX вы должны установить с ней связь. Для этого, впрочем, как и для установки любых других связей, необходимо перейти в редактор VB и воспользоваться командой меню Tools ► References, с помощью которой вы сможете открыть диалоговое окно References. Библиотека называется Microsoft ADO Ext. 2.7 for DDL and Security. Процедура возвратит для каждого типа поля числовую константу. Например, значение 202 относится к текстовому полю (хотя на малопонятном жаргоне ADOX это число сопоставлено с символьным полем переменной длины — adVarWChar). Чтобы узнать значения этих чисел, нужно просмотреть в Object Browser (браузере объектов) коллекцию констант DataTypeEnum. Эта коллекция станет доступной только после установки связи с библиотекой ADOX.
...
Рейтинг: 0 / 0
Access. Трюки
    #34106913
Фотография natalitvinenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не затруднит полный адрес? А то вылетает не туда...
...
Рейтинг: 0 / 0
Access. Трюки
    #34106933
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
EloyOrionhttp://c-books.info/books/news5.php/2006/1 ... ess-tryuki.html natalitvinenkoА не затруднит полный адрес? А то вылетает не туда...
Действительно...
...
Рейтинг: 0 / 0
Access. Трюки
    #34107039
EloyOrion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нда.. это я скопировал Name вместо ссылки.
Вот правильная ссылка!
...
Рейтинг: 0 / 0
Access. Трюки
    #34179372
Tatta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Классная книга! Уже скачала и распечатала :)
А то у нас в магазине такая 30$ стоит...
...
Рейтинг: 0 / 0
Access. Трюки
    #34179417
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TattaКлассная книга! Уже скачала и распечатала :)
А то у нас в магазине такая 30$ стоит...Может что неправильно делаю. Все время говорит ошибкаЮ зайдите с титульной страницы. Захожу - тоже самое. Файрволл отключил. Что не так?
...
Рейтинг: 0 / 0
Access. Трюки
    #34180425
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TattaКлассная книга! Уже скачала и распечатала :)
А то у нас в магазине такая 30$ стоит...

скинь на мыло 123ukfгав-гавuralweb.ru
...
Рейтинг: 0 / 0
Access. Трюки
    #34180557
Panfik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а существуют ли файлы с примерами из этой книги?
...
Рейтинг: 0 / 0
Access. Трюки
    #34181795
Бабай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полез сегодня посмотреть, что за книга.
внимательно не смотрел.
видел буквально пару страниц методом случайного перелистывания - что-то из первых и что-то "из глубины".

испытал сложные ощущения от "трюка с вставкой".
обсуждается тема - как не дать пользователю открывать базу в режиме, отличном от рид-онли.
совет приводится такой: заведите в текущем проекте служебную таблицу и попробуйте вставить в нее запись. Если получилось, значит вы не в режиме рид-онли.

с одной стороны, этот совет не зависит от версии акцесс и в этом плане универсален.

С другой стороны, сам бы я разглядывал CurrentProject.Connection.Mode

Если бы было делом принципа не пользовать адо, то ковырял бы
CurrentDB.Properties("Updatetable")


книжка очень наверно полезна, хороша и всем нужна.
Но как-то не читаю я книжек, которые производят на меня первое ошеломляющее впечатление.

впрочем, надо будет взять пивка да посмотреть - чем еще книжка побалует.
...
Рейтинг: 0 / 0
Access. Трюки
    #34181797
Бабай
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опечатка. д.б.:
CurrentDB.Properties("Updatable")
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Access. Трюки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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