Выборка нескольких записей из ленточной формы

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Forlaw
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 12.08.2007 (Вс) 17:02

Выборка нескольких записей из ленточной формы

Сообщение Forlaw » 12.08.2007 (Вс) 17:11

Проблема такая:
1. Есть ЛЕНТОЧНАЯ форма2.
2. Она открывается с данными из запроса.
3. Данные в запросе берутся из открытой формы1.
4. В форме2 есть поле checkbox, не привязанные к полю в таблице(выделяется каждое отдельное поле, а не все сразу)
5. Нужно выбрать данные из того же запроса, но уже "где чекбокс(в открытой форме2)=тру"

select bla-bla
from bla-bla
where бла-бла and формы!форма2!чекбокс=true);
Не работает, есесно...
Форма ленточная.
Т.е. нужно сделать выбоку из ЛЕНТОЧНОЙ формы или из запроса, где чекбокс в форме2=true
вот...
Самые сложные уголовные дела.

Forlaw
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 12.08.2007 (Вс) 17:02

Сообщение Forlaw » 12.08.2007 (Вс) 17:32

т.е. снова делаем тот же запрос, что и для форма2, данные берем из форма1, но уже условие, мол формы!форма2.чекбокс=тру
форма2 - ленточная.
Самые сложные уголовные дела.

dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский

Сообщение dormouse » 12.08.2007 (Вс) 20:44

чекбоксы находятся где-то в заголовке или примечании формы, а не в области данных? Т.е. обвноление запроса не приведёт к сброс отмеченных чекбоксов?

не знаю, события обновления чекбоксов будешь ли использовать или кнопку... В том событии и напиши Me.Requery. По идее должен обновиться источник записей, а чекбоксы сохранятся и будут использоваться в запросе.
VBA, MSA97

Forlaw
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 12.08.2007 (Вс) 17:02

Сообщение Forlaw » 12.08.2007 (Вс) 21:09

Да, действительно, обновление запроса не приводит к сбросу чекбоксов. Сделал кнопку с событием me.requerry, чекбоксы сохраняются. А как эти данные в форме, отмеченные чекбоксами, в отчёт запихнуть?
Самые сложные уголовные дела.

dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский

Сообщение dormouse » 12.08.2007 (Вс) 21:39

о. теперь ещё и отчёт? :)
ну так же и отчёт по аналогии. если он основан на том же запросе, то ничего менять не надо. запрос найдёт форму и чекбоксы..
VBA, MSA97

Forlaw
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 12.08.2007 (Вс) 17:02

Сообщение Forlaw » 12.08.2007 (Вс) 23:02

вот и не находит! Если хоть один чекбокс выделен, то запрос находит все записи!
Самые сложные уголовные дела.

Forlaw
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 12.08.2007 (Вс) 17:02

Сообщение Forlaw » 12.08.2007 (Вс) 23:03

может как-нить программно можно записи ПРЯМО из формы передать отчёту?
Самые сложные уголовные дела.

Forlaw
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 12.08.2007 (Вс) 17:02

Сообщение Forlaw » 12.08.2007 (Вс) 23:25

вот смотри:
форма2(ленточная) берёт данные из запроса:

SELECT Объекты.[Вид сделки], Объекты.[Вид недвижимости], Объекты.[Населённый пункт], Объекты.Район, Объекты.Метро, Объекты.[Типа дома], Объекты.Планировка, Объекты.Мебель, Объекты.Тел, Объекты.Су, Объекты.Балкон, Объекты.Сост, Объекты.[К-во комнат], Объекты.Этаж, Объекты.Этажность, Объекты.Sобщ, Объекты.Sжил, Объекты.Sкух, Объекты.Цена, Объекты.Статус, Объекты.[ID Объекта], Объекты.[Дата размещения]
FROM Объекты
WHERE ([Вид сделки]=Forms!Клиенты![Вид сделки] Or nz(Forms!Клиенты![Вид сделки],"")="") And ([Вид недвижимости]=Forms!Клиенты![Вид недвижимости] Or nz(Forms!Клиенты![Вид недвижимости],"")="") And ([Населённый пункт]=Forms!Клиенты![Населённый пункт] Or nz(Forms!Клиенты!Населённыйпункт,"")="") And ([Район]=Forms!Клиенты!Район Or nz(Forms!Клиенты!Район,"")="") And ([Метро]=Forms!Клиенты!Метро Or nz(Forms!Клиенты!Метро,"")="") And ([Типа дома]=Forms!Клиенты![Типа дома] Or nz(Forms!Клиенты![Типа дома],"")="") And ([Планировка]=Forms!Клиенты!Планировка Or nz(Forms!Клиенты!Планировка,"")="") And ([Мебель]=Forms!Клиенты!Мебель Or nz(Forms!Клиенты!Мебель,"")="") And ([Тел]=Forms!Клиенты!Тел Or nz(Forms!Клиенты!Тел,"")="") And ([Су]=Forms!Клиенты!Су Or nz(Forms!Клиенты!Су,"")="") And ([Балкон]=Forms!Клиенты!Балкон Or nz(Forms!Клиенты!Балкон,"")="") And ([Сост]=Forms!Клиенты!Сост Or nz(Forms!Клиенты!Сост,"")="") And ([К-во комнат] Between Forms!Клиенты![К-во комнат] And Forms!Клиенты![К-во комнатдо] Or nz(Forms!Клиенты![К-во комнат] And Forms!Клиенты![К-во комнатдо],"")="") And ([Этаж] Between Forms!Клиенты!Этаж And Forms!Клиенты!Этаждо Or nz(Forms!Клиенты!Этаж And Forms!Клиенты!Этаждо,"")="") And ([Этажность] Between Forms!Клиенты!Этажность And Forms!Клиенты!Этажностьдо Or nz(Forms!Клиенты!Этажность And Forms!Клиенты!Этажностьдо,"")="") And ([Sобщ] Between Forms!Клиенты!Sобщ And Forms!Клиенты!Sобщдо Or nz(Forms!Клиенты!Sобщ And Forms!Клиенты!Sобщдо,"")="") And ([Sжил] Between Forms!Клиенты!Sжил And Forms!Клиенты!Sжилдо Or nz(Forms!Клиенты!Sжил And Forms!Клиенты!Sжилдо,"")="") And ([Sкух] Between Forms!Клиенты!Sкух And Forms!Клиенты!Sкухдо Or nz(Forms!Клиенты!Sкух And Forms!Клиенты!Sкухдо,"")="") And ([Цена] Between Forms!Клиенты!Цена And Forms!Клиенты!Ценадо Or nz(Forms!Клиенты!Цена And Forms!Клиенты!Ценадо,"")="") and ([Статус]="Не продан" or [Статус]="Не сдан");





запрос берёт данные и открытой "форма1".
потом я делаю тот же самый запрос, но уже добавляю параметр
"and forms!Форма2.checkbox=true" (форма1 и форма2(ленточная) открыты))

И получается петрушка: если хоть один чекбокс выделен, то запрос берет ВСЕ данные. А если ни один не выделен, то ничего...
Самые сложные уголовные дела.

Forlaw
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 12.08.2007 (Вс) 17:02

Сообщение Forlaw » 13.08.2007 (Пн) 0:10

Если по полочкам:

1. Есть форма "клиенты"
2. Есть запрос "запрос1"
3. Есть "ТАБЛИЦА"
4. "Запрос1" берёт данные из "ТАБЛИЦА", где параметры из форма "клиенты"
4. Открываем форму "объекты" (форма ЛЕНТОЧНАЯ)
5. Форма "Объекты" берёт данные из запроса "запрос1"
6. Нужно открыть отчёт, где данные берутся из "запрос2"
7. Выполняем "запрос2"
8. "Запрос2" = "Запрос1" and Forms!Объекты.CheckBox = true

не получается =(


Чекбокс не привязан к полю в таблице.
Сделан так:
Dim Col As New Collection
Function InCol(ID As Long) As Boolean
Static w As Long
w = -1
On Error Resume Next
w = Col.Item(CStr(ID))
w = (w <> -1)
InCol = w
End Function

Public Function InCol2(ID As Long, VAR1 As Variant) As Boolean
InCol2 = InCol(ID)
Debug.Print ID
End Function

Private Sub Form_Open(Cancel As Integer)
SetCaption
End Sub

Private Sub TST1_MouseDown(Button As Integer, Shift As Integer, X As Single, y As Single)
Dim ID As Long
ID = Nz(Me.[ID Объекта], 0)
If InCol(ID) Then
Call Col.Remove(CStr(ID))
Else
Call Col.Add(ID, CStr(ID))
End If
Me.TA1 = ID
Call SetCaption
End Sub


"ТST1" - имя ЧекБокса.
"TA1" - поле в заголовке
данные чекбокса "=InCol2([ID Объекта];[TA1])"


Т.е. если просто впихнуть поле ЧекБокс в ленточную форму, то при выделении хотя бы одного поля, будут выделяться сразу все ЧекБоксы.
А так, можно выделять чекбоксы по отдельности.


Нужно запихнуть в отчёт данные из этой ЛЕНТОЧНОЙ формы("Объекты"), где ЧекБок=тру.
Или Данные из "Запрос2".
"Запрос2" = "Запрос1" and Forms!Объекты.CheckBox = true
Но это не правильно..
Что делать?
Самые сложные уголовные дела.

dormouse
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 140
Зарегистрирован: 10.01.2007 (Ср) 21:58
Откуда: Волжский

Сообщение dormouse » 13.08.2007 (Пн) 20:22

так... пойдём по кратчайшему пути. отчёт должен основываться на точно таком же запросе, что и форма с отмеченными чекбоксами? у тебя же чекбоксы с помощью процедуры включаются в источник записей формы? ты ещё Me.Requery используешь...
И в итоге тебе надо просто вывести полученный отфильтрованный набор записей на принтер?

самый простой и быстрый вариант:
Код: Выделить всё

'кнопка открытия отчёта
docmd.OpenReport "отчёт"
....

sub Report_Open ()'в отчёте
me.recordsource = forms!форма.recordsource

Т.е. этакое "делай, как я". что в форме, тоже и в отчёте.
если захочешь использовать целостный запрос, не нагромождая на него условия, то можешь в коде кнопки поверх наложить фильтр
Me.Filter = "условие"
Me.FilterOn = True

Это будет работать медленней (сначала будет происходит загрузка всех записей запроса, а потом фильтрация), но более наглядно.

Затем опять же в отчёте или в конструкторе в строке фильтра пишешь
forms!форма.Filter
или в событии открытия отчёта
Me.Filter = forms!форма.Filter
Me.FilterOn = True
Тогда, в принципе, отчёт и форма могут основываться на разных запросах, но на одинаковом фильтре, при условии, что фильтруемые поля будут присутствовать и там и там)

кратчайший путь - он лучший самый ;) наверн, не стоит заставлять акцесс выполнять двойную работу для формы и отчёта..
VBA, MSA97

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.08.2007 (Пн) 21:08

Forlaw
Замечания за флуд.
Не делай так.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Forlaw
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 12.08.2007 (Вс) 17:02

Сообщение Forlaw » 14.08.2007 (Вт) 13:54

сделал так:
сделал в таблице логическое поле.
в форме чекбоксы к нему привязал.
при клике на чекбокс он выделяется и текущая запись сохраняется.
окрываем отчёт с запросом тем же самым + чекбокс=тру.
программно обнуляем все чекбоксы в таблице.
Самые сложные уголовные дела.

Moj
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 11.10.2007 (Чт) 1:22

Сообщение Moj » 27.12.2007 (Чт) 9:23

Может кто-нибудь подскажет, как обработать ТОЛЬКО выделенные записи в ленточной форме ?
Хочу все знать !

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.12.2007 (Чт) 9:41

Вопрос не несет смысловой нагрузки.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList