Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9 10 .. 15   вперед  Ctrl
 Баги Access (топик не закрыт, можно добавлять)  [new]
Geo
Member

Откуда:
Сообщений: 6873
Предлагаю сюда собирать известные "дырки" акцессе(-ах), а-ля
if me.mysubform.mycheckbox then
(кстати, кто ее щупал, поделитесь :)
Наверняка, эта информация могла бы многим пригодится...

Просьбы к пишущим:
1. Указывать версию(и) Access, где замечена ошибка, используемые библиотеки (ADO/DAO и т.п.) и версии иных программ, если надо.
2. Указывать гарантированный (ну или почти) способ ее получения.
3. По возможности указывать способы борьбы или обхода.

И от себя первый, который пришел на ум (последний, с которым встречался).
--------------------------------------------------------------------
Access 2002 SP3, SQL Server 2000 DE SP3, ADP

Ошибка:
Создаем на сервере таблицу с полем типа bit.
Создаем в проекте форму (Форма1) с флажком. Источник данных формы - созданная таблица, флажка - созданное в ней поле.
Выполняем команду
Forms("Форма1").recordset.resync
или
Forms("Форма1").recordset.resync adAffectCurrent, adResyncAllValues
Щелкаем по флажку.
Получаем "приложение выполнило недопустимую операцию, будет закрыто" и т.д.
С полями иного типа акцесс может выпасть после нескольких resync'ов в процессе редактирования записи.

Лечение:
Вместо
Forms("Форма1").recordset.resync
надо писать
dim t as long
dim c as access.control
c = forms("Форма1").ActiveControl 
t = nz(Forms("Форма1")("id"),0)
on error resume next
docmd.echo false
Forms("Форма1").requery
' если поле id невидимо или выключено сделать его видимым и включенным'
Forms("Форма1")("id").setFocus
docmd.gotorecord ,,acLast
DoCmd.FindRecord t, acEntire, , acSearchAll, , acCurrent
c.setfocus
' если поле id было невидимо или выключено вернуть его состояние'
docmd.echo true
on error goto 0

Этот способ работает тем дольше, чем больше записей в форме.

Ошибка неактуальна, если в форме не разрешено изменение/добавление записей.
8 апр 04, 17:11    [619381]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Просто Лось
Member

Откуда:
Сообщений: 221
WinXP (sp1), A97 (SP2) (может по-этому?. Больше Админ не качает :() :

Столкнулся с таким багом, как лечить не знаю:
при попытке вызвать из Form2 метод .Undo контрола подчиненной формы Form1, например, из [Form2] вызвать

forms!Form1!sumFORM.form!field1.undo

получаю срезанный напрочь без предупреждения Access без права переписки с кем-либо кроме Билли на 10 лет:)) (пришлось обходиться без этого)
10 апр 04, 00:06    [622221]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Green2
Member

Откуда: skype: green2x2
Сообщений: 13766
Я создал базу на SQL Server, все ключи сделал bigint, пытаюсь связать с клиентом в Access, и получаю таблицу где вместо записей стоит #Удалено.
Ключевое поле показывало, что оно char(255)

Тогда я все ключи сделал как numeric и все у меня нормально заработало.

Access 2000 - 2002 пробовал на обоих версиях.

SQL Server 2000
10 апр 04, 16:26    [622489]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Senin Viktor
Member

Откуда: Подмосковье
Сообщений: 5006
MS Access 2002 SP1 - при попытке последовательного открытия нескольких отчетов на печать - акес вылетает - исправленно в SP2.
11 апр 04, 12:42    [622818]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40348
Только что обнаружилось.

http://sql.ru/forum/actualthread.aspx?bid=4&tid=86296

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

Если такой запрос включается в Union, то в лучшем случае вылезает ошибка про несоответствие количества полей, а в худшем показывается на одно поле меньше, но не те поля под не теми.

Пример: если в таблице T есть поля A, B, то:
select A as Z, * from T -> выдает Z, B
select B as Z, * from T -> выдает Z, A
select 1 as Z, * from T -> выдает Z, A, B
union 1-го со 2-м -> выдает 2 поля, причем нигде нет ни A под A, ни B под B
union 1-го с 3-м -> выдает ошибку
12 апр 04, 22:26    [624810]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
ищ
Guest
вс

все работает правильно. это не баг. это логика.
* означает, что выбраны все поля. а так как поле уже выбрано, то и дважды его показывать ни к чему.
для того, чтобы его показать, надо поставить
принудительно
select T.*, Поле1
вот тогда оно покажет

вот тебе справка:
SELECT [предикат] { * | таблица.* | [таблица.]поле_1
[AS псевдоним_1] [, [таблица.]поле_2 [AS псевдоним_2] [, ...]]}
FROM выражение [, ...] [IN внешняяБазаДанных]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]

