Переменные в Dialog

MapInfo, MapBasic
Ответить
Shtr1h_KoT
Новоприбывший
Сообщения: 8
Зарегистрирован: 30 сен 2016, 19:00
Репутация: 0

Переменные в Dialog

Сообщение Shtr1h_KoT » 19 май 2019, 18:47

Доброго времени суток! В свое свободное время пишу программки для своей работы в MapInfo. Разобрался уже с многими операторами и функциями. Вывод интерфейса производил в основном через Alter Menu или через "Запустить программу MapBasic". Тут написал "сырую" утилиту, все работает, но решил вывести ее через Dialog. С этим оператором тоже работал (в основном с button, edit text, cancel button, ok button), но не так много, как хочется теперь. Заинтересовали возможности PopupMenu, ListBox, MultiListBox. Ведь это большая мобильность для пользователя и многое можно воткнуть в одну программу. Решил изучать в свободное время. Вчера написал код и не пойму, как работают там переменные. А именно как формируется новая таблица через Select. Последней процедурой хотел вывести во второй ListBox сгруппированные значения колонок. Но решил проверить, работают ли переменные. Если брать

Код: Выделить всё

select * from NameTab into TabSel browse * from TabSel
, то все открывается, вставлять переменную NameCol, то значения не выводятся...

Код: Выделить всё

Include "MapBasic.def"

Declare Sub Main
Declare Sub DLG
Declare sub NameColList
Declare Sub GetColList(ByVal tbl as String)
Declare sub GroupCol

Dim TableList () as String
Dim ColList () as String

Dim TableNumDialog as SmallInt
Dim ColNumDialog as SmallInt


Sub Main()
	Dim i, j as Integer
	
	i = NumTables ()
	ReDim TableList(i)
	For j=1 to i
		TableList(j) = TableInfo(j, TAB_INFO_NAME)
	Next
	Call DLG
End Sub

Sub DLG
	Dialog
	Title "Dialog"
	Width 150 Height 280
	
Control ListBox
	Position 9, 19
	Width 133 Height 107
	Id 1
	Title From Variable TableList
'	Into TableNumDialog
	Calling NameColList
	
Control PopupMenu
	Position 9, 138
	Width 133
	Title From Variable ColList
	Id 2
'	Into ColNumDialog
	
Control ListBox
	Position 9, 171
	Width 133 Height 43
	
Control StaticText
	Position 9, 9
	Width 58 Height 8
	Title "Выбор таблицы"
	
Control StaticText
	Position 9, 128
	Width 46 Height 8
	Title "Выбор поля"
End Sub

Sub NameColList
	Dim ind, i, j as Smallint
	ind = ReadControlValue(1)
	Call GetColList(TableList(ind))
	if UBound(TableList)=0 Then
		Alter Control 2 Title "Нет"
	Else
		Alter Control 2 Title From Variable ColList
	end if
	Call GroupCol
End Sub

Sub GetColList(ByVal tbl as String)
	Dim i, j as Smallint
	i = TableInfo (tbl, TAB_INFO_NCOLS)
	ReDim ColList(i)
	For j=1 to i	
		ColList(j) = ColumnInfo(tbl, "col" & j,COL_INFO_NAME)
	Next
End Sub

Sub GroupCol
	Dim ind_NameTab, ind_NameCol as Smallint
	Dim NameTab, NameCol As String
	ind_NameTab = ReadControlValue(1)
	ind_NameCol = ReadControlValue(2)
	NameTab = TableList(ind_NameTab)
	NameCol = ColList(ind_NameCol)
'	Print NameTab
'	Print NameCol
	select NameCol from NameTab into TabSel
	browse * from TabSel

End Sub

wasposa
Участник
Сообщения: 82
Зарегистрирован: 02 май 2017, 13:22
Репутация: 14
Откуда: Москва

Re: Переменные в Dialog

Сообщение wasposa » 20 май 2019, 09:53

В этом коде запрос происходит при изменении выбора таблицы. При этом ind_NameCol всегда равен 1. Поэтому если у Вас не выводятся значения, то это означает, что в первой колонке у Вас нет значений.

wasposa
Участник
Сообщения: 82
Зарегистрирован: 02 май 2017, 13:22
Репутация: 14
Откуда: Москва

Re: Переменные в Dialog

Сообщение wasposa » 20 май 2019, 10:11

Если я правильно понял Ваш замысел, то выполнение запроса необходимо поставить после выбора поля таблицы. В NameColList удалите вызов GroupCol. Создайте ColNumDialog следующего вида:
Sub ColNumDialog
Dim ind_NameTab, ind_NameCol as Smallint
Dim NameTab,NameCol As String
Dim query As String
ind_NameTab = ReadControlValue(1)
ind_NameCol = ReadControlValue(2)
NameTab = TableList(ind_NameTab)
NameCol = ColList(ind_NameCol)
query="select "+ NameCol+" from "+NameTab+" group by "+NameCol+" into TabSel noselect"
Run Command query
browse * from TabSel
End Sub
Обратите внимание как формируется запрос.

juffin_h
Активный участник
Сообщения: 234
Зарегистрирован: 22 окт 2012, 08:35
Репутация: 42
Откуда: Нижний Новгород

Re: Переменные в Dialog

Сообщение juffin_h » 20 май 2019, 14:21

Shtr1h_KoT писал(а):
19 май 2019, 18:47
вставлять переменную NameCol, то значения не выводятся...
Задайте переменной NameCol тип Alias и все.

Shtr1h_KoT
Новоприбывший
Сообщения: 8
Зарегистрирован: 30 сен 2016, 19:00
Репутация: 0

Re: Переменные в Dialog

Сообщение Shtr1h_KoT » 25 май 2019, 20:23

FacePalm, это же Alias. Ссылка на колонку таблицы... Спасибо!

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость