RUS  ENG 

Delphi база в слое, создание таблицы

Страницы: 1
RSS
Delphi база в слое, создание таблицы, Delphi база в слое, создание таблицы
 
Добрый день
Delphi 2007, клиент-сервер (SQL Server LocalDB)

Db.CreateTableEx(source,Layer.UserName+'_defekt33',tbldef,true,tblinfo);
если source пустая строка или Null, создает таблицу парадох безо всякой ругани

если Db.Sources.Item[0], чтобы таблица была в SQL Server LocalDB, получаю ошибку Db.LastErrorString: Неправильный параметр
вариант Db.Tables.Item[0].Source, то есть попытка взять существующий Source, тоже не проходит

бодаюсь уже не первый день, или чего-то не допонимаю, или ...

Подскажите куда двигаться.
Спасибо.

П.С. Ну и заодно как вручную заполнить IZbSourceInfo объект, если это возможно.
 
IZbSourceInfo заполняется добавлением в IZbSources https://www.politerm.com/zuludoc/index.html#zuluax/IZbSources_Add.html

А создание таблицы дальше по описанию попробуйте. https://www.politerm.com/zuludoc/index.html#zuluax/ZbDatabase_CreateTableEx.html
 
Похоже я действительно чего-то не догоняю :(...
Задача вроде простая: добавляю тип, режимы, подключаю базу (это все сделано) , а вот как создать таблицу и подключить ее к этой базе - тут уперлось.
Лучший результат Db.LastErrorString: Неправильный параметр.
Изменено: Vic - 02.11.2018 09:22:19
 
Пришлите хотя бы кусок текста программы. [email protected] На словах не понять, что делается, что не получается.
 

Как-то так

Код
Map := CoMapDoc.Create;
Map.AddLayer(LayerName);
Layer := Map.Layers.Active;
// типы и режимы пропускаем
db := CoZbDatabase.Create;
//открываем существующую базу 
db.Open(Layer.Bases.ItemById[1].Name); 
//запоминаем source
source := db.Sources.Item[0];

// Создаем свою базу 
baseid := Layer.Bases.Create('тест');
// открываем ее
db.Open(Layer.Bases.ItemById[baseid].Name);

//Описываем поля таблицы
tbldef := CoZbTableDef.Create;
tbldef.AddField('Sys', zbftInteger, 0, 0, true);
tbldef.AddField('Descr', zbftString, 50, 0, false);

// Создаем таблицу с source, который запомнили
res := db.CreateTableEx(source,Layer.UserName+'_test',tbldef,true,tblinfo);

на выходе db.LastErrorString: Неправильный параметр

даже если просто сделать так (таблица на самом деле есть):

db.DropTable(source,Layer.UserName+'_test');

результат тот же - db.LastErrorString: Неправильный параметр

вроде ничего не пропустил
 
Vic, source можно использовать только в рамках одной базы данных. Нельзя получить источник от одной базы, а потом подставить его в другую в качестве параметра. Система возвращает "неправильный параметр" т.к. такой источник во вновь создаваемой базе не найден. Создайте в новой базе новый источник или используйте имя "Источника данных Zulu", который был предварительно определён в системе.
На будущее: никакой объект одной базы нельзя напрямую использовать в другой базе.
 
Цитата
Дмитрий Озеров написал:
На будущее: никакой объект одной базы нельзя напрямую использовать в другой базе.
Все ничего, но хотелось бы допустить переиспользования текущего источника баз данных открытого слоя.
Конструкция для CreateTableEx вида
Код
db.Sources.Add(zbstSQLLocalDb,'C:\Program Files (x86)\Zulu 8.0\Data\tmp\tmp-net.mdf');
требует локальный доступ к файлам сервера.
Или все таки есть способ добраться до манипулирования таблицами поверх соединения с Zulu-севером, не связываясь с ADO,ODBC на клиенте?
 
Vic, для этого предусмотрен механизм "источников данных ZuluGIS" (см. https://www.politerm.com/zuludoc/index.html#zb_datasrc.html, https://www.politerm.com/zuluserver/webhelp/index.html#zsdatasrc.html)
1. Можно создать источник данных на сервере и опубликовать его (см. https://www.politerm.com/zuluserver/webhelp/index.html#zsa_datasrc.html). После чего использовать имя источника в методе CreateTableEx. Но это подразумевает использование одной какой-то базы.
2. Можно использовать суррогатное имя источника "\x01localdb" для локальных баз данных SQL Server LocalDB. Тогда можно будет использовать разные базы для каждого слоя. Конструкция "\x01" обозначает символ с кодом 1.
Страницы: 1