|
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 |