Q1. После установки и деинсталяции MSA2000 и последующей инсталяции А97, последний не запускается, сообщая о прекращении лицензии?
|
A. www.hiprog.com/index.php?option=com_content&task=view&id=111&Itemid=35 |
Q2. Dim rst As Recordset Set rst = CurrentDb.OpenRecordset ("SELECT *…..") При выполнении ACCESS выдает сообщение «type mismatch»? |
A. Объект RECORDSET есть и в библиотеке DAO и в библиотеке ADO Наличие ссылки на DAO не гарантирует работоспособность. Dim rst as recordset ACCESS начинает искать по всем библиотекам объект Recordset и находит его ... a) в библиотеке ADO если только она одна подключена b) в библиотеке ADO если подключены две библиотеки и DAO и ADO, но ADO "выше" в таблице ссылок c) в библиотке DAO если только она одна подключена d) в библиотке DAO если подключены две библиотеки и DAO и ADO, но DAO "выше" в таблице ссылок Соответственно ACCESS объявляет переменную того типа recordset ссылку на какую библиотеку он нашел. А вот дальше возникают ошибки из-за того что определилась переменная одного типа, а значение ей присваивают другого. Как в данном случае Access определил recordset типа ADO а currentdb созвращает recordset DAO, от сюда не соответсвие типов (это наиболее распространенный вариант), но возможен и другой ... с вариатнах с) и d) будет описан рекордсет типа DAO и код из вопроса будет работать нормально, а такой буд выдаст ошибку: Dim rst As Recordset Set rst = New Recordset rst.Open "employee", cnn1, , , adCmdTabl | поскольку будет попытка использовать метод Open, которого в DAO рекордсете нет. Отсюда вывод: нужно явно описывать тип рекордсета который вы будете использовать, тогда вы не будете зависить от порядка подключения библиотек. dim srt as DAO.Recordset или dim rst as ADODB.recordset |
|
Q3. Какой максимальный размер файла ACCESS? |
A. Максимальный размер файла для MSA2000 и выше - 2Gb, для MSA97 - 1Gb |
Q4. Как определить наличие таблицы в базе данных? |
A. Вариант 1: Public Function IsExistTable(TableName As String) As Boolean On Error Resume Next IsExistTable = CurrentDb.TableDefs(TableName).Name <> "" End Function Вариант 2: Function istbl( strNameTBL As String) As Boolean Dim tbl As Tabledef For Each tbl In currentdb().tabledefs If tbl.name = strNameTBL Then isTbl = true Exit For End If Next End Function Вариант 3 (только для MSA 2000 и выше) : Function istbl( strNameTBL As String) As Boolean Dim obj As AccessObject, dbs As Object Set dbs = Application.CurrentData For Each obj In dbs.AllTables If obj.Name = strNameTBL Then istbl = true Exit For End If Next obj End Function | |
Q5. Как проверить открыта ли форма? |
A. Function fIsLoaded(ByVal strFormName As String) As Boolean 'функция возращает True, если форма загружена или False - если нет If SysCmd(acSysCmdGetObjectState, acForm, strFormName) <> 0 Then If Forms(strFormName).CurrentView <> 0 Then fIsLoaded = True End If End Function Для MSA2000 и выше: Function IsFormLoaded(strNameFRM As String) As Boolean IsFormLoaded = CurrentProject.AllForms(strNameFRM).IsLoaded End Function | http://www.hiprog.com/index.php?option=com_content&task=view&id=185&Itemid=35 |
Q6. Как узнать вносились ли изменения в форме? |
A. Если у формы есть источник данных, то нужно проверить свойство Dirty, если оно равно TRUE, данные изменялись |
Q7. Как пронумеровать записи в форме (запросе)? |
A. www.hiprog.com/index.php?option=com_content&task=view&id=359&Itemid=35 |
Q8. Как убрать сообщения ACCESS при выполнении запросов на изменение (добавление,удаление)? |
A. Вариант 1: через меню: Сервис - Параметры - Правка/поиск - Подтверждение - ... Вариант 2: Application.SetOption "Confirm Action Queries", False Варитан 3: Выполнять запросы используя метод EXECUTE Currentdb().execute ("Update .....") или set qdf = currentdb().Querydefs("ИМЯ_Запроса").execute |
Q9. Почему Access вдруг начал “ругаться” на стандартные функции Date, Now? |
A. Это происходит из-за потерянных ссылок на внешние библиотеки. Проверьте наличие потерянных ссылок. При редактировании кода меню "Tools"-"References" |
Q10. Как перевести число в его представление прописью? |
A. www.hiprog.com/index.php?option=com_content&task=view&id=138&Itemid=35 |
Q11. Как после удаления всех записей заставить поле счетчика нумероваться с 1? |
A. Сжать БД |
Q12. Можно ли восстановить удаленную таблицу? |
A. www.hiprog.com/index.php?option=com_content&task=view&id=34&Itemid=35 |
Q13. Можно ли восстановить удаленную запись? |
A. Восстановить удаленные записи в таблице невозможно, даже до сжатия базы. |
Q14. Как в отчете пронумеровать записи? |
A. Создать свободное поле. В свойство "Данные" (ControlSource) написать =1. Свойство поля "сумма с накоплением" в значение "для всего". |
Q15. Как обратиться к полю подчиненной формы? |
A. Корректная ссылка на свойство подчиненной формы или отчета требует указания полного идентификатора формы c использованием свойства Form элемента управления - подчиненная форма: Forms![Форма1].Controls![Форма2].Form.Controls![Поле1].Value В данном примере: Forms![Форма1].Controls![Форма2] является ссылкой на элемент управления, в котором выводится подчиненная форма. А Forms![Форма1].Controls![Форма2] является ссылкой на саму подчиненную форму. Указание свойства Form для ссылки на подчиненную форму или на ее свойства является обязательным для MS Access версии 97 и желательным для версий 2000-2003. Аналогичным образом, с помощью вставки выражений типа .Controls![Форма2].Form (или .Controls("Форма2").Form ), строятся выражения для подчиненных форм третьего и далее уровней вложености. . Обращение к объекту формы из контекста этой формы Для ссылки на текущий экземпляр объекта, в котором в данное время выполняется программа, рекомендуется использовать ключевое слово Me. Все процедуры, связанные с текущим объектом, имеют доступ к объекту, указываемому с помощью слова Me. Пример использования слова Me в модуле формы, содержащей поле Поле1: Me.Controls![Поле1].Value Дополнительная информация 1. Построитель выражений некоторых русифицированных версий Microsoft Access автоматически ставит несуществующую инструкцию [Форма] вместо [Form]. Для корректной работы программы следует вручную исправить полученное выражение. 2. Некоторые построители выражений обособляют все названия полей и форм, а также ключевые слова квадратными скобками, например так: [Forms]![Форма1]![Форма2].[Form]![Поле1].[Value] В принципе, их использование необходимо только для элементов, чьи имена содержат внутренние пробелы или другие специальные символы (за исключением самих квадратных скобок - тогда надо пользоваться выражениями типа (3) или (4)). 3. В Соглашении об именах полей, элементов управления и объектов сказано, что имя может включать любую комбинацию букв, цифр, пробелов и специальных символов за исключением точки (.), восклицательного знака (!), надстрочного символа (`), квадратных скобок ([ ]) и управляющих символов (с кодами ASCII от 0 до 31), а также не должно начинаться с символа пробела. Однако вы легко сможете создать объект, имя которого нарушает эти правила. Если вы решили спорить с программистами Microsoft, то следует быть готовым к тому, что, например, Пробелы в именах могут при некоторых обстоятельствах вызывать конфликты в программах Visual Basic . 4. Обратите внимание: название формы, под которым она хранится в файле базы данных, и имя (Name) объекта .Control, содержащего эту подчиненную форму, которое и следует использовать в ссылках, не одно и то же! 5. Отличия . и ! . |
Q16. Как установить в запросе условия отбора по значению поля в форме? |
A. В запросе в условие для поля указать ссылку на поле формы в виде - Forms![Имя_Формы]![Поле] в SQL это будет выглядеть так: Select * from Таблица where [поле] = Forms![Имя_Формы]![Поле] Для корректной работы форма должна быть открыта |
Q17. Запрос не выполняется, методом Execute выдает ошибку: "Предполагаемое число параметров: 1. Было задано параметров: 0."? При запуске с закладки «Запросы» работает нормально.? |
A. Скорее всего в запросе используются ссылки на данные содержащиеся в полях фомы. При выполнении запроса непосредственно из окна ACCESS запрос выполняется с помощью JET, JET являясь движком ACCESS "знает" о наличии форм и пытается найти эти поля и подставить значения. При выполенни запроса методом EXECUTE, запрос выполнияе DAO, DAO являясь внешней библиотекой ничего не "знает" о формах ACCESS, по этому все недостающие значения попадают в коллекцию PARAMETERS данного запроса, значения которым надо присваивать до выполения запроса (см. HELP по PARAMETERS) или воспользоваться процедурой: Public Sub ExQueryWParam(strNameQDF As String) Dim qdf As QueryDef Dim param As Parameter Set qdf = CurrentDb.QueryDefs(strNameQDF) For Each param In qdf.Parameters param = Eval(param.Name) Next qdf.Execute End Sub | |
Q18. Как объединить поле из нескольких строк запроса в одно поле? |
A. www.hiprog.com/index.php?option=com_content&task=view&id=334&Itemid=35 |
Q19. Как подсчитать количество записей в таблице? |
A. DCount("*","ИмяТаблицы") - вернет число записей в таблице DCount("*","ИмяТаблицы", "[Поле1] = 10") - вернет число записей в таблице у которых значение поля "Поле1" равно 10 |
Q20. Как удалить таблицу? |
A. Вариант 1. DoCmd.DeleteObject acTable, "Таблица1" Вариант 2. Currentdb().Tabledefs.delete("Таблица1") |
Q21. Как очистить таблицу? |
A. Currentdb().execute ("delete * from Таблица1") |
Q22. Как вызвать диалог открытия файла? |
A. Вариант 1 (WIN32 API): www.hiprog.com/index.php?option=com_content&task=view&id=279&Itemid=35 Вариант 2 ( для MSAXP и выше) : Dim dlgOpen As FileDialog Set dlgOpen = Application. FileDialog ( msoFileDialogOpen) With dlgOpen .AllowMultiSelect = True .Show End With | |
Q23. Как скрыть вводимые символы в поле ввода пароля? |
A. Для этого надо щёлкнуть правой кнопкой мыши по полю. Откроется окно свойств, там на вкладке Данные в строке Маска ввода щелкнуть левой кнопкой мыши по кнопке, откроется окно, в котором выберете «Маска ввода – Пароль Вид данных - ********» |
Q24. Как убрать нижнюю пустую строку в ленточной (табличной) форме? |
A.Чтобы убрать нижнюю пустую строку в форме: 1. перевести форму в режим конструктора 2. правой кнопкой мыши щёлкнуть по форме 3. в открывшимся окне выбрать вкладку Данные 4. в строке Разрешить добавление выбрать НЕТ. |
Все приведенные ответы найдены в HELP, недрах всемирной паутины и на форумах по ACCESS Спасибо Кузину Михайлу, за помощь в созданиии данного FAQ |