Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
xax_nv
Зарегистрирован: 28.10.2011 Сообщения: 43 Откуда: г. Нижневартовск
|
Добавлено: Вс Май 13, 2012 1:10 pm Заголовок сообщения: Объединение и преобразование полилиний в полигон. |
|
|
Приветствую всех!
Опять обращаюсь за помощью.
Вот такой код срабатывает нормально.
mi.Do "Select * From " & TableName & " where nUch=""86:11:0102002:168"""
Если заменяю значение переменной ее переменной, т.е.:
mi.Do "Select * From " & TableName & " where nUch="" & knUch & """
то получаю ошибку:
"К выборке (Selection) нельзя обращаться, как к таблице."
В чем причина?
Далее я объединяю полилинии и мне нужно преобразовать объединенные полилинии в полигон.
mi.Do "Objects Combine Data nUch=nUch,nPoint=nPoint"
mi.Do "Commit Table " & TableName
mi.Do "obj_region=ConvertToRegion(obj_pline)"
mi.Do "Insert Into " & TableName & " (Object,nUch) Values (obj_region," & Chr(34) & knUch & Chr(34) & ")"
mi.Do "Commit Table " & TableName
При проверке на двух полилиниях в результате выполнения кода в полигон пеобразуется только одна полилиния, хотя они предварительно были объединены.
И еще. Как, не занося полигон как новый объект, существующий объек полилиния превратить в область? |
|
Вернуться к началу |
|
|
SergS
Зарегистрирован: 01.11.2010 Сообщения: 51
|
Добавлено: Пн Май 14, 2012 6:18 am Заголовок сообщения: |
|
|
1.
странно, что компилятор пропустил строку:
mi.Do "Select * From " & TableName & " where nUch="" & knUch & """
здесь должно быть так:
mi.Do "Select * From " & TableName & " where nUch=""" & knUch & """"
2.
расширьте пример, не видно формирований значений переменных obj_region и obj_pline, поэтому сказать что-нить на вопрос трудно
3.
существующий в таблице?
считываете номер текущей записи:
mi.Do "dim irow as integer"
mi.Do "irow = " & TableName & ".rowid"
Преобразуете объект для текущей записи
mi.Do "update " & TableName & " set obj = ConvertToRegion(obj) where rowid = irow"
mi.Do "undim irow"
место размещения dim и undim для irow сами выберите |
|
Вернуться к началу |
|
|
xax_nv
Зарегистрирован: 28.10.2011 Сообщения: 43 Откуда: г. Нижневартовск
|
Добавлено: Пн Май 14, 2012 7:25 am Заголовок сообщения: |
|
|
Сергей, добрый день! Спасибо за помощь.
Да, с кавычками я что-то "протупил".
Вот более полный фрагмент кода:
Код: |
Set mi = CreateObject("MapInfo.application")
mi.Do "Dim obj_region As Object, obj_point As Object, obj_pline As Object"
mi.Do "Set CoordSys Nonearth Units ""m"" Bounds " & MinMax
mi.Do "Set Distance Units ""m"""
TableName = "UchXML"
strCurrPatch = strCurrPatch & "\" & TableName & ".TAB"
mi.Do "Create Table " & TableName & " (nUch Char(20), nPoint Char(20)) file " & Chr(34) & strCurrPatch & Chr(34) & " TYPE NATIVE Charset ""WindowsCyrillic"""
mi.Do "Create Map For " & TableName & " CoordSys NonEarth Units ""m"" Bounds " & MinMax
mi.Do "Set Distance Units ""m"""
Set rs1 = db.OpenRecordset("SELECT tblUch.kadnum FROM tblUch GROUP BY tblUch.kadnum;")
rs1.MoveLast
boss1 = rs1.RecordCount
rs1.MoveFirst
For i = 1 To boss1
Set rs2 = db.OpenRecordset("SELECT tblUch.kadnum, Max(tblUch.kontur) AS [MaxKontur] FROM tblUch GROUP BY " _
& "tblUch.kadnum HAVING tblUch.kadnum = '" & rs1.kadNum & "'")
For j = 1 To rs2!MaxKontur
Set rs3 = db.OpenRecordset("SELECT tblUch.* FROM tblUch Where tblUch.kadnum = '" & rs1.kadNum & "' and tblUch.kontur = " & j & "" _
& " ORDER BY tblUch.id;")
rs3.MoveLast
boss3 = rs3.RecordCount
rs3.MoveFirst
knUch = rs3!kadNum
mi.Do "Create Pline Into Variable obj_pline 0 Pen (2,2, 16711680)"
For k = 1 To boss3
nPoint = rs3!ng
mi.Do "Create Point Into Variable obj_point (" & rs3!Y & "," & rs3!X & ") Symbol (35,0,4,""Map Symbols"",0,0) "
mi.Do "Insert Into " & TableName & " (Object, nPoint) Values (obj_point," & Chr(34) & nPoint & Chr(34) & ")"
mi.Do "Alter Object obj_pline Node Add (" & rs3!Y & "," & rs3!X & ")"
rs3.MoveNext
Next k
mi.Do "Insert Into " & TableName & " (Object,nUch) Values (obj_pline," & Chr(34) & knUch & Chr(34) & ")"
mi.Do "Commit Table " & TableName
Next j
mi.Do "Select * From " & TableName & " where nUch=""" & knUch & """"
mi.Do "Objects Combine Data nUch=nUch,nPoint=nPoint"
mi.Do "Commit Table " & TableName
mi.Do "Select * From " & TableName & " where nUch=""" & knUch & """"
mi.Do "dim irow as integer"
mi.Do "irow = " & TableName & ".rowid"
mi.Do "update " & TableName & " set obj = ConvertToRegion(obj) where rowid = irow"
mi.Do "undim irow"
mi.Do "Commit Table " & TableName
mi.Do "Map From " & TableName
rs1.MoveNext
Next i
|
Вставил Ваш фрагмент кода, но преобразование полилинии в область не происходит. Видимо предварительно нужно встать на нужную строку в таблице. А как, не знаю. |
|
Вернуться к началу |
|
|
SergS
Зарегистрирован: 01.11.2010 Сообщения: 51
|
Добавлено: Пн Май 14, 2012 8:04 am Заголовок сообщения: |
|
|
а-а-а, ну конечно...
замените фрагмент:
mi.Do "Select * From " & TableName & " where nUch=""" & knUch & """"
mi.Do "dim irow as integer"
mi.Do "irow = " & TableName & ".rowid"
mi.Do "update " & TableName & " set obj = ConvertToRegion(obj) where rowid = irow"
mi.Do "undim irow"
следующим:
mi.Do "Select * From " & TableName & " where nUch=""" & knUch & """ into временная_таблица_sel noselect"
mi.Do "update временная_таблица_sel set obj = ConvertToRegion(obj)"
mi.Do "close table временная_таблица_sel"
здесь предполагается, что select c where nUch=""" & knUch & """
выберет 1 запись, и выборка временная_таблица_sel будет ее содержать. Обновляем всю таблицу "временная_таблица_sel" и все. |
|
Вернуться к началу |
|
|
xax_nv
Зарегистрирован: 28.10.2011 Сообщения: 43 Откуда: г. Нижневартовск
|
Добавлено: Пн Май 14, 2012 8:15 am Заголовок сообщения: |
|
|
Сергей, огромное спасибо! Все получилось! |
|
Вернуться к началу |
|
|
|