Ошибка размер access

646 / 99 / 11

Регистрация: 08.06.2015

Сообщений: 1,563

1

Ошибка #размер!

27.08.2017, 12:03. Показов 2660. Ответов 1


Студворк — интернет-сервис помощи студентам

Есть форма с подчиненной табличной формой. На подчиненной форме есть поле поле [ОплатаВ] сумируещее столбец подчиненной формы БД. Если записи в подчиненной форме есть то свободное поле на основной форме источником которого является суммируещее поле подчиненной формы Nz([Формы]![Т_Операции]![Оплата].[Form]![ОплатаВ];0) правильно отображает результат, если записей в подчиненной форме нет получаю ошибку #Размер!. Так как сумировать то нечего. Как его обойти ?

Добавлено через 22 минуты

Решил
=IIf(IsError([Формы]![Т_Операции]![Оплата].[Form]![ОплатаВ]);0;[Формы]![Т_Операции]![Оплата].[Form]![ОплатаВ])



1



Eugene-LS

Заблокирован

27.08.2017, 12:39

2

Лучший ответ Сообщение было отмечено alexpro1979 как решение

Решение

Цитата
Сообщение от alexpro1979
Посмотреть сообщение

если записей в подчиненной форме нет получаю ошибку #Размер!. Так как сумировать то нечего. Как его обойти ?

Вот вариантик:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Public Function FData(anyVal As Variant) As Currency
'Устранение сообщения "#Ошибка" при выводе данных из подчиненной формы без записей
'-----------------------------------------------------------
On Error GoTo FDataErr
    FData = CCur(anyVal)
    Exit Function
FDataErr:
    FData = 0
    Err.Clear
End Function

Будет:
=FData([Формы]![Т_Операции]![Оплата].[Form]![ОплатаВ])
Попробуйте — должно отработать.



2



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

27.08.2017, 12:39

2

Вопрос:

У меня есть аномально большая таблица для одного из моих приложений в MS Access. Он насильственно нарушает некоторые правила нормализации, но в остальном это отлично подходит для этого небольшого приложения. Он имеет ~ 100 полей (столбцов). Я прочитал здесь ограничения, но не вижу, где я нарушаю это. Большинство полей являются текстовыми полями и варьируются от нескольких слов до нескольких предложений. Мои вопросы:

  1. Есть ли способ получить более описательную ошибку, чем “слишком большая запись”, чтобы я мог определить, как уменьшить ее?

  2. Изменит ли мои поля “текст” поля “memo”, уменьшит размер моей записи?

На первый взгляд, из всех потенциально нарушенных спецификаций это : количество символов в записи (исключая поля Memo и OLE Object), когда для свойства UnicodeCompression полей установлено значение Да :: 4000
представляется наиболее вероятным преступником.

  1. Было ли это нарушение потенциально “слишком большой” ошибкой времени выполнения (при заполнении формы).

  2. Устанавливает ли свойство UnicodeCompression “нет” положительно или отрицательно влияет на производительность?

Лучший ответ:

Поля, вероятно, будут ответом. Правила ограничения записи не включают тип данных memo.

Ответ №1

Кажется, что предел для полей составляет 2000 байт (Memo и OLE не учитываются с этим ограничением). С ~ 100 полями вы, вероятно, будете использовать этот предел.

Решениями являются нормализация таблицы или преобразование некоторых полей в поля Memo.

Ответ №2

Может быть, слишком поздно, но я решил эту проблему, уплотняя/репарацию файла базы данных

У меня есть отчет в Access с тремя полями: Width, Height и Area.
Width и Height извлекаются из таблицы, к которой привязан отчет, в то время как Area должно быть вычислено (высота * ширина). Я установил Control Source для Area на = [Height] * [Width], но при открытии формы в поле отображается #Type!, как правило, с описанием ошибок доступа, с хорошим использованием # и !, чтобы невозможно было точно погуглить … но я отвлекся. Я понятия не имею, что означает #Type!, и Access не хочет мне говорить.

Я не могу этого понять. В связанной таблице Height и Width являются целыми числами, и оба они заполняются в просматриваемой записи (так что это не проблема NULL). Если я изменю Control Source на что-нибудь действительно простое — например, =[Height], вместо этого будет выплевывать #Error! (опять же, спасибо за полезную информацию, Access. Мы » буду без тебя потеряна). Даже = 1 выплевывает #Error!.

Есть идеи, почему Access ненавидит мои источники управления?

6 ответов

Лучший ответ

Вы, вероятно, столкнулись с конфликтом имен, т. Е. Access выбирает элементы Width и Height объекта отчета , а не поля с именем Width и Height.

Я бы создал новый запрос и просто переименовал в нем проблемные поля. Итак, если вы используете конструктор запросов:

  • добавьте первичный ключ и любое другое непроблемное поле, затем WidthValue: Width и HeightValue: Height в качестве дополнительных столбцов;
  • наконец, установите в качестве источника записей отчета запрос, а не таблицу напрямую, и соответствующим образом обновите вычисленные формулы управления.


8

StackzOfZtuff
28 Сен 2017 в 11:04

Это довольно упрощенный расчет. Есть ли причина, по которой вы не создаете запрос, не выполняете расчет в указанном запросе и вместо этого привязываете отчет к запросу? Нет смысла убивать себя, пытаясь понять это.

Фактически, теперь, когда я думаю об этом, высота и ширина, вероятно, являются зарезервированными словами, поскольку они являются свойствами элемента управления. Может быть, поменять их на HHeight и WWidth или что-то в этом роде?


3

Johnny Bones
31 Окт 2013 в 19:26

Когда доступ создает отчет, он использует имя поля запросов для создания имени связанного элемента управления в отчете. то, если вы позже используете имена полей запроса, это фактически относится к элементу управления отчетом с тем же именем. Итак, решение, либо переименуйте имя поля отчета в другое имя, отличное от полей запроса, либо полностью укажите имя поля запроса [запрос]. [поле], чтобы принудительно использовать имя поля запроса.


0

user8690222
28 Сен 2017 в 17:15

Microsoft не указывает высоту и ширину как зарезервированные слова, однако они используются при изменении размеров форм и отчетов.


0

topdesk
22 Авг 2018 в 21:23

У меня была проблема, связанная с тем, что моя форма выдавала мне эту ошибку. Изменение ввода данных свойства формы на Да решило эту проблему. Не уверены, что это решит вашу проблему, но, возможно, в свойствах отчета вы найдете соответствующее поле?


0

Seth Reardon
14 Июн 2020 в 09:30

Щелкните правой кнопкой мыши в поле ОБЛАСТЬ и выберите свойства, затем перейдите на вкладку СОБЫТИЕ, затем нажмите «НА ВВОДЕ», выберите из раскрывающегося списка [Процедура события], нажмите на точки справа и перейдите к «ОСНОВНЫЕ ОСНОВЫ MICROSOFT VISUAL FOR APPLICATION» на в этом окне введите этот код над «End Sub»

Площадь = Высота * Ширина

Но обратите внимание, что имя, которое вы вводите в этот код, должно быть доступно в вашей базе данных и так же, как и вы, вещи, которые вводят в строке кода, удачи


-1

javad
9 Окт 2014 в 16:20

I’ve started using Access 2010 recently and started testing some of the new features, namely the Calculated Field datatype.

I had hoped that this was something that based on a formula (expression builder) would remove an amount of data and shrink an ACCDB file because Access only has the formula not actual data.

However, my new version of the file seems to be larger than the original which IMHO makes the feature a bit useless.

I’ve searched the interweb regarding the feature and can only really find people who show how to create one rather than any pros and cons about the feature.

As it stands I’m going to go back to the old method of calculations in a query but before I do I thought I’d ask on StackOverflow just in case anybody has used it.

Gord Thompson's user avatar

Gord Thompson

116k32 gold badges211 silver badges411 bronze badges

asked Oct 22, 2013 at 8:33

aderrose's user avatar

Access stores the results of calculated fields for each record, so yes, that will increase the size of the database. However your claim that this «makes the feature a bit useless» misses the point:

The primary advantage of using calculated fields is that the calculation (expression) is defined once, at the table level. Once the calculated field has been defined it can simply be used much like any other field in queries, reports, etc..

Sure, you can «go back to the old method of calculations in a query» if that suits your purposes, but it also means that

  1. You will have to repeat the (same) calculation logic in all of your queries.
  2. If the calculation logic ever changes then you’ll have to go back and edit all of those queries.
  3. Every time you run one of those queries it will have to re-do the calculation for every record, instead of simply retrieving the calculated field from the table.

answered Oct 22, 2013 at 11:14

Gord Thompson's user avatar

Gord ThompsonGord Thompson

116k32 gold badges211 silver badges411 bronze badges

1

 

Добрый день.
Есть база аксесс, состоящая из 3 таблиц. Все поля, кроме индкерса текст 255 символов
Есть файл Excel, в котором формируется запрос на запись новой строки данных в таблицу.
Всё работает.
В какой-то момент вдруг выдал сообщение, «Слишком большая длина записи».
Проверка базы показала, что строка не записалась в одну из таблиц.
Проверил все поля не размер записи. К 255 символам даже близко ничего не подбирается.

Из-за чего может возникать такая проблема? И как её решить?

 

Johny

Пользователь

Сообщений: 2737
Регистрация: 21.12.2012

Попробуйте поменть тип поля на МЕМО.
А ещё можно попробовать указать тип параметра adVariant (для ADODB.Command).

There is no knowledge that is not power

 
 

А сколько полей в записи
суммарная длина записи (без мемо) должна быть меньше 4000(если не ошибаюсь)

 

Marchuk

Пользователь

Сообщений: 1167
Регистрация: 01.01.1970

может по индексу не проходит? вроде как предел достигнут?

 

Длина строки, которая не помсещается 2352 символа.

Другие записи нормально заходят в таблицу.

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#7

28.06.2013 21:05:04

у меня все заливает, покажите как добавляете записи, либо мой пример изучите
———-
Забыл добавить база создается в том же каталоге что и файл xls, не забудьте сохранить файл на физический диск компьютера

Прикрепленные файлы

  • CreateBase.xls (40 КБ)

Изменено: R Dmitry28.06.2013 21:07:07

Спасибо

 

4000, если

Число знаков в записи (кроме полей с типом данных «Поле MEMO» и «Поле объекта OLE»), если для свойства Сжатие Юникод полей задано значение Да

иначе меньше

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

#9

30.06.2013 00:48:53

Цитата
Андрей Даркшевич пишет:
К 255 символам даже близко ничего не подбирается.

:)

Я сам — дурнее всякого примера! …

 

galina mur

Пользователь

Сообщений: 245
Регистрация: 25.12.2012

#10

30.06.2013 01:15:58

попыталась создать 10 полей по 255====увы
только 7*255<2000симв

Код
Dim s1
s1 = "CREATE TABLE TEST([IdTest] COUNTER,"
s1 = s1 & "[NameTest1] char(255),"
s1 = s1 & "[NameTest2] char(255),"
s1 = s1 & "[NameTest3] char(255),"
s1 = s1 & "[NameTest4] char(255),"
's1 = s1 & "[NameTest5] char(255),"
's1 = s1 & "[NameTest6] char(255),"
s1 = s1 & "[NameTest7] char(255),"
s1 = s1 & "[NameTest8] char(255),"
s1 = s1 & "[NameTest9] char(255),"
s1 = s1 & "[NameTest10] char(255));"

 Db.Execute (s1), dbFailOnError 'varchar
 

galina mur

Пользователь

Сообщений: 245
Регистрация: 25.12.2012

#11

30.06.2013 01:25:24

вот так ввело 10 полей

Код
s1 = "CREATE TABLE TEST([IdTest] COUNTER,"
s1 = s1 & "[NameTest1] memo,"
s1 = s1 & "[NameTest2] memo,"
s1 = s1 & "[NameTest3] memo,"
s1 = s1 & "[NameTest4] memo,"
s1 = s1 & "[NameTest5] memo,"
s1 = s1 & "[NameTest6] memo,"
s1 = s1 & "[NameTest7] memo,"
s1 = s1 & "[NameTest8] memo,"
s1 = s1 & "[NameTest9] memo,"
s1 = s1 & "[NameTest10] memo);"

 Db.Execute (s1), dbFailOnError 'varchar
 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#12

