|
|
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
После общения с уважаемыми участниками форума, решил сделать не динамическую фильтрацию, а запрос на основании полей со списком. Всего полей 4 штуки: Город,диагноз,врач,регион. Естественно пользователь может оставлять любое количество полей пустыми. Получилась ниже приведенная структура, и она работает. Но наверняка все эти структуры можно упаковать в цикл (собственно по этому я и использовал массив), но как я пока не до думал. Собственно вопрос,каким образом сделать построение sql запроса в цикле? Или может не надо этого делать, и оставить как есть? Спасибо ============================================================== ' Обработка нажатия кнопки фильтр, фильтрация по запросу. Private Sub ButtonFltr_Click() Dim sql As Variant Dim sqlmas(4) As String Dim sql1 As String sql = "SELECT * FROM CompTbl" If Not IsNull(PoleCity1) Then sqlmas(0) = "City='" & Me.PoleCity1 & "'" sql = "SELECT * FROM CompTbl WHERE " & sqlmas(0) End If If Not IsNull(Diag1) Then sqlmas(1) = "Diag='" & Me.PoleDiag & "'" If sql > "SELECT * FROM CompTbl" Then sql = sql & " and " & sqlmas(1) Else sql = "SELECT * FROM CompTbl WHERE " & sqlmas(1) End If End If If Not IsNull(PoleDoc) Then sqlmas(2) = "Doc='" & Me.PoleDoc & "'" If sql > "SELECT * FROM CompTbl" Then sql = sql & " and " & sqlmas(2) Else sql = "SELECT * FROM CompTbl WHERE " & sqlmas(2) End If End If If Not IsNull(PoleRegion) Then sqlmas(3) = "Region='" & Me.PoleRegion & "'" If sql > "SELECT * FROM CompTbl" Then sql = sql & " and " & sqlmas(3) Else sql = "SELECT * FROM CompTbl WHERE " & sqlmas(3) End If End If CompTbl.Form.RecordSource = sql End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 14:25 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 14:38 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
Замечания: 1) Dim sql As String 2) Масив зачем. Достаточно одной переменной. 3) Переменная sql1 не используется. Что бы в цикле используй Me.Controls(...) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 14:39 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
Или: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 14:47 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
> If Not IsNull(Diag1) Then > ... "Diag='" & Me.PoleDiag & "'" Если это не ачипятка (во всех остальных случаях названия обоих контролов совпадают), то мою программу (обе) надо подправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 14:49 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
Еще раз спасибо Владимир Саныч! Все работает, этак с ходу я лет через 5 научусь. Первая программа мне больше нравится, очевидно по тому что мне там сразу все понятно стало:) Спасибо , не прощаюсь:) P.S. Когда же я блин таким умным стану, ибо свою программу я вчера до часу ночи "создавал", хотя при условии стажа в 2 недели... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 14:56 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
Пропорция: 2 недели - до часу ночи 20 лет - несколько минут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:00 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
Ну будем стараться:) А вот если глюпый пользователь нажмет кнопку без выбора вполях, когда они все пустые, тогда будет неправильный sql запрос, where нужно убирать както. А у меня такие пользователи, просто чудо:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:05 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
Есть такое свойство элементов управления как TAG, в нем очень удобно хранить всякую всячину. Например, признак того, что данный элемент участвует в составлении условия на запрос + тип этого поля (т.к. если поле дата, то его нужно "yyyymmdd"). Тогда обработчик можно сделать универсальным и не привязанным к конкретной форме и к конкретным полям и нет необходимости создавать массив, да и вообще вынести все в отдельную функцию. Текст функции приводить не буду (жаба задавит :) ), даю только идею. Кого заинтересовала, думаю сможет развить в конкретный код. Пользоваться такой штукой очень удобно, особенно если добавляются новые поля поиска - добавил поле, поставил TAG и все... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:06 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
:^) Таки баг. Тогда вместо CompTbl.Form.RecordSource = "SELECT * FROM CompTbl WHERE " & sqlTail надо так: if sqlTail>"" then CompTbl.Form.RecordSource = "SELECT * FROM CompTbl WHERE " & sqlTail else CompTbl.Form.RecordSource = "SELECT * FROM CompTbl" end if ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:08 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
Спасибо Владимир Саныч, не без гордости сообщаю что до этогj я уже сам додумался, немного не так но мысль та же:) Прогресс на лице:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:12 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
2ВС Или if sqlTail>"" then sqlTail=sqlTail & " and " else sqlTail=" where " & sqlTail .................. CompTbl.Form.RecordSource = "SELECT * FROM CompTbl" & sqlTail ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:15 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
2 dencat: :^P 2 V. Motchulsky: Да и еще раз да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:16 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
2incold А не у Гетца ли ты саму идею спер? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:19 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
некоторые пишут: "Select ... where True " & sqlTail , который (sqlTail т.е.), ес-сно с "and " и стартует (без 'if sqlTail>"" then'). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:21 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
2 Senin Viktor Когда эта функция была написана, у меня Гетца еще не было. Потом прочитал, кое-что улучшил. Так что, идею не спер, а вот кое-что из реализации...таки-да, как сказал бы Владимир Саныч, надеюсь без обид :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:29 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
Кстати о книгах, извините что прерываю :), что посоветуете активно начинающему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:34 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
2 incold: У меня "таки да" без минуса. Попрошу цитировать ближе к оригиналу. :^))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:46 |
|
||
|
Динамическая фильтрация-III(Запрос на основе формы.)
|
|||
|---|---|---|---|
|
#18+
2Санычу >Пропорция: >2 недели - до часу ночи >20 лет - несколько минут мой опыт показывает перевернутую парабалическую кривую 2 недели - несколько часов 2 года - несколько минут 5 лет - 1 час Горе от ума, так сказать. Начинаешь пытаться предусмотреть слишком многое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2003, 15:54 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32169643&tid=1681389]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 352ms |

| 0 / 0 |