предикат - Один из следующих предикатов отбора: ALL, DISTINCT, DISTINCTROW или TOP. Предикаты используются для ограничения числа возвращаемых записей. Если они отсутствуют, по умолчанию используется предикат ALL.
* Указывает, что выбраны все поля заданной таблицы или таблиц.
таблица Имя таблицы, из которой должны быть отобраны записи.
поле_1, поле_2 - Имена полей, из которых должны быть отобраны данные. Если включить несколько полей, они будут извлекаться в указанном порядке.
псевдоним_1, псевдоним_2 Имена, которые станут заголовками столбцов вместо исходных названий столбцов в таблице.
выражение - Имена одной или нескольких таблиц, которые содержат отбираемые данные.
внешняяБазаДанных - Имя базы данных, которая содержит таблицы, указанные с помощью аргумента выражение, если они не находятся в текущей базе данных.
13 апр 04, 10:56    [625314]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40348
Ну и чем твое
select T.*, Поле1
отличается от моего
select Поле1, T.*
?

Причем ведь я даже даю алиас.
13 апр 04, 13:14    [625673]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
ищ
Guest
ты написал
select A as Z, * from T

а я по-другому
select A as Z, T.* from T
13 апр 04, 13:37    [625751]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40348
Да, действительно. Итого: алиас не помогает получить поле два раза, а помогает указание имени таблицы при *. Закономерность совершенно понятна, но логики я в ней не наблюдаю.

Я был уверен, что если в селекте всего одна таблица, то можно вместо T.* писать просто *. Вот перед нами случай, когда это неверно. Есть ли еще такие случаи?
13 апр 04, 13:45    [625775]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Лох Позорный
Member

Откуда:
Сообщений: 9900
Интересно, стоит ли сюда повторно писать о найденных мною багофичах? Имею в виду глюк с Left/Right Join'ами по вычисляемому полю и и безобразие с агрегатами внутри подзапросов Union All.
13 апр 04, 14:03    [625833]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40348
Сделай одним постом подборку ссылок на другие топики. И при каждой ссылке минимальный комментарий.
13 апр 04, 14:05    [625838]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
ищ
Guest
вс

логика така:
если * , то хочешь увидеть все столбцы
(не какой-то конкретной таблицы, а всех таблиц) и она
тебе их и показывает.
если конкретно Т.* - то должна
выдать все поля конкретной таблицы,
невзирая на то, что было указано ранее.
здесь ты как бы говоришь ей,
шо хочу видеть поля именно из этой
таблицы. вот она тебе конкретно и выдает.
все правильно она раьотаит.

как ее ты спрашиваешь, так она
и отвечает.
сформулируй четко для нее запрос, она тебе четко
и ответит. при нечетком формулровании, она
начинает думать так, как считает нужным.
13 апр 04, 14:24    [625890]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40348
2 ищ:

* - значит все поля из всех таблиц
T.* - значит все поля из данной таблицы

Если одно из полей упомянуто в том же селекте еще раз, то ниоткуда не следует, что эти два синтаксиса должны вести себя по-разному. Конечно, узнав про это явление, можно задним числом сформулировать, в чем состоит разница.
13 апр 04, 14:51    [625987]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Julius
Member

Откуда: Таганрог
Сообщений: 439
Сообщения об ошибках в *.ADP:

Если на уровне таблицы задать текст сообщения об ошибке при нарушении ограничения или ключа, он будет выводиться только для пользоватетеля dbo. Под любым другим пользователем сообщение не выводится, вместо него выводится стандартное сообщение об ошибке SQL Server 2000.
Исправить эту ситуацию программно невозможно, если не лезть в Recordset формы (сообщение об ошибке недоступно), а лезть туда не стоит, как уже говорилось многими выше.
27 апр 04, 14:45    [652146]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Geo
Member

Откуда:
Сообщений: 6873
Ошибка с CheckBox'ом:

http://am.rusimport.ru/msaccess/topic.aspx?ID=107
7 май 04, 20:56    [668740]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Владимир Саныч
Member

Откуда: Израиль (причем это 1 человек, а не 2 => прошу на ты)
Сообщений: 40348
А на той странице как раз ссылка на наше обсуждение, которое именно той страницей и было спровоцировано.

http://sql.ru/forum/actualthread.aspx?bid=4&tid=33519
7 май 04, 21:00    [668742]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Adams
Member

Откуда:
Сообщений: 1
Green2
Я создал базу на SQL Server, все ключи сделал bigint, пытаюсь связать с клиентом в Access, и получаю таблицу где вместо записей стоит #Удалено.
Ключевое поле показывало, что оно char(255)

Тогда я все ключи сделал как numeric и все у меня нормально заработало.

Access 2000 - 2002 пробовал на обоих версиях.

SQL Server 2000


У меня Numeric не помогло - поставил int - все сразу стало нормально.
Access 2000 + Sql2000
12 июл 04, 08:29    [799073]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
АлексейК
Member

Откуда: http://www.msdatabase.ru , Moscow
Сообщений: 7683
ADP 2000 -2003
баг с использованием суммового поля в примечании формы при использовании
фильтра.
=sum(поле)


ведет себя по разному
в 2000 без сервис паков срезу пишет ошибку
в 2002 после использования фильтра формы
в 2003 после нескольких попыток реквери / фильтрации
12 июл 04, 08:51    [799102]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Rivkin Dmitry
Member

Откуда: Israel
Сообщений: 5475
По багу автора
Создаем на сервере таблицу с полем типа bit.

В А97 (в других - не знаю) помогает назначение default на это поле. По-видимому, Акс не может превратить автоматом Null to boolean

Geo добавил в сообщение:
В 2002 (а речь шла именно о нем, о проекте adp) это не спасает, как не спасает и использование типа smallint вместо bit.
12 июл 04, 09:41    [799176]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Geo
Member

Откуда:
Сообщений: 6873
Ошибка компиляции:
http://www.sql.ru/forum/actualthread.aspx?tid=121644
10 сен 04, 21:26    [952628]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
AlTis
Member

Откуда: Penza - Moscow
Сообщений: 1099
мои 2 копейки:
странное поведение при закрытии Access:
при закрытии основного окна Access вызывается Form_Load
http://www.sql.ru/forum/actualthread.aspx?bid=4&tid=115316
10 сен 04, 22:06    [952648]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Geo
Member

Откуда:
Сообщений: 6873
автор
Если в одном ЛистБоксе переменная = 0,25л Молоко, то после добавления в другой ЛистБокс и удаленеия сей переменной из первого ЛистБокса, получается следующие: в первом ЛистБоксе переменная становится равной 25л Молоко и добаляется к предыдущему значению.

http://www.sql.ru/forum/actualthread.aspx?tid=127141
3 окт 04, 17:07    [1004600]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Geo
Member

Откуда:
Сообщений: 6873
MS SQL 2000 SP3
Access ADP

Взято отсюда.

В Access не имеет смысла пользоваться не-глобальными временными таблицами, иначе, как в хранимых процедурах (которые удалят таблицы после работы).
Это не баг, но я нигде не видел отдельного упоминания об этом эффекте, поэтому, думаю, будет невредно выложить отдельно.

Создайте форму из одной кнопки; в обработчик нажатия кнопки поместите этот код:

Private Sub Кнопка0_Click()
  Dim t As Long
  
  ' Создаю обычную таблицу
  With CurrentProject.Connection
    .Execute "create table tempTable (kf int not null identity (1, 1), tempField int)"
    .Execute "alter table tempTable add constraint pt_t primary key clustered (kf)"
    .Execute "insert into tempTable (tempField) select 1234"
    For t = 1 To 17 ' Это 131 тыс. записей, м.б. будет достаточно и меньшего числа
      .Execute "insert into tempTable (tempField) select tempField from temptable"
    Next
  
  CurrentProject.Connection.Execute "select 123 as a into #ttt"
  
    MsgBox "Временная таблица #ttt создана." & vbNewLine & _
           "Пример извлеченного значения: " & _
               .Execute("select a from #ttt")(0) & _
               "." & vbNewLine & vbNewLine & _
           "В форме будет больше 100 тыс. записей. " & _
               "Заполняю источник данных и пробую извлечь значение еще раз...", vbInformation

    Me.RecordSource = "select * from tempTable"
  
    t = .Execute("select a from #ttt")(0)
    MsgBox "Прочтено значение:" & t, vbInformation
  End With
End Sub

На выделенной строке получаем ошибку "Invalid object name #ttt".

Если войти в отладку, подождать несколько секунд, пока форма получит записи, и продолжить выполнение программы, то программа отработает дальше.
30 ноя 04, 21:16    [1148280]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
Victosha
Member

Откуда: Москва
Сообщений: 2620
В Access не имеет смысла пользоваться не-глобальными временными
таблицами, иначе, как в хранимых процедурах (которые удалят таблицы после
работы).
Это не баг, но я нигде не видел отдельного упоминания об этом эффекте,
поэтому, думаю, будет невредно выложить отдельно.

Я бы это все-таки другими словами сказал.
Нельзя полагаться на неизменность/уникальность объекта соединения, возвращаемого методом. CurrentProject.Connection. Гарантируется только, что метод доступен, и возвращает объект соединения.
Однако последовательное обращение к методу может приводить к возврату различных объектов. Например, в случае, когда все текущие открытые соединения заняты/блокированы обработкой команды и выборкой результата, акцесс просто откроет в момент обращения еще одно соединение и вернет его в ответ на обращение. Это необходимо иметь ввиду по крайней мере при последовательном исполнении набора команд типа CurrentProject.Connection.Execute



(с выражением лица)
1 дек 04, 10:39    [1148913]     Ответить | Цитировать Сообщить модератору
 Re: Баги Access  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 12719
может не в тему
но

#ttt- временная таблица доступная данному пользователю
##ttt времннная таблица доступная для всех пользователе

интересно, а второй вариант для случая Geo прокатит?
1 дек 04, 10:54    [1148976]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6 7 8 9 10 .. 15   вперед  Ctrl
Все форумы / Microsoft Access Ответить