Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 489
от 18.03.2007, 18:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 244, Экспертов: 31
В номере:Вопросов: 1, Ответов: 1


Вопрос № 78008: Уважаемые эксперты! вопрос. Access 2000 Запрос на обновление таблицы Update a,b set a.name=b.name where a.id=b.id а если полей много и если имена полей идентичны в обoих таблицах, чтобы не писать весь список, то можно использовать как...

Вопрос № 78.008
Уважаемые эксперты! вопрос. Access 2000
Запрос на обновление таблицы
Update a,b set a.name=b.name
where a.id=b.id
а если полей много и если имена полей идентичны в обoих таблицах, чтобы не писать весь список, то можно использовать как в запросах на вставку Insert into a (id, name) Select * from b where ....
2. Второй вопрос. Есть форма с подчиненной формой. Выбираются клиенты по заданным В форме: зона техобслуживания, имя технка, период.
Как в этой же конструкции изменить паpаметры запроса в подчиненной форме и выбрать клиентов по всем зонам. (например я отмeчаю "птичкой" по всем зонам)
Запрос в подчиненной форме пpиблизительно такой:
Select Client, address, apparat, zona, tecnico
from M_zona
where zona=forms![OrdiniTec]!zona and tecnico=forms![OrdiniTec]!tecnico
Отправлен: 12.03.2007, 20:13
Вопрос задала: Natali (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Тесленко Евгений Алексеевич
Здравствуйте, Natali!
Вопрос 2:
Для строчного поля критерия и поля со списком:
Sub Combo1_AfterUpdate()
Me.ChildForm.Form.RecordSource = "SELECT * FROM Table WHERE CriteriaField='" & Me.Combo1 & "'"
End Sub
числовой критерий и флажок:
Sub Check1_AfterUpdate()
Dim i As Integer
If Me.Check1 = 0 Then
i = Value1
Else
i = Value2
End If
Me.ChildForm.Form.RecordSource = "SELECT * FROM Table WHERE CriteriaField=" & i
End Sub
вопрос 1:
Запрос на обновление не допускает использования '*'
Его можно построить открыв рекордсет и считав имена всех полей (.Recordset.Fields(i).Name) в массив, передаваемые значения также в массив и перебором этих массивов собрать строку запроса, но конструкция громоздка.
При работе с запросом на обновление надо быть крайне аккуратным(!!!)
некорректно написаный запрос (с неоднозначным условием, ошибочным значением...) приводит к потере данных.
Саммый "надежный", способ обновления записи (а не набора записей как в запросе) это обновление полей рекорсета, к ним можно обращаться по индексу (.Fields(i)) а это удобно при построении цикла.
Удачи.
Евгений.
Ответ отправил: Тесленко Евгений Алексеевич (статус: 5-ый класс)
Ответ отправлен: 12.03.2007, 22:33
Оценка за ответ: 5
Комментарий оценки:
Спасибо. по 1 вопросу: обычно использую для обновления полей recordset. Потеря данных после обновления по запросу этап пройденный. Буду и дальше обновлять через recordset хотела убедиться что этот путь самый верный.
по второму: спасибо за подсказку Form.RecordSource дальше понятно.
Как всегда грамотно и точно!


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.45 beta от 20.02.2007
Яндекс Rambler's Top100

В избранное