|
|
|
| Бодрого времени суток всем.
Столкнулся намедни с такой штукой.
Форма. На форме набор вкладок. На одной из вкладок кучка полей, среди которых несколько полей со списками. Одно из полей со списком имеет источник строк из таблицы вида:
SELECT tbl.ID, tbl.Name FROM...
В свойствах поля: присоединенный столбец -1; число столбцов - 2; ширина столбцов - 0см;5см.
Проблема. В коде не проходит команда:
DoCmd.RunSQL "INSERT INTO tbl (...) SELECT " & Me.ПолесоСписком.Column(0) & " ...
|
Выдает ошибку "Неправильный синтаксис инстукции INSERT INTO". И все.
Почему - непонял. Может обращение к полю неправильное? Тогда как правильно?
Если поле со списком расположено просто на форме (а не на вкладке), то команда отрабатывает без вопросов.
И еще.
На вкладке живет группа переключателей. В группе два переключателя. Как, в зависимости от значения одного из полей, "включить" нужный переключатель?
Спасибо. | |
|
| |
|
|
|
| 1. Me.ПолесоСписком.Column(0) возвращает значение, или имя поля в таблице?
Выведите свое SQL выражение в окно отладки и покажите здесь.
2. В группе переключателей каждый элемент имеет свое значение. Значение активного элемента возвращает св-во Value группы. Присвоив ему другое значение можно выбрать другой элемент. | |
|
| |
|
|
|
| И еще, если у вас 1-й столбец - связанный, то попробуйте вместо Me.ПолесоСписком.Column(0) применить Me.ПолесоСписком.Value или просто Me.ПолесоСписком.
Интересно посмотреть разницу между SQL строкой при Combobox-e на вкладке и просто на форме. | |
|
| |
|
|
|
| Про выключатели вопрос снимается ) Был невнимателен.
По поводу поля со списком.
Если в поле не выбрано значение (т.е. = Null), то выскакивает ошибка. Если значение выбрано, то срабатывает любая комбинация.
Вкладки оказались не при чем. При пустом списке, расположенном на форме команда тоже не срабатывает. Зато срабатывает, если значение берется из простого поля. Т.е. даже если значение простого поля = Null, то команда работает. | |
|
| |
|
|
|
| >По поводу поля со списком.
>Если в поле не выбрано значение (т.е. = Null), то
>выскакивает ошибка.
А если Me.ПолесоСписком?
Принципиальная разница между Me.ПолесоСписком и Me.ПолесоСписком.Column(0) в том, что если значения нет, первое (а также обычное поле) возвращает Null, а второе - пустую строку, которую вы пытаетесь присвоить полю в новой записи. | |
|
| |
|
|
|
| >А если Me.ПолесоСписком?
>Принципиальная разница между Me.ПолесоСписком и
>Me.ПолесоСписком.Column(0) в том, что если значения нет,
>первое (а также обычное поле) возвращает Null, а второе -
>пустую строку, которую вы пытаетесь присвоить полю в новой
>записи.
Все три варианта (Me.ПолесоСписком; Me.ПолесоСписком.Value; Me.ПолесоСписком.Column(0)) при невыбранном значении = Null. В таблице пустые значения для данного поля разрешены. ( в смысле в таблице, куда добавляется запись) | |
|
| |
|
|
|
| Попробуйте: "INSERT INTO tbl (...) SELECT " & NZ(Me.ПолесоСписком, "NULL") & " ...
Еще лучше - открыть Recordset и добавлять запись туда.
ЗЫ. Странно, что запрос нормально глотает Null из обычного поля. ?! | |
|
| |
|
|
|
| >Попробуйте: "INSERT INTO tbl (...) SELECT " &
>NZ(Me.ПолесоСписком, "NULL") & " ...
"Уррааа! Заработало!" (с) Спасибо )
>Еще лучше - открыть Recordset и добавлять запись туда.
Чесно говоря лениво с рекордсетами. Код больно большой выходит.
>ЗЫ. Странно, что запрос нормально глотает Null из обычного поля. ?!
Столкнувшись с проблемой, вывернулся так: создал на вкладке невидимое простое поле; в поле со списком на событие "После обновления" воткнул тупое присваивание значения из списка в поле; в INSERT INTO прописал [Forms]![frm]![Поле] - проглотило. | |
|
| |