powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / FAQ. А почему у меня перестало работать...
25 сообщений из 225, страница 8 из 9
FAQ. А почему у меня перестало работать...
    #32351845
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я имел в виду те значения, которые визуально выбираются в окне свойств. :^)
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32351860
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ВС
Тогда
RowSource = 1;"one";2;"two";3;"three"
:)
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32371887
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Все, последняя версия. Отдаю в факи.

Q: Перестали распознаваться служебные слова, такие как Left, Right, Database и т.д.

A1: Проверь, не слетели ли ссылки. Из окна открытого модуля Tools -> References.

http://www.firststeps.ru/vba/excel/r.php?41

В частности, может слететь следующая ссылка:

Visual Basic for Applications

А вообще, слово MISSING у любой из ссылок может привести к такому эффекту. Надо либо снять птичку у ссылки с MISSING (если эта ссылка не нужна для работы программы), либо перенаправить ее на файл, который действительно существует.

A2: Если в региональных настройках Windows в качестве разделителя списков задана не запятая, а, скажем, точка с запятой, то при обращении к функциям надо ставить между аргументами именно этот разделитель (если обращение находится в запросе, в свойствах контрола и т.п., а не в модуле).

A3: В качестве имени переменной могло случайно оказаться взято служебное слово. Такую переменную желательно переименовать.

Q: Ставлю MsgBox - работает. Убираю - не работает.

A: Поставь DoEvents вместо MsgBox.

Q: Вылазит сообщение: Expected variable or procedure, not module.

A: Начиная с Access 95, запрещено давать модулям имена, совпадающие с названиями переменных и процедур, а также со служебными словами. Если при компиляции появилось такое сообщение - значит, среди модулей попался такой, имя которого совпадает с чем-то в той строке, на которую Аксесс кричит. Его надо переименовать.

Q: Начинается совершенно непонятное поведение mdb.

A: Скорее всего файл испортился. Надо попробовать его починить. Много способов починки можно увидеть, если запустить поиск по форуму на слово JetComp.

Q: Пишу программу на VBA, и при этом все дрожит, недописанная строка красится красным, как содержащая ошибку, курсор сам перескакивает по строке куда вздумается, сами расставляются пробелы и большие буквы и т.д.

A: У одной из открытых форм работает таймер.

Q: Почему неправильно работает округление?

A: Существует много методов округления. Функция Round округляет по своим правилам, которые могут отличаться от нужных. Поэтому лучше округлять явным образом, осознавая, что именно делает программа.

Q: Не помогают f.Recalc, f.Refresh, f.Requery, f.Repaint, где f - форма.

A: Поможет f.RecordSource = f.RecordSource.

Q: В Аксессе 2002 кнопка "Создание MDE файла" не активна.

A: Файл mdb создан в формате Аксесса 2000. Его надо преобразовать в формат 2002.

Q: Не удается создать файл mde.

A: Скорее всего есть ошибки компиляции. Попробуй откомпилировать программу. Из окна модуля Debug -> Compile.

Q: Не удается уложиться в синтаксис SQL либо VBA, потому что имя таблицы, поля, формы и т.д. содержит нехорошие символы, типа пробелов или минусов.

A: Заключи это имя в квадратные скобки.

Q: База данных перестала сжиматься (с диагностикой: таблица АБВГДТабле already exists).

A: Это мягкий вариант порчи базы. Скорее всего ты скопировал базу во время работы пользователей. Лечение - импорт в новую базу.

Q: Я написал/а программу, а она не работает.

A: Ищи баг. Ставь точки останова, проверяй значения переменных, ну в общем как большой/ая.

Q: На команды с объектом Recordset выдается ошибка о несоответствии типов.

A: Пиши не просто Recordset, а DAO.Recordset.

Q: Не работает событие OnOpen подчиненного отчета.

A: Можно все содержимое OnOpen перенести в какое-нибудь событие родительского отчета, например в OnFormat его Header'а.

Q: При импорте из Экселя тип данных распознается неправильно.

A: Самое быстрое: добавить в Экселе первую строчку с данными правильного типа, произвести импорт, а потом эту лишнюю строчку стереть.

Q: Не работает обращение к процедуре, которое я пишу так:

MySub (x, y) - тут выдается ошибка компиляции
MySub (x) - тут почему-то параметр передается по значению, а не по ссылке

A: Правильный синтаксис выглядит так:

Call MySub(x, y)
MySub x, y
a = MyFun(x, y)

Все скобки кроме этих воспринимаются как часть самого параметра.

Q: Плохо работает программа, в которой используется свойство текстбокса или комбобокса Text.

A: Свойство Text доступно только тогда, когда этот текстбокс или комбобокс находится в фокусе. Чтобы программа работала всегда, надо пользоваться не свойством Text, а:

у текстбокса - свойством Value (которое является свойством по умолчанию, следовательно можно вообще это слово опустить вместе с предшествующей точкой);

у комбобокса - свойством Column(номерколонки).

Q: Я так расставил галки в настройках аппликации, что мне теперь самому не добраться до меню Аксесса.

A: Открой пустой Аксесс, а потом внутри него открой свою аппликацию, придерживая клавишу Shift. Если есть пароль, то держать Shift надо после ввода пароля в момент нажатия на Enter (или кнопку OK).

Q: Аксесс переворачивает даты, меняет местами день и месяц.

A: Значит, дата была записана в строковой переменной (вариант: использована строковая функция Date$). Строка, содержащая даты, интерпретируется Аксессом на основании нескольких правил, в которые входят синтаксис команд SQL (где нужно писать #MM/DD/YY#) и региональные настройки Windows. Надо знать, где и как это работает, а при возможности избегать записи дат в строках. Во многих случаях помогает функция DateSerial.

Q: Аксесс не признает два равных числа как равные.

A: Проверка на равенство допускается только для целочисленных типов данных (в которые входит и тип Currency, который хранится в памяти как целое число сотых). Типы с дробной частью (кроме Currency) хранятся приблизительно, и даже если визуально два числа кажутся равными, их внутреннее представление может отличаться. Для таких чисел надо проверять не A=B, а Abs(A-B)<eps, где eps - какое-нибудь достаточно малое число. Внимание: важно, какого типа данные, а не как задан формат для их отображения в таблице или форме.

Q: Не могу настроить комбобокс.

A: Вот простейший случай:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
RowSourceType = Table/Query
RowSource = select a, b from t
    - где сначала названо поле с кодом (которое будет заноситься в таблицу),
    а потом поле с текстом (которое будет показываться)
BoundColumn =  1 
LimitToList = Yes
ColumnCount =  2 
ColumnWidths =  0 ; 3 
    - главное, чтобы у первой колонки ширина была  0 

А не через таблицу - отличия следующие:

Код: plaintext
1.
2.
RowSourceType = Value List
RowSource =  1 ; "one" ; 2 ; "two" ; 3 ; "three" 

Q: Выскакивает длинное сообщение, в котором в числе прочего имеется следующий текст: The expression may not result in the name of a macro, name of a user-defined function, or [Event Procedure].

A1: Возможно, Аксессу не нравится то, что написано в одном из свойств, описывающих события.

A2: Возможно, отлетела какая-нибудь ссылка.

A3: Возможно, один из контролов или одна из секций формы содержит в своем имени символы национального алфавита, которые не поддерживаются текущей версией Аксесса или Windows.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32371959
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ВС
Только выдели, пожалуйста,

Q: Текст вопроса

А: жирным шрифтом, а то вопросы между собой сливаются.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32371972
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Да, сделаю. И еще сделаю список вопросов в начале. И пронумерую их.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32371991
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Q: Обработчик события KeyDown берет старые значения полей.

A: Вместо KeyDown используй KeyUp.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32371998
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эххх

Q: На некоторых машинах обработчик события ListBox_OnAfterUpdate берет старые значения ListBox.Column(...)
A: Ы?
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32372000
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Лох 14 октября писал:Или ты из FAQ первое слово протерял по дороге?
А если серьезно, то предлагаю это обсудить в отдельном топике.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32372227
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Q: Не могу заставить форму всегда открываться в режиме Maximized (вариант: Restored).

A: Для Restored можно задать свойство PopUp=True. Для Maximized сложнее:

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Form_Activate()
DoCmd.Maximize
End Sub
Private Sub Form_Deactivate()
DoCmd.Restore
End Sub
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32380583
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Про импорт из Экселя отбой, это не работает. Зато:

Q: Команда SQL не видит переменных.

A1: Зато видит функции. Можно сделать функцию, которая будет возвращать значение переменной.

A2: Можно формировать команду SQL программно и вставлять туда значения переменных как константы. Подробнее: http://www.sql.ru/faq/faq_topic.aspx?fid=157
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32386907
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Q: В перекрестном запросе не удается соблюсти постоянный порядок и количество столбцов.

A: Добавь в конец селекта запроса in ("two","three","one"), где в скобках перечислены столбцы в нужном порядке.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32394684
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Q: Не работает запрос с двумя джойнами:
select * from A left join B on A.A=B.B left join C on A.A=C.C

A: В Аксессе надо в таких запросах ставить скобки:
select * from ( A left join B on A.A=B.B ) left join C on A.A=C.C
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32402751
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Q: Не работают параметры командной строки, напр. /excl и т.д.

A: Командная строка должна начинаться с ...msaccess.exe, и только потом название файла и все параметры. Без msaccess.exe эти параметры никому не нужны.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32404882
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Q: Не работает проверка на равенство/неравенство.

A: Если одно из сравниваемых значений Null, то любое выражение с ним вернет Null (который приравнивается к False). Чтобы этого избежать, можно пользоваться функцией IsNull, которая в соответствующем случае возвращает True.

P.S. Этот вопрос можно соединить с вопросом про проверку равенства нецелых чисел.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32437524
Odess
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обнаружил следующий баг.

Сделал у себя в проекте стартовую форму всплывающей и развернул на все окно. Достаточно красиво смотрится и юзер лишних менюшек не видит ;-)
В связи с этим все формы и отчеты так же пришлось сделать всплывающими, а некоторые и модальными.
И вдруг (я честно говоря сразу не врубился в причину - случайно обнаружил) после печати отчета на принтере, Акцесс стал вываливаться с сообщением "Обнаружена ошибка..." и предлагать отправить репорт сами знаете куда...
Декомпайлил, переставлял офис, создавал новый проект (ADP, кстати) и импортировал все из старого - по барабану :((
Создал новый отчет и перетягивал туда кусочками из старого. Начало работать - я решил что какой то глюк отчета. Все нормально, собираюсь уходить и вдруг обнаруживаю, что я забыл отчет сделать всплывающим (я его и для предпросмотра использую). Исправляю "ошибку" и что за чудо - опять после печати вываливаемся :((

Короче, сделал я для предпросмотра всплывающий отчет, а для печати обычный и теперь все работает на ура.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32449474
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Q: У меня есть логическое поле. Хочу выдать записи, в которых оно отмечено. Пишу в запросе:
WHERE этополе=1
- и запрос не работает.

A: Логическое True - это не 1, а -1. (Кстати, если просто написать WHERE этополе, то тоже будет работать, причем если поле не логическое, то будут выданы все записи, где значение этого поля не 0.)
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32449816
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Q: Составляю условие WHERE (или любую другую часть селекта, или селект полностью, и вообще любую команду SQL) как стринг, собирая его/ее из значений переменных, контролов и т.д. Не работает.

A: Первым делом остановись в дебаггере и посмотри на полученный стринг. Если и после этого не станет ясно, что не так, то попробуй запустить его как сохраненный запрос.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32476778
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Q: У меня переменная X имеет значение Null. Но я пишу If X = Null Then и получаю False.

A: Любое выражение, включающее в себя Null, дает Null. При преобразовании к логическому типу Null превращается в False. Чтобы проверить переменную на Null, надо писать If IsNull(X) Then.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32476955
aleks2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не любое поле, включающее Null, дает Null. Пример:

"x" & Null & "y"

даст

"xy"
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32477483
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Согласен. Только это не "не любое поле", а "не любая операция". Операция & действительно работает иначе. Если A - значение, которое может быть либо строкой, либо Null'ом (например, поле строкового типа), то:

A + "zzz" -> если в A сидит Null, то получится Null
A & "zzz" -> если в A сидит Null, то получится "zzz"

На этом основан следующий трюк:

(A + ",") & (B + ",") & (C + ",")

Если какое-то из значений A, B, C равно Null, то вся соответствующая скобка даст Null и соответствующая запятая будет уничтожена, а затем соединение через & возьмет только те слагаемые, где не Null.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32487094
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Q: Не могу сделать контролу Visible=False (варианты: Enabled=False, Locked=True). Аксесс говорит, что на этом контроле фокус.

A: Значит надо сначала перевести фокус на другой контрол:

c.SetFocus

Если нет контрола, который заведомо в любой ситуации сможет принять фокус, то его можно создать: либо CommandButton со свойством Transparent=True, либо OptionGroup со свойством BorderStyle=Transparent. Юзер его не заметит.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32492936
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Новый вариант вопроса/ответа про перевернутые даты.

Q: Аксесс переворачивает даты, меняет местами день и месяц. Вариант: неверно срабатывают вычисления или проверки, связанные с датами.

A: Возможно, дата была записана в строковой переменной (вариант: использована строковая функция Date$ либо текстбокс, не привязанный к полю типа Date/Time). Строка, содержащая даты, интерпретируется Аксессом на основании нескольких правил, в которые входят синтаксис команд SQL (где нужно писать #MM/DD/YY#) и региональные настройки Windows. Надо знать, где и как это работает, а при возможности избегать записи дат в строках. Во многих случаях помогает функция DateSerial.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32504837
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Самый-самый последний вариант.

Вопросы.

Q1: Перестали распознаваться служебные слова, такие как Left, Right, Database и т.д.

Q2: Ставлю MsgBox - работает. Убираю - не работает.

Q3: Вылазит сообщение: Expected variable or procedure, not module.

Q4: Начинается совершенно непонятное поведение mdb.

Q5: Пишу программу на VBA, и при этом все дрожит, недописанная строка красится красным, как содержащая ошибку, курсор сам перескакивает по строке куда вздумается, сами расставляются пробелы и большие буквы и т.д.

Q6: Почему неправильно работает округление?

Q7: Не помогают f.Recalc, f.Refresh, f.Requery, f.Repaint, где f - форма.

Q8: В Аксессе 2002 кнопка "Создание MDE файла" не активна.

Q9: Не удается создать файл mde.

Q10: Не удается уложиться в синтаксис SQL либо VBA, потому что имя таблицы, поля, формы и т.д. содержит нехорошие символы, типа пробелов или минусов.

Q11: База данных перестала сжиматься (с диагностикой: таблица АБВГДТабле already exists).

Q12: Я написал/а программу, а она не работает.

Q13: На команды с объектом Recordset выдается ошибка о несоответствии типов.

Q14: Не работает событие OnOpen подчиненного отчета.

Q15: Не работает обращение к процедуре, которое я пишу так:
MySub (x, y) - тут выдается ошибка компиляции
MySub (x) - тут почему-то параметр передается по значению, а не по ссылке

Q16: Плохо работает программа, в которой используется свойство текстбокса или комбобокса Text.

Q17: Я так расставил галки в настройках аппликации, что мне теперь самому не добраться до меню Аксесса.

Q18: Аксесс переворачивает даты, меняет местами день и месяц. Вариант: неверно срабатывают вычисления или проверки, связанные с датами.

Q19: Не работает проверка на равенство/неравенство.

Q20: Не могу настроить комбобокс.

Q21: Выскакивает длинное сообщение, в котором в числе прочего имеется следующий текст: The expression may not result in the name of a macro, name of a user-defined function, or [Event Procedure].

Q22: Обработчик события KeyDown берет старые значения полей.

Q23: Не могу заставить форму всегда открываться в режиме Maximized (вариант: Restored).

Q24: Команда SQL не видит переменных.

Q25: В перекрестном запросе не удается соблюсти постоянный порядок и количество столбцов.

Q26: Не работает запрос с двумя джойнами:
select * from A left join B on A.A=B.B left join C on A.A=C.C

Q27: Не работают параметры командной строки, напр. /excl и т.д.

Q28: У меня есть логическое поле. Хочу выдать записи, в которых оно отмечено. Пишу в запросе:
WHERE этополе=1
- и запрос не работает.

Q29: Составляю условие WHERE (или любую другую часть селекта, или селект полностью, и вообще любую команду SQL) как стринг, собирая его/ее из значений переменных, контролов и т.д. Не работает.

Q30: Не могу сделать контролу Visible=False (варианты: Enabled=False, Locked=True). Аксесс говорит, что на этом контроле фокус.

Вопросы с ответами.

Q1: Перестали распознаваться служебные слова, такие как Left, Right, Database и т.д.

A1: Проверь, не слетели ли ссылки. Из окна открытого модуля Tools -> References.

http://www.firststeps.ru/vba/excel/r.php?41

В частности, может слететь следующая ссылка:

Visual Basic for Applications

А вообще, слово MISSING у любой из ссылок может привести к такому эффекту. Надо либо снять птичку у ссылки с MISSING (если эта ссылка не нужна для работы программы), либо перенаправить ее на файл, который действительно существует.

A2: Если в региональных настройках Windows в качестве разделителя списков задана не запятая, а, скажем, точка с запятой, то при обращении к функциям надо ставить между аргументами именно этот разделитель (если обращение находится в запросе, в свойствах контрола и т.п., а не в модуле).

A3: В качестве имени переменной могло случайно оказаться взято служебное слово. Такую переменную желательно переименовать.

Q2: Ставлю MsgBox - работает. Убираю - не работает.

A: Поставь DoEvents вместо MsgBox.

Q3: Вылазит сообщение: Expected variable or procedure, not module.

A: Начиная с Access 95, запрещено давать модулям имена, совпадающие с названиями переменных и процедур, а также со служебными словами. Если при компиляции появилось такое сообщение - значит, среди модулей попался такой, имя которого совпадает с чем-то в той строке, на которую Аксесс кричит. Его надо переименовать.

Q4: Начинается совершенно непонятное поведение mdb.

A: Скорее всего файл испортился. Надо попробовать его починить. Много способов починки можно увидеть, если запустить поиск по форуму на слово JetComp.

Q5: Пишу программу на VBA, и при этом все дрожит, недописанная строка красится красным, как содержащая ошибку, курсор сам перескакивает по строке куда вздумается, сами расставляются пробелы и большие буквы и т.д.

A: У одной из открытых форм работает таймер.

Q6: Почему неправильно работает округление?

A: Существует много методов округления. Функция Round округляет по своим правилам, которые могут отличаться от нужных. Поэтому лучше округлять явным образом, осознавая, что именно делает программа.

Q7: Не помогают f.Recalc, f.Refresh, f.Requery, f.Repaint, где f - форма.

A: Поможет f.RecordSource = f.RecordSource.

Q8: В Аксессе 2002 кнопка "Создание MDE файла" не активна.

A: Файл mdb создан в формате Аксесса 2000. Его надо преобразовать в формат 2002.

Q9: Не удается создать файл mde.

A: Скорее всего есть ошибки компиляции. Попробуй откомпилировать программу. Из окна модуля Debug -> Compile.

Q10: Не удается уложиться в синтаксис SQL либо VBA, потому что имя таблицы, поля, формы и т.д. содержит нехорошие символы, типа пробелов или минусов.

A: Заключи это имя в квадратные скобки.

Q11: База данных перестала сжиматься (с диагностикой: таблица АБВГДТабле already exists).

A: Это мягкий вариант порчи базы. Скорее всего ты скопировал базу во время работы пользователей. Лечение - импорт в новую базу.

Q12: Я написал/а программу, а она не работает.

A: Ищи баг. Ставь точки останова, проверяй значения переменных, ну в общем как большой/ая.

Q13: На команды с объектом Recordset выдается ошибка о несоответствии типов.

A: Пиши не просто Recordset, а DAO.Recordset.

Q14: Не работает событие OnOpen подчиненного отчета.

A: Можно все содержимое OnOpen перенести в какое-нибудь событие родительского отчета, например в OnFormat его Header'а.

Q15: Не работает обращение к процедуре, которое я пишу так:
MySub (x, y) - тут выдается ошибка компиляции
MySub (x) - тут почему-то параметр передается по значению, а не по ссылке


A: Правильный синтаксис выглядит так:

Call MySub(x, y)
MySub x, y
a = MyFun(x, y)

Все скобки кроме этих воспринимаются как часть самого параметра.

Q16: Плохо работает программа, в которой используется свойство текстбокса или комбобокса Text.

A: Свойство Text доступно только тогда, когда этот текстбокс или комбобокс находится в фокусе. Чтобы программа работала всегда, надо пользоваться не свойством Text, а:

у текстбокса - свойством Value (которое является свойством по умолчанию, следовательно можно вообще это слово опустить вместе с предшествующей точкой);

у комбобокса - свойством Column(номерколонки).

Q17: Я так расставил галки в настройках аппликации, что мне теперь самому не добраться до меню Аксесса.

A: Открой пустой Аксесс, а потом внутри него открой свою аппликацию, придерживая клавишу Shift. Если есть пароль, то держать Shift надо после ввода пароля в момент нажатия на Enter (или кнопку OK).

Q18: Аксесс переворачивает даты, меняет местами день и месяц. Вариант: неверно срабатывают вычисления или проверки, связанные с датами.

A: Возможно, дата была записана в строковой переменной (вариант: использована строковая функция Date$ либо текстбокс, не привязанный к полю типа Date/Time). Строка, содержащая даты, интерпретируется Аксессом на основании нескольких правил, в которые входят синтаксис команд SQL (где нужно писать #MM/DD/YY#) и региональные настройки Windows. Надо знать, где и как это работает, а при возможности избегать записи дат в строках. Во многих случаях помогает функция DateSerial.

Q19: Не работает проверка на равенство/неравенство.

A1: Проверка на равенство допускается только для целочисленных типов данных (в которые входит и тип Currency, который хранится в памяти как целое число сотых). Типы с дробной частью (кроме Currency) хранятся приблизительно, и даже если визуально два числа кажутся равными, их внутреннее представление может отличаться. Для таких чисел надо проверять не A=B, а Abs(A-B)<eps, где eps - какое-нибудь достаточно малое число. Внимание: важно, какого типа данные, а не как задан формат для их отображения в таблице или форме.

A2: Если одно из сравниваемых значений Null, то любое выражение с ним вернет Null (который приравнивается к False). Чтобы этого избежать, можно пользоваться функцией IsNull, которая в соответствующем случае возвращает True.

Примечание. Операция & работает иначе. Если A - значение, которое может быть либо строкой, либо Null'ом (например, поле строкового типа), то:

A + "zzz" -> если в A сидит Null, то получится Null
A & "zzz" -> если в A сидит Null, то получится "zzz"

На этом основан следующий трюк:

(A + ",") & (B + ",") & (C + ",")

Если какое-то из значений A, B, C равно Null, то вся соответствующая скобка даст Null и соответствующая запятая будет уничтожена, а затем соединение через & возьмет только те слагаемые, где не Null.

Q20: Не могу настроить комбобокс.

A: Вот простейший случай:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
RowSourceType = Table/Query
RowSource = select a, b from t
    - где сначала названо поле с кодом (которое будет заноситься в таблицу),
    а потом поле с текстом (которое будет показываться)
BoundColumn =  1 
LimitToList = Yes
ColumnCount =  2 
ColumnWidths =  0 ; 3 
    - главное, чтобы у первой колонки ширина была  0 

А не через таблицу - отличия следующие:

Код: plaintext
1.
2.
RowSourceType = Value List
RowSource =  1 ;"one"; 2 ;"two"; 3 ;"three"

Q21: Выскакивает длинное сообщение, в котором в числе прочего имеется следующий текст: The expression may not result in the name of a macro, name of a user-defined function, or [Event Procedure].

A1: Возможно, Аксессу не нравится то, что написано в одном из свойств, описывающих события.

A2: Возможно, отлетела какая-нибудь ссылка.

A3: Возможно, один из контролов или одна из секций формы содержит в своем имени символы национального алфавита, которые не поддерживаются текущей версией Аксесса или Windows.

Q22: Обработчик события KeyDown берет старые значения полей.

A: Вместо KeyDown используй KeyUp.

Q23: Не могу заставить форму всегда открываться в режиме Maximized (вариант: Restored).

A: Для Restored можно задать свойство PopUp=True. Для Maximized сложнее:

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Form_Activate()
DoCmd.Maximize
End Sub
Private Sub Form_Deactivate()
DoCmd.Restore
End Sub

Q24: Команда SQL не видит переменных.

A1: Зато видит функции. Можно сделать функцию, которая будет возвращать значение переменной.

A2: Можно формировать команду SQL программно и вставлять туда значения переменных как константы. Подробнее: http://www.sql.ru/faq/faq_topic.aspx?fid=157

Q25: В перекрестном запросе не удается соблюсти постоянный порядок и количество столбцов.

A: Добавь в конец селекта запроса in ("two","three","one"), где в скобках перечислены столбцы в нужном порядке.

Q26: Не работает запрос с двумя джойнами:
select * from A left join B on A.A=B.B left join C on A.A=C.C


A: В Аксессе надо в таких запросах ставить скобки:
select * from ( A left join B on A.A=B.B ) left join C on A.A=C.C

Q27: Не работают параметры командной строки, напр. /excl и т.д.

A: Командная строка должна начинаться с ...msaccess.exe, и только потом название файла и все параметры. Без msaccess.exe эти параметры никому не нужны.

Q28: У меня есть логическое поле. Хочу выдать записи, в которых оно отмечено. Пишу в запросе:
WHERE этополе=1
- и запрос не работает.


A: Логическое True - это не 1, а -1. (Кстати, если просто написать WHERE этополе, то тоже будет работать, причем если поле не логическое, то будут выданы все записи, где значение этого поля не 0.)

Q29: Составляю условие WHERE (или любую другую часть селекта, или селект полностью, и вообще любую команду SQL) как стринг, собирая его/ее из значений переменных, контролов и т.д. Не работает.

A: Первым делом остановись в дебаггере и посмотри на полученный стринг. Если и после этого не станет ясно, что не так, то попробуй запустить его как сохраненный запрос.

Q30: Не могу сделать контролу Visible=False (варианты: Enabled=False, Locked=True). Аксесс говорит, что на этом контроле фокус.

A: Значит надо сначала перевести фокус на другой контрол:

c.SetFocus

Если нет контрола, который заведомо в любой ситуации сможет принять фокус, то его можно создать: либо CommandButton со свойством Transparent=True, либо OptionGroup со свойством BorderStyle=Transparent. Юзер его не заметит.
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32504879
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к q6 можно дать ссылку на длинный топик "Округление",
к q24 можно дать ссылку на faq Sfagnum'а.

А вообще (имхо) лучше бы как-то разбить его на подразделы (м.б. даже в разные faq'и). Хотя бы vba/запросы...
...
Рейтинг: 0 / 0
FAQ. А почему у меня перестало работать...
    #32504894
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е не q24, а q29
...
Рейтинг: 0 / 0
25 сообщений из 225, страница 8 из 9
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / FAQ. А почему у меня перестало работать...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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