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

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

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



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

СообщениеДобавлено: Пн Мар 05, 2012 4:41 pm    Заголовок сообщения: Оператор Like в диалоге Добавить ответ со ссылкой на данный текст

Добрый день,
помогите решить следующую задачу.
необходимо выполнить поиск по таблице Улицы по колонке Названия при этом часть названия улицы должна содержать текст вводимый в окне диалога. Вот что набросал. но не работает.

Include "MENU.DEF"
Include "MAPBASIC.DEF"
Include "ICONS.DEF"

Declare Sub Main
Declare Sub FindAdressDialog
Declare Sub FindAdress



Dim AdressSrteet,I as String


'=========Создаем кнопку

Sub Main

Alter ButtonPad "Программы" add
PushButton
Calling FindAdressDialog
Icon MI_ICON_MAPSYMB_15
End Sub




'=====================Создаем Дилог поиска

Sub FindAdressDialog

Dialog
Width 205 Height 265
Title "ПОИСК по УЛИЦАМ"




Control StaticText
Title "Введите название улицы"
Position 5, 20

Control EditText
Position 5, 33
Width 190 Height 12
Into AdressSrteet
ID 200

Control CancelButton
Title "Отмена"
Position 65, 240


Control Button
Calling FindAdress
Title "Найти"
Position 15, 240

End Sub



'=====================Процедура выбора улиц

Sub FindAdress


Dim I as String

I=AdressSrteet

Select * from Улицы into SleStreet_1 Where Название Like "%I%"
Browse * From SleStreet_1
'Commit Table SleStreet1 Interactive

End Sub


Спаибо
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



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

СообщениеДобавлено: Пн Мар 05, 2012 6:30 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Sub FindAdress


Dim I as String

I="%"+AdressSrteet+"%"

Select * from Улицы into SleStreet_1 Where Название Like I
Browse * From SleStreet_1
'Commit Table SleStreet1 Interactive

End Sub

Если не получится можно еще так селект написать:
Run Command "Select * from Улицы into SleStreet_1 Where Название Like """+I+""""
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Георгий81



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

СообщениеДобавлено: Вс Мар 11, 2012 4:41 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Добрый день,

спасибо за помощь но почему то выбираются все записи из таблица...Попробовал по-разному. Либо все либо нечего.(((((
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



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

СообщениеДобавлено: Вс Мар 11, 2012 9:09 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Поотлаживайте программу-то! В переменной I что хоть содержится в моменты исполнения?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Георгий81



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

СообщениеДобавлено: Вт Мар 13, 2012 8:27 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Реализовал так:
Sub FindAdress

Update SleStreet
Set
Название = ReadControlValue(200)
Commit Table SleStreet Interactive

'Browse * From SleStreet

'Dim I as String

I="%"+SleStreet.Название+"%"

Select Адрес from Адресная_Книга into SleStreet_1 Where Адрес Like I order by Адрес
Browse * From SleStreet_1
Commit Table SleStreet_1 Interactive
'Dialog Remove

End Sub

Пришлось не переменную а поле в таблице использовать.Не получается I передать знаечение того что я ввожу в поле ID200.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Георгий81



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

СообщениеДобавлено: Вт Мар 13, 2012 8:28 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Только так не очень удобно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Андрей Могильный



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

СообщениеДобавлено: Ср Мар 14, 2012 8:32 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Не понял.
А что так не работает что-ли?

I="%"+ReadControlValue(200)+"%"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
SergS



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

СообщениеДобавлено: Чт Мар 15, 2012 6:02 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

тож не понял.

выражение:

I="%"+ReadControlValue(200)+"%"

должно работать.

Если в самом исходном коде в FindAdress (в самой приведенной первой версии) вместо строки
I=AdressSrteet
поместить:
I=ReadControlValue(200)
то все будет работать

Не работало, потому что значение в AdressSrteet передается только в случае выхода из диалога по батону "Ок", каковой в приведенном диалоге вообще нет.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Георгий81



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

СообщениеДобавлено: Чт Мар 22, 2012 5:17 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Да спосибо все заработал.
Теперь на основе того что выбралось формируется MultiListBox.
Каким оператором показать на карте то что выбрал в MultiListBox???
Спасибо
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
SergS



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

СообщениеДобавлено: Пт Мар 23, 2012 5:23 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Хм, каким оператором....

Если сначала....
Вы в диалоге задаете условия выборки и, не выходя из диалога, производите поиск. на основе результаов поиска заполняете MultiListBox. Зполнение MultiListBox, видимо, предполагает, что Вы собираетесь менять выборку, т.е. не все отобранные записи вас могут интересовать? Если не так, то смысл использования MultiListBox-а исчезает, разве что сделать его недоступным или игнорировать манипуляции пользователя в нем.
Дальше... предполагается, что диалог закрывается? если да, то на OkButton вешаем процедуру обработки, в которой извлекаем выбранные номера MultiListBox, чтобы сформирвать новую выборку, если диалог не закрывается - эту процедуру вешаем на дополнительную кнопку (естественно, это все имеет смысл, если MultiListBox используется как MultiListBox, а не как средство отображения чего-то выбранного в другом месте).
Ладно..., то, что надо отобразить сформировано. Вопрос - Окно карты уже открыто? или надо новое?
Если открыто - исходная таблица (слой) в нем есть?, если нет, видимо, надо добавить (исходную или только выборку).
Если не открыто - нужна новая карта. В ней должно что отбражаться? - исходная таблица или только результаты выборки?
....
И все в таком роде... Smile
...
Ну и "set map" для этой карты с нужным центром и масштабом (посчитаем исходя из результатов поиска...) Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Георгий81



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

СообщениеДобавлено: Пт Мар 23, 2012 11:13 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

)))
Добрй день,

все уже открыто и карта и в ней есть слой, по которому производится выборка и формируется MultiListBox. Необходимо на карте отобразить, то, что выбрано в MultiListBox.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Георгий81



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

СообщениеДобавлено: Пт Мар 23, 2012 11:15 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Недописал)
В MultiListBox интересовать будет только одна запись. Ее и надо отобразить в окне карты.

Спасибо)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
SergS



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

СообщениеДобавлено: Пт Мар 23, 2012 1:50 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

если 1 запись, то можно обойтись и ListBox, впрочем, не важно...

предположим номер выбранной в MultiListBox строки как то попал в переменную id_mlb (или в предложении into id_mlb, либо через ReadControlValue).
Далее

set coordsys window hmap
'hmap - это id того самого окна карты, лучше о нем побеспокоится заранее
Fetch Rec id_mlb from SleStreet_1
ob = SleStreet_1.obj
cx = CentroidX(ob)
cy = CentroidY(ob)
' центр окна карты - на центроид объекта (или еще на какую точку характеризующую объект - что придумаете)
set map window hmap center (cx, cy)

с размером окна карты для лучшего отображения выборки - сложнее, зависит от типа выбранного объекта, можно вообще не менять исходный масштаб

Или, если не стесняемся менять Selection и отображения всех окон, можно сделать так:

Select * from SleStreet_1 where rowid = id_mlb
run menu command M_QUERY_FIND_SELECTION
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

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


Top.Mail.Ru