|
www.integro.ru ЦСИ ИНТЕГРО
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Петр Кузнецов
Зарегистрирован: 21.07.2008 Сообщения: 9
|
Добавлено: Ср 13 Авг 2008 11:09 Заголовок сообщения: Как правильно создать таблицу? |
|
|
Добрый день!
Я немного запутался, мне необходимо добавить(создать таблицу и записать данные) семантику ко вновь созданному слою, пишу так:
Код: |
var
aSemTab: IIngeoSemTable;
aSemDBTab: IIngeoSemDbTables;
aSemDBTable: IIngeoSemDbTable;
begin
// -- Создать таблицу в БД --
aSemDBTab:= FIngeo.ActiveDb.SemDbTables as IIngeoSemDbTables;
aSemDBTable:= aSemDBTab.Add('tab1');
// Добавить поля
aSemDBTable.Fields.Add( 'iID_MO', inftSmallInt, 0, 0, 0 );
aSemDBTable.Fields.Add( 'sName_MO',inftString, 35, 0, 0 );
aSemDBTable.Fields.Add( 'fFactor', inftFloat, 0, 0, 2 );
aSemDBTable.Fields.Add( 'fFactor_step', inftFloat, 0, 0, 2 );
aSemDBTable.Fields.Add( 'fF_step_col', inftFloat, 0, 0, 2 );
// Добавить индексы
aSemDBTable.Indexes.Add('iID_MO', 'iID_MO', inixPrimary);
{1} aSemDBTable.Update;
// -- Сопоставить таблицу со слоем --
aSemTab:= aNewLayer.SemTables.Add;
aSemTab.Name:= 'Таблица1';
aSemTab.SemDbTableName:= 'tab1';
aSemTab.LinkType:= inltOneToOne;
{2} aSemTab.FieldInfos.Add('iID_MO','Поле 1','','','');
{3} aSemTab.FieldInfos.Add('sName_MO','Поле 2','','','');
{4} aSemTab.FieldInfos.Add('fFactor','Поле 3','','','');
{5} aSemTab.FieldInfos.Add('fFactor_step','Поле 4','','','');
{6} aSemTab.FieldInfos.Add('fF_step_col','Поле 5','','','');
aSemTab.Update;
// Добавить тестовые данные
{7}aSemTab.SemDbTable.InsertData
( 'iID_MO,sName_MO,fFactor,fFactor_step,fF_step_col','1001,"Строка",0.0,0.0,0.0', 0 );
{8}aSemTab.SemDbTable.Update;
end;
|
Код выполняется без ошибок, физические таблицы 'tab1.db', 'tab1.px', 'tab1.val' появляются
И еще вопросы по приведенному коду:
1. Таблица создается в строке {1} но при просмотре через проводник ИнГЕО нет системного(неизменяемого) поля ID.
2. При выполнении строк {2-6}, при просмотре через проводник ИнГЕО Наименования полей остаются типа 'sName_MO' а не 'Поле 2'
3. В строках {7,8} полагаю происходит добавление записи в таблицу, но при просмотре семантики через ИнГЕО('Показать окно свойств объекта') пораждается исключительная ситуация "000100026D1 Недопустимое значение для поля типа целое iID_MO"
4. тоже самое по п. 3 но через 'Показать табличные данные активного слоя' пораждается исключительная ситуация 'Table: Field 'ID' not found'
видимо согласуется с п.1.
Прошу помочь!
Заранее благодарен! |
|
Вернуться к началу |
|
|
Петр Кузнецов
Зарегистрирован: 21.07.2008 Сообщения: 9
|
Добавлено: Ср 13 Авг 2008 12:45 Заголовок сообщения: |
|
|
п.1 проблему решил, просто даю такое поле сначала:
Код: |
aSemDBTable.Fields.Add( 'ID', inftString, 12, 0, 0 );
|
и делаю его первичным индексом, тогда ингео его нормально считает системным...
п.2. снимается, все заработало после внесения изменений по п.1.
п.3, п.4. снимаются, соответственно
Однако появились другие проблемки:
Тестовый слой вместе с созданной таблицей удаляю из ИнГЕО, пишет таблица tab1 - занята, удалить все равно? говорю да! слой удаляется но физически таблица остается, естественно при запуске аддона в след раз пишет, что таблица существует.
Закрываю Ингео, удаляю вручную файлы таблицы, запускаю аддон, все равно пишет, "не могу создать таблицу, таблица tab1 - занята".
Я неправильно удаляю? Еще где-то в базе надо подправить? почему ингео "помнит" удаленные таблицы? |
|
Вернуться к началу |
|
|
Михаил Власов
Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
Петр Кузнецов
Зарегистрирован: 21.07.2008 Сообщения: 9
|
Добавлено: Чт 14 Авг 2008 11:14 Заголовок сообщения: |
|
|
Спасибо, исправил свой код, однако проблема с 'Table is busy' осталась(см.мой пред. пост)
И еще вопрос теперь я вставляю в свою таблицу семантику
Код: |
anAddressTable.SemDbTable.InsertData( 'ID,Street,Number','"00010001320D","strrt",25', 0 );
anAddressTable.Update;
|
запись появляется в таблице, вопрос: Как связать эту запись с обектом в слое? или как правильно добавить запись к объекту? |
|
Вернуться к началу |
|
|
Михаил Власов
Зарегистрирован: 14.02.2005 Сообщения: 580 Откуда: ИНТЕГРО
|
|
Вернуться к началу |
|
|
Динар
Зарегистрирован: 28.06.2009 Сообщения: 6
|
Добавлено: Вс 28 Июн 2009 22:54 Заголовок сообщения: |
|
|
решил отписать тут, не создавая новой темы
вобщем нужно добавить новые поля уже в существующую таблицу
Код: | option explicit
sub field
dim i
for i=0 to application.activeprojectview.selectedlayerview.layer.semtables.count -1
application.activeprojectview.selectedlayerview.layer.semtables.item(i).semdbtable.fields.add "wera", inftString, 50, 0, 0
application.activeprojectview.selectedlayerview.layer.semtables.item(i).semdbtable.update
next
end sub |
но поля не добавляются..что делать!
пысы: я человек еще "зеленый" в этом деле =) |
|
Вернуться к началу |
|
|
RuslanG
Зарегистрирован: 10.07.2005 Сообщения: 171 Откуда: ИНТЕГРО
|
Добавлено: Ср 08 Июл 2009 14:35 Заголовок сообщения: |
|
|
Посмотрите обновленную статью Создание семантической таблицы слоя.
В вашем случае пригодится следующий код: Код: | option explicit
sub AddFieldToAllTablesFrom(aLayerID, aFieldName, aFieldCaption)
dim aLayer, aSemTable
set aLayer = ActiveDb.LayerFromID(aLayerID)
for each aSemTable in aLayer.SemTables
aSemTable.SemDbTable.Fields.Add aFieldName, inftString, 100, 0, 0
aSemTable.FieldInfos.Add aFieldName, aFieldCaption, "", "", ""
aSemTable.SemDbTable.Update
aSemTable.Update
next
end sub
dim aLayerId
aLayerId = ActiveProjectView.SelectedLayerView.Layer.ID
AddFieldToAllTablesFrom aLayerID, "wera", "вера" |
_________________ С уважением, Руслан Гадеев
Видео уроки ИнГео
Документация ИнГео
Обновления ИнГео
Интегропедия |
|
Вернуться к началу |
|
|
Динар
Зарегистрирован: 28.06.2009 Сообщения: 6
|
Добавлено: Ср 08 Июл 2009 18:34 Заголовок сообщения: |
|
|
спасибо большое, уже разобрался...решил приблизительно так как вы и написали =) |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете добавлять приложения в этом форуме Вы можете скачивать файлы в этом форуме
|
|