Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
WhiteNoise
Member

Откуда:
Сообщений: 100
У меня в форме есть поле (Объем). Его значение добывается из Combobox'а (C1.column(5)). В combobox'е я значение подключается в запросе (LEFT JOIN). бывает такое, что у подключаемой таблицы нет подключаемой записи вообще. Само по себе это не вызывает ошибки.
Но если я делаю на основе этого поля вычисляемое (Стоимость = C1.column(5) * Цена) -- пишется "#Ошибка"
Проблема в том, что все функции с аргументом ( C1.column(5) * Цена или Объем * Цена) могут выдавать значение, все равно пишется #Ошибка. Тоже самое относится к IsError и IsNumeric.
Я посмотрел некоторые темы, например такую:
https://www.sql.ru/forum/actualthread.aspx?bid=4&tid=79209
Но как-то всё не то.

Если кто-то с таким сталкивался, и поможет, буду признателтен.
5 окт 06, 18:55    [3227368]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
Latuk
Member

Откуда: N 54°38', E 037°35'
Сообщений: 7310
=IIF(IsError(C1.column(5) * Цена);0;C1.column(5) * Цена)
5 окт 06, 19:18    [3227461]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
WhiteNoise
Member

Откуда:
Сообщений: 100
Latuk
=IIF(IsError(C1.column(5) * Цена);0;C1.column(5) * Цена)

Да, но нет.
Я уже в вопросе писал:
WhiteNoise
Проблема в том, что все функции с аргументом ( C1.column(5) * Цена или Объем * Цена) могут выдавать значение, все равно пишется #Ошибка. Тоже самое относится к IsError и IsNumeric.

Не работает.
5 окт 06, 20:23    [3227658]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
Latuk
Member

Откуда: N 54°38', E 037°35'
Сообщений: 7310
Надо выражение сделать в невидимом поле
Поле1 = C1.column(5) * Цена
а потом из видимого ссылатся на невидимое
=IIF(IsError(Поле1);0;Поле1)
5 окт 06, 20:30    [3227680]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
WhiteNoise
Member

Откуда:
Сообщений: 100
2Latuk
Спасибо, ахренеть :)
Только теперь вся форма истыкана невидемыми полями, и пошоже еще надо будет.
11 окт 06, 02:56    [3244831]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
ILL HEAD
Member [заблокирован]

Откуда:
Сообщений: 8498
попробуйте в IIF-е анализировать не конечный резултат в поле (IsError) а причину появления #ERROR
тогда (возможно) удастся избавиться от невидимых полей

тоесть если причина в отсутствие записи или значения Цена - IsEmpty или IsNull, то типа так:
=IIF(IsEmpty(Цена) Or IsNull(Цена);0;C1.column(5) * Цена)

пишите это в то поле где "Ошибка"
не проверял %)

другой вариант (должен работать, если ошибка вызвана только NULLами в Цена при Left Join)
= C1.column(5) * nz(Цена;0)
11 окт 06, 04:34    [3244856]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
Karfaqen
Member

Откуда:
Сообщений: 7010
WhiteNoise
бывает такое, что у подключаемой таблицы нет подключаемой записи вообще. Само по себе это не вызывает ошибки.
Но если я делаю на основе этого поля вычисляемое (Стоимость = C1.column(5) * Цена) -- пишется "#Ошибка"
Можно источником для column(5) вашего списка брать из запроса не полеXXX (из подключаемой таблицы, где может не быть записи), а сделать для этого в запросе выражение вида:
Nz(полеXXX,0) AS [источник_для_column5]
тогда для несуществующих записей у вас в итоге будет 0 (если, конечно, вас устроит такой ноль).
11 окт 06, 08:22    [3245016]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
WhiteNoise
Member

Откуда:
Сообщений: 100
2Karfaqen
Да, я думал об этом, но хотелось этого как раз и избежать. Там и так много полей с большими выражениями к ним еще Nz пристраивать муторно. И хотелось, что бы отличалось 0 и Null. Например разница прихода и расхода 0 -- это одно, а Null другое.
Я думал, что есть какая нибудь настройка, что бы просто не выводить "#Ошибка".
11 окт 06, 13:56    [3247395]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
mds_world
Member

