Сохранение выборок(Select) в рабочем наборе

MapInfo, MapBasic
Ответить
Lexaa
Новоприбывший
Сообщения: 4
Зарегистрирован: 17 дек 2008, 16:57
Репутация: 0

Сохранение выборок(Select) в рабочем наборе

Сообщение Lexaa » 18 дек 2008, 07:25

Здравствуйте.
Пожалейте мою уже полу-лысую голову ) Подскажите с советом.
Пишу программку на Мапбейсике, столкнулся с проблемой: во время работы приложения если были сделаны выборки и добавлены в карту то при попытке сохранения рабочего набора выскакивает «Не удалось сохранить рабочий набор» и «Нераспознанная ошибка» с указанием на строчку с вызовом сохранения рабочего набора.Причем рабочий набор сохраняется не полностью, в нем есть только строчки с Open Table.
Рабочий набор сохраняю вызовом «Save workspace as» + абсолютный путь и имя рабочего набора.
Если выборок нет, рабочий набор сохраняется на ура.
Перепробовал разные версии Мапинфо - результат один.
Вызов диалога с сохранением раб.наб. (Run Menu Command 109) - таже ошибка.
P.S. Что заметил, если сохранять вручную то в рабочем наборе версия Мапинфо пишется правильно (при сохранении из Мапинфо 7.8 - имеем !Version 780 ) а при попытке сохранения из приложения имеем !Version 400 .
Может кто сталкивался с подобным, как обойти?
Сохранение выборок в отдельные таблицы - не выход.

Заранее спасибо ....

Аватара пользователя
Parlament
Интересующийся
Сообщения: 30
Зарегистрирован: 11 сен 2008, 14:51
Репутация: 0
Контактная информация:

Re: Сохранение выборок(Select) в рабочем наборе

Сообщение Parlament » 18 дек 2008, 11:43

Перепробовал разные версии Мапинфо - результат один.
Это само собой.. что вы рассчитывали увидеть новое?


Если можно листинг в студию...

P.S. Как говорит мой начальник мистики и фантастики в программировании нет.. =))))

nf_path - путь
n_wor - имя файла (имя + .WOR)
Сохранение рабочего набора

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

Sub Save_Wor_Files 
Dim tm_st As String
tm_st = nf_path + "\" + n_wor
Save Workspace As tm_st
End Sub 'Save_Wor_Files
Работает 100%

И мне не очень понятно что значит выборка.. я не совсем ас в MapBasic если можно покажите в коде =))))
Последний раз редактировалось Parlament 18 дек 2008, 12:00, всего редактировалось 1 раз.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...

Аватара пользователя
Parlament
Интересующийся
Сообщения: 30
Зарегистрирован: 11 сен 2008, 14:51
Репутация: 0
Контактная информация:

Re: Сохранение выборок(Select) в рабочем наборе

Сообщение Parlament » 18 дек 2008, 11:48

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

If NumTables()>i_open Then
 Close Table Tableinfo(0, TAB_INFO_NAME)
Если вы работаете с таблицей Selection и после работы ее на закрываете WOR фаил то же может не сохранять ее... у меня у самого косяки такие были..

Могу предположить еще
Define M_FILE_SAVE_COPY_AS 106
Так можно сохранить объекты Select
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...

Lexaa
Новоприбывший
Сообщения: 4
Зарегистрирован: 17 дек 2008, 16:57
Репутация: 0

Re: Сохранение выборок(Select) в рабочем наборе

Сообщение Lexaa » 18 дек 2008, 14:06

И мне не очень понятно что значит выборка.
Выборка - это выделение какой либо информации из начальной таблицы во временную, на основе какого-либо условия.
Или вручную - выделением объектов в окне карты или записей в списке, или "Запрос"-"SQL-запрос" (или просто "Выбрать").
Если можно листинг в студию...
) Вручную выбрать несколько объектов, добавить Selection в окно карты у получившегося Query сменить стиль оформления.
А теперь попробовать применить ваш-же код
Sub Save_Wor_Files
Dim tm_st As String
tm_st = nf_path + "\" + n_wor
Save Workspace As tm_st
End Sub 'Save_Wor_Files
Голову на отсечение даю что не получится(Может сохранить, если в мапинфо, в "Настройки"-"Режимы"-"Стартовые" -- "Сохранять запросы в рабочем наборе" не стоит галки.Но тогда и выборки не сохраняются)
Если вы работаете с таблицей Selection и после работы ее не закрываете WOR фаил то же может не сохранять ее... у меня у самого косяки такие были..
Эээээх, жаль (

Аватара пользователя
Parlament
Интересующийся
Сообщения: 30
Зарегистрирован: 11 сен 2008, 14:51
Репутация: 0
Контактная информация:

Re: Сохранение выборок(Select) в рабочем наборе

Сообщение Parlament » 18 дек 2008, 15:05

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

Dim i_opens As SmallInt
i_opens = NumTables()

'***********************************
'Проверка выбран обьект на карте или нет
Set Handler SelChangedHandler On
If SelectionInfo(SEL_INFO_NROWS) = 0 Then
Note "Объект на карте не выбран"
Exit Sub
End If
************************************
Dim i As SmallInt

'************* Узнаем имя файла
Dim tmp_string As String
tmp_string = SelectionInfo(SEL_INFO_TABLENAME)
***************************************************
Dim kol_col, kol_row As SmallInt
'************* **************************
'Узнаем колличество столбцов всего в таблице
kol_col = TableInfo(tmp_string, TAB_INFO_NCOLS)
'************* ******** ******** ******** 
Узнаем количество выделеных строк 
kol_row = SelectionInfo(SEL_INFO_NROWS)
'Note "kol_col = " + kol_col
'Note "kol_row = " + kol_row

If  kol_col < 8 Then
Note "Внимание! Версия программы не поддерживает загруженую таблицу."
Call SK_Exit
End If

Dim protect_it As String
Fetch First From Selection
Dim object_name As String
object_name = Str$(Selection.obj)
For i = 1 to kol_row
  protect_it = ColumnInfo(Selection, "COL1", COL_INFO_NAME)
  If protect_it = "N_абриса"  Then
  N_Abris = Selection.N_абриса
  End If

  protect_it = ColumnInfo(Selection, "COL2", COL_INFO_NAME)
  If protect_it = "Наименование_пункта"  Then
  Name_point = Selection.Наименование_пункта
  End If

  protect_it = ColumnInfo(Selection, "COL3", COL_INFO_NAME)
  If protect_it = "Тип_центра"  Then
  Type_central = Selection.Тип_центра
  End If

  protect_it = ColumnInfo(Selection, "COL4", COL_INFO_NAME)
  If protect_it = "Местоположение"  Then
  Name_position = Selection.Местоположение
  End If

  protect_it = ColumnInfo(Selection, "COL5", COL_INFO_NAME)
  If protect_it = "X"  Then
  Cord_X = Selection.X
  End If

  protect_it = ColumnInfo(Selection, "COL6", COL_INFO_NAME)
  If protect_it = "Y"  Then
  Cord_Y = Selection.Y
  End If

  protect_it = ColumnInfo(Selection, "COL7", COL_INFO_NAME)
  If protect_it = "Высота"  Then
  Height_point = Selection.Высота
  End If

  protect_it = ColumnInfo(Selection, "COL8", COL_INFO_NAME)
  If protect_it = "Примечание"  Then
  Commit_point = Selection.Примечание
  End If
Next
  Закрываем за собой таблицу.. чтобы можно было в последующем работать с другими элементами...
  If NumTables()>i_opens Then
  Close Table Tableinfo(0, TAB_INFO_NAME)
  End If

Здесь идет считывание информации из таблицы и ее обратока данных именно тех объектов которые выделины на карте....
После чего... закрыв все таблицы правильно...
мы можем написать вот такую штуку...

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

Sub Save_Wor_Files
Dim Full_save_wor  As String
Dim name_wor_files As String
Dim full_path As String

name_wor_files = name (имя файла... скорее всего это глобальная переменная или должна передаваться в качестве параметра в процедуру) + ".WOR"
full_path = "C:\test"
Full_save_wor = full_path + "\" + name_wor_files
Save Workspace As tm_st
End Sub 'Save_Wor_Files

По любому работать будет....
Последний раз редактировалось Parlament 18 дек 2008, 16:48, всего редактировалось 1 раз.
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...

Аватара пользователя
Parlament
Интересующийся
Сообщения: 30
Зарегистрирован: 11 сен 2008, 14:51
Репутация: 0
Контактная информация:

Re: Сохранение выборок(Select) в рабочем наборе

Сообщение Parlament » 18 дек 2008, 15:07

Lexaa читайте код внимательно... не обязательно копировать весь код просто посмотрите описание функций которые я использую.. и приблизительно поймете нужны ли они вам....
Если надо могу дать Хелпу.. по MapBasic на Русском языке.. =))))
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...

Lexaa
Новоприбывший
Сообщения: 4
Зарегистрирован: 17 дек 2008, 16:57
Репутация: 0

Re: Сохранение выборок(Select) в рабочем наборе

Сообщение Lexaa » 18 дек 2008, 16:48

) За хелп конечно спасибо ...

Ну а по сути, просмотрел код и не нашел там ничего что мне может пригодится.
Т.е. давайте я попробую на словах обрисовать ситуацию.

Есть сохраненный пользователем рабочий набор вида:

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

!Workspace
!Version 780
!Charset WindowsCyrillic
Open Table "Участки" As Участки Interactive
Select *  from Участки  where Katzem = 10000000  into ааа
Select *  from Участки  where Katzem = 20000000  into ббб
Map From Участки,ааа,ббб

'  **** Это не концовка, дальше все как обычно ***
Нюанс в том что временные таблицы участвуют в окне карты - задается оформление для каждого слоя с выборкой, потому просто взять и закрыть все селекты я не могу.Сохранять каждый селект отдельно в каждую таблицу - это пока единственный вариант похоже.НО, у меня возникает вопрос - почему пользователь, непосредственно при работе в мапинфо может сохранить рабочий набор(и этот рабочий набор будет содержать селекты) а приложение написанное на мапбейсике - не может.

Вы писали уже что
Если вы работаете с таблицей Selection и после работы ее не закрываете WOR фаил то же может не сохранять ее... у меня у самого косяки такие были..
Очень жаль что не разобрались.
Если у меня будут какие-то успехи то я здесь напишу.

Boris
Гуру
Сообщения: 4208
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Сохранение выборок(Select) в рабочем наборе

Сообщение Boris » 19 дек 2008, 01:04

Да, клинический случай. При наличии запросов рабочий набор командой
Save Workspace as "t:\1\a3.WOR"
не сохраняется :twisted: .
А командой
run command "Save Workspace as ""t:\1\a3.WOR"""
сохраняется :shock: .
Успехов в поисках иных граблей!

Lexaa
Новоприбывший
Сообщения: 4
Зарегистрирован: 17 дек 2008, 16:57
Репутация: 0

Re: Сохранение выборок(Select) в рабочем наборе

Сообщение Lexaa » 19 дек 2008, 06:46

При наличии запросов рабочий набор командой Save Workspace as "t:\1\a3.WOR"
не сохраняется :twisted: .
А командой
run command "Save Workspace as ""t:\1\a3.WOR"""
сохраняется :shock: .
Четко, кратко и по делу.
Спасибо большое.
Теперь на самом деле сохраняет...

P.S. ToAll Извините если сразу что-то не понял, опыт в программировании не очень большой )

Boris
Гуру
Сообщения: 4208
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Сохранение выборок(Select) в рабочем наборе

Сообщение Boris » 19 дек 2008, 13:12

2 Lexaa
[quote="Boris"]Да, клинический случай. /quote]
Это было естественно про MapInfo. А случай, действительно интресный. К счастью весь MapInfo/MapBasic состоит из таких клинических кусочков. И попытки сделать как написано приводят только к недоумению. Но где-то рядом как правило есть такая неприметная дверь, на которой написано что-то другое, но ведет она именно туда куда нужно, а иногда вообще в никуда :cry: .

Ответить

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

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

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