Rambler's Top100
Российский фонд помощи
Навигация
Главная
MS ACCESS
VB
ASP
PHP
Наши друзья
Поиск
Форум
Лента новостей
Новый сайт

Online
Сейчас на сайте находятся:
1 гость
Рассылки Subscribe.Ru
Работа с MS Access
Подписаться письмом
Реклама на сайте
 
Главная arrow MS ACCESS arrow FAQ по MS ACCESS
FAQ по MS ACCESS


FAQ по ACCESS
Автор osmor   
25.07.2005 г.


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

Коментарии (4) | Просмотров: 12317

 
Реклама на сайте
HiProg.com - Технологии программирования
Rambler's Top100 TopList