Откуда: Ташкент
Сообщений: 27548
WhiteNoise
2Latuk
Спасибо, ахренеть :)
Только теперь вся форма истыкана невидемыми полями, и пошоже еще надо будет.
Ну, а почему не воспользоваться глобальными переменными?
11 окт 06, 22:17    [3250214]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
Анатолий ( Киев )
Guest
Рисуем функцию в общем модуле или в модуле формы:
Function ErrorToEmpty(Value As Variant) As Variant
On Error Resume Next
ErrorToEmpty = Value
If Err.Number <> 0 Then Err.Clear
End Function

А затем в поле пишем:
=ErrorToEmpty(C1.column(5) * Цена)

А причина, видимо, в том, что C1.column(5) возвращает String, которая в вашем выражении преобразуется в число, если сможет. Когда значения нет - это пустая строка, вот и ошибка.
12 окт 06, 12:57    [3252693]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
WhiteNoise
Member

Откуда:
Сообщений: 100
2Анатолий ( Киев )
Анатолий ( Киев )
А причина, видимо, в том, что C1.column(5) возвращает String, которая в вашем выражении преобразуется в число, если сможет. Когда значения нет - это пустая строка, вот и ошибка.

Когда ошибка, это ясно, только это не пустая стока (Null), а вообще там ничего нет, даже Null.

Анатолий ( Киев )
=ErrorToEmpty(C1.column(5) * Цена)

Так не работает пробывал, тоже самое "#Ошибка"
Даже, если фукция ErrorToEmpty, всегда будет 0 возвращать, все рабно не работает.
12 окт 06, 14:50    [3253642]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
Karfaqen
Member

Откуда:
Сообщений: 7010
WhiteNoise
Да, я думал об этом, но хотелось этого как раз и избежать. Там и так много полей с большими выражениями к ним еще Nz пристраивать муторно. И хотелось, что бы отличалось 0 и Null. Например разница прихода и расхода 0 -- это одно, а Null другое.
Если у вас этот сложный запрос в разных местах используется (там, где учитывают его 0 и NULL по-разному), то ведь можно непосредственно ЭТОТ запрос и не трогать.

Если вас не устраивает лишь поведение этого запроса в ДАННОМ комбике, так вы сделайте ЭТОМУ КОМБИКУ отдельный RowSource-запрос над этим большим запросом - и там уже пропишите Nz для 5-й колонки - там ведь будут голые имена полей первого запроса и никаких сложных выражений уже не будет.
12 окт 06, 15:01    [3253756]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
WhiteNoise
Member

Откуда:
Сообщений: 100
mds_world
Ну, а почему не воспользоваться глобальными переменными?
.
Таким образо?
Public BlaBla as Control  
, а потом поле будет ссылаться на гловальную переменную?

Не думал об этом.
Попробую. Как бы не запутаться. А как будет быстрей работать или медленней?
12 окт 06, 15:19    [3253928]     Ответить | Цитировать Сообщить модератору
 Re: Как избавится от #Ошибка в поле. По форуму искал. В хелпе тоже.  [new]
mds_world
Member

Откуда: Ташкент
Сообщений: 27548
WhiteNoise
mds_world
Ну, а почему не воспользоваться глобальными переменными?
.
Таким образо?
Public BlaBla as Control  
, а потом поле будет ссылаться на гловальную переменную?

Не думал об этом.
Попробую. Как бы не запутаться. А как будет быстрей работать или медленней?
Ну, только не Control. Вам же нужно значение поля, а не его свойства. Оставьте без расшифровки, по умолчанию будет Variant.
Не быстрее, не медленнее. Также.
Чтобы не запутываться, придумайте специфические названия глобальным переменным. Я, например, все глоб.переменные засовываю в отдельный модуль, чтобы не искать их. И даю им всем название с окончанием "_glb".
Важно: надо иметь в виду, что глоб.переменные не видны в запросе. И если такая нужда придет, то нужна функция, которая возвращает их значение.
12 окт 06, 16:09    [3254359]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить