Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft Access |
![]() ![]() |
Greg987 Member Откуда: Сообщений: 8 |
Добрый день! Хочу вставить фильтр формы в sql запроса, чтобы в итоге получить сохраненный запрос, отфильтрованный как мне нужно. Т.е. я фильтрую запрос в форме и передаю этот фильтр в запрос. [/SRC] Private Sub Кнопка32_Click() Dim filt filt = Me.Filter 'В полученной переменной нужно заменить источник полей и кавычки 'Сейчас получается, что полученный текст фильтра Me.Filter выглядит так: ((([Запрос1].Поле1)="ФильтрТекст")) 'А его нужно заменить на следующий: ((([Табл1].Поле1)='ФильтрТекст')) 'НЕ ЗНАЮ, КАК ЭТО СДЕЛАТЬ. 'Далее подставляю фильтр в запрос и все. CurrentDb.QueryDefs("Запрос1").SQL = "SELECT [Табл1].Поле1, [Табл2].Поле2 FROM Табл1, Табл2 " _ & "WHERE " & filt & " _ & "ORDER BY [21].TEst1, [22].Test2;" End Sub [SRC vba] Это возможно? Если да, то как? Заранее спасибо! |
4 апр 21, 16:57 [22304117] Ответить | Цитировать Сообщить модератору |
Greg987 Member Откуда: Сообщений: 8 |
Сделал. Все работает. Может коряво. Если кто подскажет, как сделать красивей. Но главное - работает!!! [/SRC] Private Sub Кнопка32_Click() Dim filt Dim filt2 filt2=Replace(Me.Filter, Chr(34), Chr(39)) filt = Replace(filt2, "Запрос1", "Табл1") 'Далее подставляю фильтр в запрос и все. CurrentDb.QueryDefs("Запрос1").SQL = "SELECT [Табл1].Поле1, [Табл2].Поле2 FROM Табл1, Табл2 " _ & "WHERE " & filt & " _ & "ORDER BY [21].TEst1, [22].Test2;" End Sub [SRC vba] |
4 апр 21, 17:25 [22304123] Ответить | Цитировать Сообщить модератору |
sdku Member Откуда: Краснодар Сообщений: 7250 |
Greg987,SELECT [Табл1].Поле1, [Табл2].Поле2 FROM Табл1, Табл2 " Если-б еще знать какой смысл в декартовом произведении("перемножении" каждого значения поля одной таблицы(с неким отбором) на все содержимое поля другой таблицы) может лучше JOIN-но не зная решаемой Вами задачи трудно "ванговать" Сообщение было отредактировано: 4 апр 21, 18:29 |
4 апр 21, 18:31 [22304130] Ответить | Цитировать Сообщить модератору |
Кривцов Анатолий Member Откуда: Сообщений: 613 |
Greg987, а где вы используете этот запрос? От ответа зависят и советы. |
5 апр 21, 15:09 [22304522] Ответить | Цитировать Сообщить модератору |
Greg987 Member Откуда: Сообщений: 8 |
sdku, почему перемножении? Обычный запрос на выборку с фильтрацией. Просто я хочу отфильтровать запрос в форме и эту фильтрацию передать в запрос на добавление. Единственное, что я придумал, это фильтровать запрос в форме, брать текст этого фильтра из свойства формы "фильтр" и вставлять его в запрос на добавление, меняя кавычки "" на ''. Подозреваю, что другие решения есть, но, наверное, они сложные. Это самое простое, раз мне пришло в голову. А т.к. я не сторонник сложных решений, ввиду того, что я новичок, то меня это устраивает. Конечно, всегда буду рад увидеть и другие варианты, если предложите. Надеюсь, я задачу описал более внятно, Вам судить. Для развития очень полезно. |
5 апр 21, 19:33 [22304755] Ответить | Цитировать Сообщить модератору |
Greg987 Member Откуда: Сообщений: 8 |
Кривцов Анатолий, Добрый день! В предыдущем посте я описал задачу. Не знаю, как хорошо у меня это получилось. Добавить хотел бы, что фильтр я передаю все таки в запрос на добавление, поэтому вместо Select, конечно же, там стоит Insert Into, хотя сути это не меняет. |
5 апр 21, 19:35 [22304756] Ответить | Цитировать Сообщить модератору |
Кривцов Анатолий Member Откуда: Сообщений: 613 |
Greg987, судя по ((([Запрос1].Поле1)="ФильтрТекст")) в вашем источнике формы присутствует два поля "Поле1" из разных таблиц. Или исключите лишнее, или дайте ему псевдоним. Тогда ваш фильтр будет выглядеть так: ((([Поле1] )="ФильтрТекст")), и, вероятно, его можно применить в вашем запросе без изменений. Насчёт лучших решений - вам знакомо слово Recordset? В форме присутствуют все поля, необходимые для добавления в другую таблицу? |
6 апр 21, 11:21 [22304956] Ответить | Цитировать Сообщить модератору |
sdku Member Откуда: Краснодар Сообщений: 7250 |
"INSERT INTO таблица (поле1,поле2) VALUES (" & Me.поле1 & ",'" & Me.поле2 & "')" 'поле1-числовое,поле2-текстпропустив поля не подлежащие изменению (они в новой записи будут пустыми) Перейти в форме на последнюю запись и заполнить пустые поля (вместо INSERT можно применять рекордсет-об этом говорилось выше) Сообщение было отредактировано: 6 апр 21, 17:43 |
||||
6 апр 21, 17:51 [22305145] Ответить | Цитировать Сообщить модератору |
ИВП Member Откуда: Сообщений: 426 |
Вроде в Вашем примере создается запись только с двумя заполненными полями. А как же остальные - не подлежащие изменению? Вы же пишите, что остальное должно скопироваться? Сообщение было отредактировано: 7 апр 21, 20:51 |
||||
7 апр 21, 20:57 [22305694] Ответить | Цитировать Сообщить модератору |
sdku Member Откуда: Краснодар Сообщений: 7250 |
Про пустые:
|
||||||||
7 апр 21, 22:43 [22305717] Ответить | Цитировать Сообщить модератору |
sdku Member Откуда: Краснодар Сообщений: 7250 |
..пропустив поля |
7 апр 21, 23:20 [22305733] Ответить | Цитировать Сообщить модератору |
ИВП Member Откуда: Сообщений: 426 |
Тут слово НЕ зачеркнуто что ли? тогда все понятно. |
||||
8 апр 21, 15:43 [22306027] Ответить | Цитировать Сообщить модератору |
sdku Member Откуда: Краснодар Сообщений: 7250 |
ИВП, Прошу прощения за ошибку-слово "НЕ" конечно же не читать |
8 апр 21, 15:50 [22306035] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft Access | ![]() |