|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Я имел в виду те значения, которые визуально выбираются в окне свойств. :^) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2003, 13:51 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
2 ВС Тогда RowSource = 1;"one";2;"two";3;"three" :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2003, 14:32 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Все, последняя версия. Отдаю в факи. 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.
А не через таблицу - отличия следующие: Код: plaintext 1. 2.
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2004, 17:54 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
2ВС Только выдели, пожалуйста, Q: Текст вопроса А: жирным шрифтом, а то вопросы между собой сливаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2004, 18:53 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Да, сделаю. И еще сделаю список вопросов в начале. И пронумерую их. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2004, 19:06 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Q: Обработчик события KeyDown берет старые значения полей. A: Вместо KeyDown используй KeyUp. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2004, 19:22 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Эххх Q: На некоторых машинах обработчик события ListBox_OnAfterUpdate берет старые значения ListBox.Column(...) A: Ы? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2004, 19:41 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Лох 14 октября писал:Или ты из FAQ первое слово протерял по дороге? А если серьезно, то предлагаю это обсудить в отдельном топике. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.01.2004, 19:46 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Q: Не могу заставить форму всегда открываться в режиме Maximized (вариант: Restored). A: Для Restored можно задать свойство PopUp=True. Для Maximized сложнее: Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.01.2004, 14:59 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Про импорт из Экселя отбой, это не работает. Зато: Q: Команда SQL не видит переменных. A1: Зато видит функции. Можно сделать функцию, которая будет возвращать значение переменной. A2: Можно формировать команду SQL программно и вставлять туда значения переменных как константы. Подробнее: http://www.sql.ru/faq/faq_topic.aspx?fid=157 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2004, 15:55 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Q: В перекрестном запросе не удается соблюсти постоянный порядок и количество столбцов. A: Добавь в конец селекта запроса in ("two","three","one"), где в скобках перечислены столбцы в нужном порядке. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2004, 15:19 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2004, 16:34 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Q: Не работают параметры командной строки, напр. /excl и т.д. A: Командная строка должна начинаться с ...msaccess.exe, и только потом название файла и все параметры. Без msaccess.exe эти параметры никому не нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2004, 14:13 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Q: Не работает проверка на равенство/неравенство. A: Если одно из сравниваемых значений Null, то любое выражение с ним вернет Null (который приравнивается к False). Чтобы этого избежать, можно пользоваться функцией IsNull, которая в соответствующем случае возвращает True. P.S. Этот вопрос можно соединить с вопросом про проверку равенства нецелых чисел. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2004, 22:23 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Обнаружил следующий баг. Сделал у себя в проекте стартовую форму всплывающей и развернул на все окно. Достаточно красиво смотрится и юзер лишних менюшек не видит ;-) В связи с этим все формы и отчеты так же пришлось сделать всплывающими, а некоторые и модальными. И вдруг (я честно говоря сразу не врубился в причину - случайно обнаружил) после печати отчета на принтере, Акцесс стал вываливаться с сообщением "Обнаружена ошибка..." и предлагать отправить репорт сами знаете куда... Декомпайлил, переставлял офис, создавал новый проект (ADP, кстати) и импортировал все из старого - по барабану :(( Создал новый отчет и перетягивал туда кусочками из старого. Начало работать - я решил что какой то глюк отчета. Все нормально, собираюсь уходить и вдруг обнаруживаю, что я забыл отчет сделать всплывающим (я его и для предпросмотра использую). Исправляю "ошибку" и что за чудо - опять после печати вываливаемся :(( Короче, сделал я для предпросмотра всплывающий отчет, а для печати обычный и теперь все работает на ура. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2004, 11:20 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Q: У меня есть логическое поле. Хочу выдать записи, в которых оно отмечено. Пишу в запросе: WHERE этополе=1 - и запрос не работает. A: Логическое True - это не 1, а -1. (Кстати, если просто написать WHERE этополе, то тоже будет работать, причем если поле не логическое, то будут выданы все записи, где значение этого поля не 0.) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2004, 15:17 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Q: Составляю условие WHERE (или любую другую часть селекта, или селект полностью, и вообще любую команду SQL) как стринг, собирая его/ее из значений переменных, контролов и т.д. Не работает. A: Первым делом остановись в дебаггере и посмотри на полученный стринг. Если и после этого не станет ясно, что не так, то попробуй запустить его как сохраненный запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2004, 17:10 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Q: У меня переменная X имеет значение Null. Но я пишу If X = Null Then и получаю False. A: Любое выражение, включающее в себя Null, дает Null. При преобразовании к логическому типу Null превращается в False. Чтобы проверить переменную на Null, надо писать If IsNull(X) Then. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2004, 15:14 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Не любое поле, включающее Null, дает Null. Пример: "x" & Null & "y" даст "xy" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2004, 06:15 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Согласен. Только это не "не любое поле", а "не любая операция". Операция & действительно работает иначе. Если A - значение, которое может быть либо строкой, либо Null'ом (например, поле строкового типа), то: A + "zzz" -> если в A сидит Null, то получится Null A & "zzz" -> если в A сидит Null, то получится "zzz" На этом основан следующий трюк: (A + ",") & (B + ",") & (C + ",") Если какое-то из значений A, B, C равно Null, то вся соответствующая скобка даст Null и соответствующая запятая будет уничтожена, а затем соединение через & возьмет только те слагаемые, где не Null. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2004, 13:45 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Q: Не могу сделать контролу Visible=False (варианты: Enabled=False, Locked=True). Аксесс говорит, что на этом контроле фокус. A: Значит надо сначала перевести фокус на другой контрол: c.SetFocus Если нет контрола, который заведомо в любой ситуации сможет принять фокус, то его можно создать: либо CommandButton со свойством Transparent=True, либо OptionGroup со свойством BorderStyle=Transparent. Юзер его не заметит. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.04.2004, 02:24 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Новый вариант вопроса/ответа про перевернутые даты. Q: Аксесс переворачивает даты, меняет местами день и месяц. Вариант: неверно срабатывают вычисления или проверки, связанные с датами. A: Возможно, дата была записана в строковой переменной (вариант: использована строковая функция Date$ либо текстбокс, не привязанный к полю типа Date/Time). Строка, содержащая даты, интерпретируется Аксессом на основании нескольких правил, в которые входят синтаксис команд SQL (где нужно писать #MM/DD/YY#) и региональные настройки Windows. Надо знать, где и как это работает, а при возможности избегать записи дат в строках. Во многих случаях помогает функция DateSerial. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2004, 22:33 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
Самый-самый последний вариант. Вопросы. 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.
А не через таблицу - отличия следующие: Код: plaintext 1. 2.
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.
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. Юзер его не заметит. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 16:19 |
|
FAQ. А почему у меня перестало работать...
|
|||
---|---|---|---|
#18+
к q6 можно дать ссылку на длинный топик "Округление", к q24 можно дать ссылку на faq Sfagnum'а. А вообще (имхо) лучше бы как-то разбить его на подразделы (м.б. даже в разные faq'и). Хотя бы vba/запросы... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2004, 16:35 |
|
|
start [/forum/topic.php?fid=45&msg=32394684&tid=1672653]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 193ms |
0 / 0 |