Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Георгий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+"""" |
|
Вернуться к началу |
|
|
Георгий81
Зарегистрирован: 05.03.2012 Сообщения: 7
|
Добавлено: Вс Мар 11, 2012 4:41 pm Заголовок сообщения: |
|
|
Добрый день,
спасибо за помощь но почему то выбираются все записи из таблица...Попробовал по-разному. Либо все либо нечего.((((( |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Вс Мар 11, 2012 9:09 pm Заголовок сообщения: |
|
|
Поотлаживайте программу-то! В переменной I что хоть содержится в моменты исполнения? |
|
Вернуться к началу |
|
|
Георгий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)+"%" |
|
Вернуться к началу |
|
|
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, а не как средство отображения чего-то выбранного в другом месте).
Ладно..., то, что надо отобразить сформировано. Вопрос - Окно карты уже открыто? или надо новое?
Если открыто - исходная таблица (слой) в нем есть?, если нет, видимо, надо добавить (исходную или только выборку).
Если не открыто - нужна новая карта. В ней должно что отбражаться? - исходная таблица или только результаты выборки?
....
И все в таком роде...
...
Ну и "set map" для этой карты с нужным центром и масштабом (посчитаем исходя из результатов поиска...) |
|
Вернуться к началу |
|
|
Георгий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 |
|
Вернуться к началу |
|
|
|