30.06.2013 09:15:18

galina mur,

Код
varchar

Вам поможет,
……….. хотя это к данной теме это отношение не имеет (мне просто было лень создать access ручками, вот я и создал его программно).

Спасибо

 

QUOTE]R Dmitry пишет:
у меня все заливает, покажите как добавляете записи, либо мой пример изучите
———-
Забыл добавить база создается в том же каталоге что и файл xls, не забудьте сохранить файл на физический диск компьютера[/QUOTE]

Дмитрий, сейчас запись в базу происходит так:
Set oCm = New ADODB.command
oCm.ActiveConnection = Cn
oCm.CommandText = «Insert into Applications » & ActiveWorkbook.Sheets(«zapros»).Range(«c1″).Value & »  values  » & ActiveWorkbook.Sheets(«zapros»).Range(«e1»).Value
oCm.Execute iRecAffected
oCm.CommandText = «Insert into Applications1 » & ActiveWorkbook.Sheets(«zapros»).Range(«c5″).Value & »  values  » & ActiveWorkbook.Sheets(«zapros»).Range(«e5»).Value
oCm.Execute iRecAffected
oCm.CommandText = «Insert into Scoring » & ActiveWorkbook.Sheets(«zapros»).Range(«c9″).Value & »  values  » & ActiveWorkbook.Sheets(«zapros»).Range(«e9»).Value
oCm.Execute iRecAffected

База и код создавались не мной, а мне это осталось как страшное наследие.

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#14

01.07.2013 20:39:47

Код
'----------------------------
Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
   With rs
      .CursorLocation = adUseClient
      .Open "select top 1 * from Applications;", cn ', adOpenStatic, adLockOptimistic
      .AddNew
      .Fields(ActiveWorkbook.Sheets("zapros").Range("c1").Value).Value = _
                                                         ActiveWorkbook.Sheets("zapros").Range("e1").Value
      .Update
      .Close
   End With
   Set rs = Nothing

попробуйте, примерно так таблицы Applications.

Изменено: R Dmitry01.07.2013 20:40:40

Спасибо

 

Дмитрий, дебагер говорит следующее:

rs.Fields(ActiveWorkbook.Sheets(«zapros»).Range(«c1»).Value).Value <В коллекции не удается найти элемент, соответствующий требуемому имени или порядковому номеру.>

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#16

02.07.2013 12:48:07

Код
ActiveWorkbook.Sheets("zapros").Range("c1").Value

а это разве не имя поля куда добавляется запись?
в общем это должно быть имя поля куда, добавляются данные

Спасибо

 

Да, это именно список полей, куда заливать данные. Он не пустой — проверил по дебагеру, на всякий случай.

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#18

02.07.2013 13:16:33

Список?
соответственно будет и список значений
я показал пример для одного поля и одного значения
воспользуйтесь функцией split, и тогда циклом занесите нужные данные в нужные поля, и обновите рекордсет

Спасибо

 

Oren_Spartach

Пользователь

Сообщений: 64
Регистрация: 01.01.1970

#19

03.07.2013 12:06:49

Не могу победить.
Листинг процедуры, которая должна заносить данные:

Скрытый текст

 

R Dmitry

Пользователь

Сообщений: 3103
Регистрация: 22.12.2012

Excel,MSSQL,Oracle,Qlik

#20

03.07.2013 12:43:33

Код
adOpenStatic

у меня это было за комментировано, либо замените на

Код
adOpenDinamic

Спасибо

 

vikttur

Пользователь

Сообщений: 47199
Регистрация: 15.09.2012

#21

03.07.2013 20:48:50

Oren_Spartach, длинные листинги — или в .txt, или под spoiler.

Понравилась статья? Поделить с друзьями:
  • Ошибка ро201 ваз
  • Ошибка раздельного доступа к информационной базе 1с
  • Ошибка разделенного доступа при обновлении
  • Ошибка ро172 шевроле круз
  • Ошибка ро172 уаз