www.map-info.ru :: Просмотр темы - Можно создать запрос с изменяемым условием
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Nick4



Зарегистрирован: 15.10.2011
Сообщения: 95

СообщениеДобавлено: Пт Фев 20, 2015 11:45 am    Заголовок сообщения: Можно создать запрос с изменяемым условием Добавить ответ со ссылкой на данный текст

Есть таблица. Надо поставить к ней запрос, но условие запроса формируется от задач, которые поставил пользователь от 1 до 50. Т.е. в одном случае условие простое where a=b, а в другом where a=b and a>20 and ..... Сломал голову, но ничего так и не нашел. Последовательно делать кучу запросов, при объёмной базе приводит к "зависанию".
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Сб Фев 21, 2015 9:32 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

А все условия сконкатенировать в одном запросе никак?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Nick4



Зарегистрирован: 15.10.2011
Сообщения: 95

СообщениеДобавлено: Пн Фев 23, 2015 12:00 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Условий около 70. И применяются они по желанию пользователя. Т.е. пользователь может выбрать один или 10 или все. Считайте, сколько комбинаций select надо предусмотреть. Я уже посчитал 70 в двоичной системе, переводим в десятичную = 1.18Е+21
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
thegeo



Зарегистрирован: 17.01.2012
Сообщения: 119

СообщениеДобавлено: Пн Фев 23, 2015 9:18 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Получается, что вам нужно построить некоторый конструктор запросов. Для начала стоит проверить, насколько условия независимы и все эти условия, записать в виде текста в массив, например
dtQr(1)= " a=b "
dtQr(2)= " a>20 "

Соответствующие переменные a, b, … д.б. в программе определены.
В зависимости от текущего выбора (например, через CheckBoxs) формируется запрос в виде строки:
myQuery= " Select * From " & tbName & " Where " & dtQr(2) & " And " & dtQr(5)
Run Command myQuery
Это только предложение в общем виде. Кроме того полагаю что те же 70 условий можно разбить на несколько непересекающихся групп так что в каждой группе будет не больше 20-30 условий.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вт Фев 24, 2015 9:16 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Каждое условие - это всего лишь дополнение "AND <условие>" в секцию WHERE. Не понимаю в чем проблема с 70 конструкциями AND в секции WHERE.
Или я что-то не понял, или вы не разъяснили.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Nick4



Зарегистрирован: 15.10.2011
Сообщения: 95

СообщениеДобавлено: Вт Фев 24, 2015 6:35 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

thegeo писал(а):
Получается, что вам нужно построить некоторый конструктор запросов. Для начала стоит проверить, насколько условия независимы и все эти условия, записать в виде текста в массив, например
dtQr(1)= " a=b "
dtQr(2)= " a>20 "

Соответствующие переменные a, b, … д.б. в программе определены.
В зависимости от текущего выбора (например, через CheckBoxs) формируется запрос в виде строки:
myQuery= " Select * From " & tbName & " Where " & dtQr(2) & " And " & dtQr(5)
Run Command myQuery
Это только предложение в общем виде. Кроме того полагаю что те же 70 условий можно разбить на несколько непересекающихся групп так что в каждой группе будет не больше 20-30 условий.


Run command не работает с переменными. Т.е. та часть, которая не в кавычках не может содержать переменные данные. Пробовал.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Nick4



Зарегистрирован: 15.10.2011
Сообщения: 95

СообщениеДобавлено: Вт Фев 24, 2015 6:41 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Андрей Могильный писал(а):
Каждое условие - это всего лишь дополнение "AND <условие>" в секцию WHERE. Не понимаю в чем проблема с 70 конструкциями AND в секции WHERE.
Или я что-то не понял, или вы не разъяснили.


Имеется интерфейс. При помощи диалога пользователь выбирает условия запроса. Например год выпуска и название, или год выпуска, название и владелец... Проблема в том, что неизвестно сколько условий задаст пользователь. Возможно 1, а возможно 70. Отсюда каждый раз меняется строка select. Но в MB нельзя во время выполнения программы менять ее код.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Андрей Могильный



Зарегистрирован: 21.03.2006
Сообщения: 864

СообщениеДобавлено: Вт Фев 24, 2015 8:36 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Да почему нельзя-то? Run Command как вам и указали. Только конечно переменными пользоваться внутри Run Command не нужно, используйте подстановку самих значений переменных в момент конструирования списка условий.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Nick4



Зарегистрирован: 15.10.2011
Сообщения: 95

СообщениеДобавлено: Ср Фев 25, 2015 2:33 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Андрей Могильный писал(а):
Да почему нельзя-то? Run Command как вам и указали. Только конечно переменными пользоваться внутри Run Command не нужно, используйте подстановку самих значений переменных в момент конструирования списка условий.


Уважаемый каких значений? Значения вводит пользователь в диалоге. Заодно, если Вас не затруднит,уточните, как в программе вместо переменной можно поставить её значение.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
thegeo



Зарегистрирован: 17.01.2012
Сообщения: 119

СообщениеДобавлено: Ср Фев 25, 2015 7:29 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Пример:

sub setF_select
dim qq(5) as string
dim myQuery as string
'имя таблицы записано в переменной tbName
'имена полей: f1,f2,f3,f4,f5
qq(1)="f1>f2"
qq(2)="f1>20"
qq(3)="f3<100"
qq(4)="f3>f1"
qq(5)="f4=f2"
'выбраны условия 1 и 2
myQuery= " Select * From " & tbName & " Where " & qq(1) & " And " & qq(2) & " into Selection1"
Run Command myQuery
Browse * From Selection1
'выбраны условия 2, 3 и 5
myQuery= " Select * From " & tbName & " Where " & qq(2) & " And " & qq(3) & " And " & qq(5) & " into Selection2"
Run Command myQuery
Browse * From Selection2
'пусть в условии qq(2) фигурирует переменная
dim limit as integer
limit=25
qq(2)="f1>" & limit
myQuery= " Select * From " & tbName & " Where " & qq(1) & " And " & qq(2) & " into Selection3"
Run Command myQuery
Browse * From Selection3
End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Nick4



Зарегистрирован: 15.10.2011
Сообщения: 95

СообщениеДобавлено: Чт Фев 26, 2015 11:16 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

thegeo писал(а):
Пример:

sub setF_select
dim qq(5) as string
dim myQuery as string
'имя таблицы записано в переменной tbName
'имена полей: f1,f2,f3,f4,f5
qq(1)="f1>f2"
qq(2)="f1>20"
qq(3)="f3<100"
qq(4)="f3>f1"
qq(5)="f4=f2"
'выбраны условия 1 и 2
myQuery= " Select * From " & tbName & " Where " & qq(1) & " And " & qq(2) & " into Selection1"
Run Command myQuery
Browse * From Selection1
'выбраны условия 2, 3 и 5
myQuery= " Select * From " & tbName & " Where " & qq(2) & " And " & qq(3) & " And " & qq(5) & " into Selection2"
Run Command myQuery
Browse * From Selection2
'пусть в условии qq(2) фигурирует переменная
dim limit as integer
limit=25
qq(2)="f1>" & limit
myQuery= " Select * From " & tbName & " Where " & qq(1) & " And " & qq(2) & " into Selection3"
Run Command myQuery
Browse * From Selection3
End Sub


Похоже работает. Сбило с толку вот это:
"К тому же, в строке command не могут быть использованы имена переменных; то есть, переменные
не могут появляться в кавычках. Например, следующая группа операторов не будет работать,
так как указание на переменные x и y попадает в строку, ограниченную кавычками"

еще не пробовал в полном объеме. Во всяком случае спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru